pystockdb 的金融技术和基本面分析指标库。
项目描述
pystockfilter
创建您自己的基本面或基于图表的股票过滤器。您只需要一个使用pystockdb设置的数据库。
内置过滤器
技术过滤器
基本过滤器
- 勒弗曼
- Piotroski F 分数
- 目标价格分数:分析师目标价格与实际价格的比较
安装
pip install pystockfilter
快速开始
构建内部过滤器:
import logging
from pystockdb.db.schema.stocks import db
from pystockfilter.tool.build_internal_filters import BuildInternalFilters
# connect to database
arguments = {'db_args': {
'provider': 'sqlite',
'filename': db_path_test,
'create_db': False
}
}
db.bind(**arguments["db_args"])
db.generate_mapping()
# create internal filters for Adidas AG and Infineon
arguments = {'symbols': ['ADS.F', 'IFX.F']}
builder = BuildInternalFilters(arguments, logger)
builder.build()
# create internal filters for all stocks in database
arguments = {'symbols': ['ALL']}
builder = BuildInternalFilters(arguments, logger)
builder.build()
构建自定义过滤器:
import logging
import math
from datetime import datetime
import numpy as np
import tulipy as ti
import yfinance as yf
from dateutil.relativedelta import relativedelta
from pony.orm import db_session, select
from pystockdb.db.schema.stocks import Price, Tag
from pystockfilter.filter.base_filter import BaseFilter
from pystockfilter.base.base_helper import BaseHelper
from pystockfilter.tool.build_filters import BuildFilters
# custom filter
class DividendKings(BaseFilter):
"""
Calculates median of last dividends
"""
NAME = 'DividendKings'
def __init__(self, arguments: dict, logger: logging.Logger):
self.buy = arguments['args']['threshold_buy']
self.sell = arguments['args']['threshold_sell']
self.lookback = arguments['args']['lookback']
self.max_yield = arguments['args']['max_div_yield']
super(DividendKings, self).__init__(arguments, logger)
@db_session
def analyse(self):
symbol = select(sym.name for sym in self.stock.price_item.symbols
if Tag.YAO in sym.item.tags.name).first()
try:
yao_item = yf.Ticker(symbol)
data = yao_item.dividends
except ValueError:
raise RuntimeError("Couldn't load dividends for {}".format(symbol))
dates = data.index.array
drop = []
# let us calculate the dividend yield
for my_date in dates:
price = Price.select(
lambda p: p.symbol.name == symbol
and p.date.date() == my_date.date()
).first()
if price:
div_yield = (data[my_date] / price.close) * 100
if div_yield > self.max_yield:
drop.append(my_date)
self.logger.error(
'{} has a non plausible div yield at {} ({} = {} / {} * 100).'
.format(symbol, my_date, div_yield, data[my_date], price.close)
)
else:
data[my_date] = div_yield
else:
drop.append(my_date)
data = data.drop(labels=drop)
self.calc = data.median(axis=0)
if self.calc is None or math.isnan(self.calc):
raise RuntimeError("Couldn't calculate dividend yield.")
return super(DividendKings, self).analyse()
def get_calculation(self):
return self.calc
def look_back_date(self):
return self.now_date + relativedelta(months=-self.lookback)
logger = BaseHelper.setup_logger("custom filter")
arguments_div = {
"name": "DividendKings",
"bars": False,
"index_bars": False,
"args": {
"threshold_buy": 3,
"threshold_sell": 0.2,
"intervals": None,
"max_div_yield": 9,
"lookback": 2,
},
}
symbols = ["ADS.F", "WDI.F", "BAYN.F"]
config_custom_filter = {
"symbols": symbols,
"filters": [DividendKings(arguments_div, logger)],
}
custom = BuildFilters(config_custom_filter, logger)
custom.build()
问题跟踪器
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
pystockfilter-1.0.9.tar.gz
(14.9 kB
查看哈希)
内置分布
pystockfilter-1.0.9-py3-none-any.whl
(19.4 kB
查看哈希)
关
pystockfilter -1.0.9.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c2aa39f2da10ad2acb71a492bdd07d1ea547366172f94765d5398f49186aaeb5 |
|
MD5 | f4e0aa1b38a95a41e4e642a607a6f861 |
|
布莱克2-256 | 1a971ace7530a76fc939fbb4783ec23271b6766921c5c3a407cdc9ee594c0c90 |
关
pystockfilter -1.0.9-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 380f0bac1a88fb1f9fe11d0bb9efadacb92b798c1876f05fb72fe330bab7571c |
|
MD5 | 24fd63ca011d3b3ae936a055f5bbae9f |
|
布莱克2-256 | 78d21eca62e0fcff49e46909044e7db8f8c2193311f46409356259ad8c665e78 |