技术分析
筹码分布
def calc_chip_dist(*, data: pd.DataFrame, ac: int = 1, chip_dist: Dict = None) -> Dict:
计算筹码分布,采用的是三角分布的算法,不要传递上市以来的所有数据,否则计算比较慢。传递120天或者90天,计算的结果和全量数据结果差不多。
输入:
名称 | 类型 | 描述 |
---|---|---|
data | pd.DataFrame |
股票日线数据, 参考日线数据bars部分 |
输出:
名称 | 类型 | 描述 |
---|---|---|
chip | Dict | 所有价格的筹码分布 |
chip_list | Dict | 每日的筹码分布 |
筹码分布Dict |
||
价格 | 持仓量 | key为价格单位分,value为持仓量 |
示例:
In [8]: from qfetch import *
In [9]: data = await fetch_stock_bar(code='sz000039')
In [10]: data = data['bars']
In [11]: data = data[-10:-1]
In [12]: dist = calc_chip_dist(data=data)
In [13]: dist
Out[13]:
{'chip': {690: 13.788155302733578,
...
722: 26.93899356690681},
'chip_list': {20230901: {...},
...
20230913: {...}}}
In [14]:
筹码获利盘
def calc_winner(*, chip_dist: Dict, data: pd.DataFrame = None, price: float = None) -> Dict:
输入:
名称 | 类型 | 描述 |
---|---|---|
chip_dist | Dict | calc_chip_dist的返回值 |
data | Dict |
股票日线数据, 参考日线数据bars部分,主要是参考收盘价,data和price两者必须一个不为空 |
price | float | 相对该价的盈利,data和price两者必须一个不为空 |
输出:
名称 | 类型 | 描述 |
---|---|---|
- | Dict | 每日的盈利概率 |
盈利概率 |
||
日期 | Float | key为日期int,value为概率 |
示例:
In [14]: calc_winner(chip_dist=dist, data=data)
Out[14]:
{20230901: 0.6644586478617531,
20230904: 0.6291703778163454,
20230905: 0.7535948207068112,
20230906: 0.2455806272170779,
20230907: 0.04154799274363736,
20230908: 0.0,
20230911: 0.5919655179648782,
20230912: 0.18903289615357532,
20230913: 0.5132108034149797}
In [15]:
筹码成本分布
def calc_cost(*, chip_dist: Dict, ratio: int) -> Dict
输入:
名称 | 类型 | 描述 |
---|---|---|
chip_dist | Dict | calc_chip_dist的返回值 |
ratio | int | 成本区间,如90,代表90%的筹码 |
输出:
名称 | 类型 | 描述 |
---|---|---|
- | Dict | 每日的盈利概率 |
盈利概率 |
||
日期 | Float | key为日期int,value为价格 |
示例:
In [15]: calc_cost(chip_dist=dist, ratio=90)
Out[15]:
{20230901: 7.15,
20230904: 7.2,
20230905: 7.2,
20230906: 7.19,
20230907: 7.19,
20230908: 7.18,
20230911: 7.18,
20230912: 7.18,
20230913: 7.17}
均线
def ma(bar: List[float], ma_type: int) -> List[float]
输入:
名称 | 类型 | 描述 |
---|---|---|
bar | List[float] | 价格列表 |
ma_type | int | ma类型 |
输出:
名称 | 类型 | 描述 |
---|---|---|
- | List[float] | 均线列表 |
示例:
In [6]: from qstrategy.qstrategy import ma, shadow
In [7]: data = list(data['close'])
In [8]: data = await loader.load_stock_daily(filter={'code': 'sz000001'}, limit=60)
In [9]: data = list(data['close'])
In [10]: ma(data, 5)
Out[10]:
[23.03200340270996,
22.81000328063965,
22.640003204345703,
...
23.410001754760742,
0.0,
0.0,
0.0,
0.0]
蜡烛阴影
def shadow(last_close: float,
open: float,
close: float,
low: float,
high: float,) -> Tuple[float]
输入:
名称 | 类型 | 描述 |
---|---|---|
last_close | float | 昨收价 |
open | float | 开盘价 |
close | float | 收盘价 |
low | float | 最低价 |
high | float | 最高价 |
输出:
名称 | 类型 | 描述 |
---|---|---|
- | Tuple[float] | (振幅, 上天线占比, 蜡烛图占比, 下天线占比) |
示例:
In [11]: shadow(10.0, 13.0, 14.0, 8.0, 15.5)
Out[11]: (75.0, 20.0, 13.333333015441895, 66.66666412353516)