CzscTrader
- class czsc.traders.CzscTrader(bg: BarGenerator | None = None, positions: List[Position] | None = None, ensemble_method: AnyStr | Callable = 'mean', **kwargs)[source]
Bases:
CzscSignals
缠中说禅技术分析理论之多级别联立交易决策类(支持多策略独立执行)
Attributes Summary
判断仓位是否发生变化
Methods Summary
get_ensemble_pos
([method])获取多个仓位的集成仓位
get_ensemble_weight
([method])获取 CzscTrader 中所有 positions 按照 method 方法集成之后的权重
get_position
(name)获取指定名称的仓位策略对象
on_bar
(bar)输入基础周期已完成K线,更新信号,更新仓位
on_sig
(sig)通过信号字典直接交易,用于快速回测场景
take_snapshot
([file_html, width, height])获取快照
update
(bar)输入基础周期已完成K线,更新信号,更新仓位
weight_backtest
(**kwargs)执行仓位集成权重的回测
Attributes Documentation
- pos_changed
判断仓位是否发生变化
函数首先检查self.positions是否为空。如果为空,即没有仓位,函数直接返回False。
- 如果self.positions不为空,函数遍历所有的仓位,对于每一个仓位,函数检查其pos_changed属性。
如果任何一个仓位的pos_changed属性为True,即该仓位发生了变化,函数返回True。
- Returns:
True/False
Methods Documentation
- get_ensemble_pos(method: AnyStr | Callable | None = None) float [source]
获取多个仓位的集成仓位
函数执行逻辑:
函数首先检查self.positions是否为空。如果为空,即没有仓位,函数直接返回0。
如果self.positions不为空,函数获取集成方法method。如果没有传入method参数,函数使用self.__ensemble_method作为集成方法。
- 如果method是一个字符串,函数将其转换为小写,然后获取所有仓位的仓位序列pos_seq。
如果method是”mean”,函数计算pos_seq的平均值作为集成仓位。
如果method是”vote”,函数计算pos_seq的和的符号作为集成仓位。
如果method是”max”,函数获取pos_seq的最大值作为集成仓位。
如果method不是以上任何一个值,函数抛出一个值错误。
如果method不是一个字符串,即它是一个回调函数,函数将所有仓位的名称和仓位组成的字典作为参数传入method,并将返回值作为集成仓位。
- Parameters:
method –
多个仓位集成一个仓位的方法,可选值 mean, vote, max;也可以传入一个回调函数
假设有三个仓位对象,当前仓位分别是 1, 1, -1 mean - 平均仓位,pos = np.mean([1, 1, -1]) = 0.33 vote - 投票表决,pos = 1 max - 取最大,pos = 1
对于传入回调函数的情况,输入是 self.positions
- Returns:
pos, 集成仓位
- get_ensemble_weight(method: AnyStr | Callable | None = None)[source]
获取 CzscTrader 中所有 positions 按照 method 方法集成之后的权重
函数执行逻辑:
函数首先接收一个参数method,这是集成方法,可以是字符串或者一个回调函数。
函数检查是否提供了method参数。如果没有提供,函数使用self.__ensemble_method作为集成方法;如果提供了,函数使用提供的method作为集成方法。
函数调用get_ensemble_weight函数,输入self和method,获取所有仓位按照指定方法集成之后的权重。
- Parameters:
method –
str or callable 集成方法,可选值包括:’mean’, ‘max’, ‘min’, ‘vote’ 也可以传入自定义的函数,函数的输入为 dict,key 为 position.name,value 为 position.pos, 样例输入:
{‘多头策略A’: 1, ‘多头策略B’: 1, ‘空头策略A’: -1}
kwargs –
- Returns:
pd.DataFrame columns = [‘dt’, ‘symbol’, ‘weight’, ‘price’]
- get_position(name: str) Position | None [source]
获取指定名称的仓位策略对象
函数执行逻辑:
函数首先接收一个参数name,这是要查找的仓位名称。
函数检查self.positions是否为空。如果为空,即没有仓位,函数直接返回None。
如果self.positions不为空,函数遍历所有的仓位,对于每一个仓位,函数检查其名称是否与输入的名称相同。如果相同,函数返回该仓位。
如果遍历所有的仓位都没有找到与输入名称相同的仓位,函数返回None。
- Parameters:
name – 仓位名称
- Returns:
Position
- on_sig(sig: dict) None [source]
通过信号字典直接交易,用于快速回测场景
函数执行逻辑:
函数首先接收一个参数sig,这是一个信号字典,赋值给self.s。
- 函数从sig中提取出标的代码symbol,结束时间dt,K线ID id,以及收盘价close,
并将它们分别赋值给self.symbol,self.end_dt,self.bid,和self.latest_price。
如果self.positions不为空,即存在持仓策略,函数遍历所有position,函数调用position.update(self.s),更新该仓位的状态
- Parameters:
sig – 信号字典
- Returns:
None
- take_snapshot(file_html=None, width: str = '1400px', height: str = '580px')[source]
获取快照
- Parameters:
file_html – 交易快照保存的 html 文件名
width – 图表宽度
height – 图表高度
- Returns: