【零基础】极星量化扩展一:如何做跨合约的交易
一、前言
最近有个童鞋想用A合约的信号来交易B合约,不懂为什么要这么做,在实现时发现无论怎么做都只能发A合约的委托。
其实问题很简单,这里就以双均线策略为例,以RB2007为信号,交易RB2010。这里说的双均线策略是极星量化自带的示例策略DMA,我们改改。
二、实现
1、订阅两个合约
注意这里先订阅信号合约,再订阅交易的合约。
2、计算MA
需要注意,这里要忽略第二个合约的行情,因为我们只用它下单。在极星里,如果触发的合约是A合约,那么Close()返回的就是A合约的价格。
其次我们订阅了历史数据用以计算MA,所以还得忽略历史数据,等历史数据触发完毕再执行真实的策略。
注意这里触发的是A合约,所以MA计算的是A合约的MA。
3、下单
tim_trigger获取的MA是A合约的,这里在下单时使用B合约,这就简单实现了A合约的信号交易B合约。
三、扩展
这里我们使用A合约信号交易B合约,而且首先订阅了A合约,所以A合约是基准合约。有童鞋实践时发现如果先订阅B合约,Close(contractID1)获取到的却是B合约的价格。一度让我以为只能先订阅A合约,这样就只能将B合约的成交显示到A合约的K线了。
经过我测试其实并不是这样,无论先订阅那里一个都是OK的,只是在读价格时必须要将合约、周期写全才行。
四、总结
这篇实现了跨合约的交易,除了示例的用法,其实还可以用于延时行情交易,因为延时行的合约是不能直接交易的,可以用这个办法来交易,这样做外盘的童鞋不购买行情也能测试策略了。
示例中的完整代码:
https://share.weiyun.com/384d4xtt