【零基础】极星量化扩展一:如何做跨合约的交易

一、前言

  最近有个童鞋想用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的,只是在读价格时必须要将合约、周期写全才行。

 

四、总结

  这篇实现了跨合约的交易,除了示例的用法,其实还可以用于延时行情交易,因为延时行的合约是不能直接交易的,可以用这个办法来交易,这样做外盘的童鞋不购买行情也能测试策略了。

  示例中的完整代码可以关注公众号“零基础爱学习”回复“LH15”获得