1 目前的CTA策略只有一个合约
class CtaTemplate(ABC):
... ...
def __init__(
self,
cta_engine: Any,
strategy_name: str,
vt_symbol: str, # 合约代码
setting: dict,
):
用户策略启动后,CTA策略引擎帮助订阅代码为vt_symbol合约的行情,用户策略收到tick推送之后,合成1分钟bar、N分钟bar乃至小时日线的bar。
策略在on_xmin_bar()函数中实现交易信号的计算并且完成交易逻辑。
我们可以知道,策略使用vt_symbol合约的行情指导了对vt_symbol合约的交易。
2 CTA策略的应该包含两个合约参数:指标合约和交易合约
2.1 何为交易合约
交易合约是指CTA策略要交易的合约,目前CTA策略里的合约参数就是交易合约,如果是期货的话,我们一般都选择主力合约来交易。
2.2 何为指标合约
指标合约是指CTA策略用来进行各种指标计算的合约,它可以和要交易的合约相同,也可以不同。可以是交易合约所在品种或者板块的指数,也可以是交易合约所在品种的指数或者主连合约,也可以选择如rqdata中的经过主力合约如rb888,rb999之类的主连合约,这样合约是通过行主力合约间的升水和贴水的方式得到的,没有主连合约那样的在主力合约去换时产生的巨大跳空,更加合理。
2.3 增加指标合约的好处
- 我们一般都选择主力合约,因为流动性好,在品种合约中占据主导地位。
- 主力合约会变化,到期之后需要即时换约
- 主力合约的K线通常较短,通常较短,长的7,8个月,短的2,3个月,不利于指标分析。一个期货合约上线通常不足一年,它成为主力合约的时间更短,它在非主力合约时期和成为主力合约之后的行情节奏有时候会判若两人!
- 主连合约的时间通常较长,可以长达数年,便于指标分析,但是不可以交易!
- 合约指数的时间通常也较长,可以长达数年而且连续平滑,便于指标分析,也是不可以交易!
- 如果增加了指标合约,分型行情的时候,使用指数或者主连合约来分析,交易的时候才有主力合约来交易,就可以实现自动换约,及时跟踪到最新的主力合约,有可以避免新近主力合约K线数量太少的问题,一举两得!
3 如何修改?
要做到这一点,需要修改的类包括:
3.1 修改CtaEngine:
对send_order等需要需要区分对策略的交易合约发送委托单,
策略初始化时需要同时订阅指标合约和交易合约的行情。
3.2 修改CtaTemplate:
加指标合约参数vt_symbol1,
指标计算时时有指标合约的行情数据进行进行
交易时使用交易合约进行交易
3.3 修改CTA的StrategyManager
使得在CTA策略在创建时可以输入指标合约