Position
- class czsc.Position(symbol: str, opens: List[Event], exits: List[Event] = [], interval: int = 0, timeout: int = 1000, stop_loss=1000, T0: bool = False, name=None)[source]
Bases:
object
Attributes Summary
开平交易列表
获取所有事件的唯一信号列表
Methods Summary
dump
([with_data])将对象转换为 dict
evaluate
([trade_dir])评估交易表现
evaluate_holds
([trade_dir])按持仓信号评估交易表现
get_signals_config
([signals_module])获取事件的信号配置
load
(raw)从 dict 中创建 Position
update
(s)更新持仓状态
Attributes Documentation
- pairs
开平交易列表
返回样例:
- [{‘标的代码’: ‘000001.SH’,
‘交易方向’: ‘多头’, ‘开仓时间’: Timestamp(‘2020-04-17 00:00:00’), ‘平仓时间’: Timestamp(‘2020-04-20 00:00:00’), ‘开仓价格’: 2838.49, ‘平仓价格’: 2852.55, ‘持仓K线数’: 1, ‘事件序列’: ‘开多@站上SMA5 -> 开多@站上SMA5’, ‘持仓天数’: 3.0, ‘盈亏比例’: 49.53},
- {‘标的代码’: ‘000001.SH’,
‘交易方向’: ‘多头’, ‘开仓时间’: Timestamp(‘2020-04-20 00:00:00’), ‘平仓时间’: Timestamp(‘2020-04-24 00:00:00’), ‘开仓价格’: 2852.55, ‘平仓价格’: 2808.53, ‘持仓K线数’: 4, ‘事件序列’: ‘开多@站上SMA5 -> 平多@100BP止损’, ‘持仓天数’: 4.0, ‘盈亏比例’: -154.32}]
数据说明:
盈亏比例,单位是 BP
持仓天数,单位是 自然日
持仓K线数,指基础周期K线数量
- unique_signals
获取所有事件的唯一信号列表
Methods Documentation
- evaluate(trade_dir: str = '多空') dict [source]
评估交易表现
- Parameters:
trade_dir – 交易方向,可选值 [‘多头’, ‘空头’, ‘多空’]
- Returns:
交易表现
- evaluate_holds(trade_dir: str = '多空') dict [source]
按持仓信号评估交易表现
- Parameters:
trade_dir – 交易方向,可选值 [‘多头’, ‘空头’, ‘多空’]
- Returns:
交易表现
- update(s: dict)[source]
更新持仓状态
函数执行逻辑:
首先,检查最新信号的时间是否在上次信号之前,如果是则打印警告信息并返回。
初始化一些变量,包括操作类型(op)和操作描述(op_desc)。
遍历所有的事件,检查是否与最新信号匹配。如果匹配,则记录操作类型和操作描述,并跳出循环。
提取最新信号的相关信息,包括交易对符号、时间、价格和成交量。
更新持仓状态的结束时间为最新信号的时间。
如果操作类型是开仓(LO或SO),更新最后一个事件的信息。
定义一个内部函数__create_operate,用于创建操作记录。
根据操作类型更新仓位和操作记录。
如果操作类型是LO(开多),检查是否满足开仓条件,如果满足则开多仓,否则只平空仓。
如果操作类型是SO(开空),检查是否满足开仓条件,如果满足则开空仓,否则只平多仓。
- 如果当前持仓为多仓,进行多头出场的判断:
如果操作类型是LE(平多),平多仓。
如果当前价格相对于最后一个事件的价格的收益率小于止损阈值,平多仓。
如果当前成交量相对于最后一个事件的成交量的增加量大于超时阈值,平多仓。
- 如果当前持仓为空仓,进行空头出场的判断:
如果操作类型是SE(平空),平空仓。
如果当前价格相对于最后一个事件的价格的收益率小于止损阈值,平空仓。
如果当前成交量相对于最后一个事件的成交量的增加量大于超时阈值,平空仓。
将当前持仓状态和价格记录到持仓列表中。
- Parameters:
s – 最新信号字典
- Returns: