技术分析

筹码分布

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)