开拓者期货期权程序化系统交易论坛

标题: 自动换月代码实现问题。 [打印本页]

作者: pepsi    时间: 2012-2-9 08:53:45     标题: 自动换月代码实现问题。

Data0为TA连续,Data1为TA01合约,Data2为TA05合约,Data3为TA09合约。
用Data0产生交易信号,对应当前主力合约发出委托,代码如下。
  1. Params
  2.         Numeric Lots(1);
  3.         Numeric Slippage(0);
  4.         Numeric Length1(10);
  5.         Numeric Length2(20);
  6.        
  7. Vars
  8.         NumericSeries EMa1;
  9.         NumericSeries EMa2;
  10. Begin
  11.         EMa1=XAverage(Close, Length1);
  12.         EMa2=XAverage(Close, Length2);
  13.         PlotNumeric("EMa1",EMa1);
  14.         PlotNumeric("EMa2",EMa2);
  15.         If(CrossOver(EMa1[1],EMa2[1]))
  16.         {
  17.                 If(Data0.Vol==Data1.Vol)
  18.                 {
  19.                         Data1.Buy(Lots,Data1.Open+Slippage);
  20.                 }
  21.                 If(Data0.Vol==Data2.Vol)
  22.                 {
  23.                         Data2.Buy(Lots,Data2.Open+Slippage);
  24.                 }
  25.                 If(Data0.Vol==Data3.Vol)
  26.                 {
  27.                         Data3.Buy(Lots,Data3.Open+Slippage);
  28.                 }
  29.         }
  30.         If(CrossUnder(EMa1[1],EMa2[1]))
  31.         {
  32.                 If(Data1.MarketPosition==1)
  33.                 {
  34.                         Data1.Sell(Lots,Data1.Open-Slippage);
  35.                 }
  36.                 If(Data2.MarketPosition==1)
  37.                 {
  38.                         Data2.Sell(Lots,Data2.Open-Slippage);
  39.                 }
  40.                 If(Data3.MarketPosition==1)
  41.                 {
  42.                         Data3.Sell(Lots,Data3.Open-Slippage);
  43.                 }
  44.         }

  45. End
复制代码
[attach]8000[/attach]

盘中测试当前主力合约05月份正常开平仓,但09合约每次开仓信号跟随开仓,但不跟随平仓。
作者: 读书山林    时间: 2012-2-9 11:40:59

好东西必须顶起来
作者: 读书山林    时间: 2012-2-9 11:46:06

09合约每次开仓信号跟随开仓,这是什么原因呢,不解决还是不能实现自动换月啊
作者: pepsi    时间: 2012-2-10 15:44:16

等待管理员解释。
作者: pepsi    时间: 2012-2-11 14:30:02

回复 3# 读书山林
代码写的看上去没有逻辑错误,但是还是出现这种情况,怀疑是TB运行机制导致的,最终解释留给管理员来。
作者: wanyg    时间: 2012-2-12 23:11:44

用持仓量判断交割会不会好点阿
作者: fybhwsx    时间: 2012-2-13 09:03:43

这种方法感觉不是很可靠,即使实现不是还得更换叠加新的合约吗。我在想,如果把所有商品的主力合约数据的传送方式改为全推,应该可以通过函数后台获取到当前商品的主力合约代码,再通过交易系统直接指定代码下单,应该可以实现无人值守的自动换月吧?
作者: pepsi    时间: 2012-2-13 09:34:35

回复 7# fybhwsx
这些活应该是TB公司做做吧。
作者: pepsi    时间: 2012-2-13 09:35:36

回复 6# wanyg
Bar的基本信息中包含有持仓量数据吗?
作者: pepsi    时间: 2012-2-13 09:41:34

我找到了函数OpenInt;
同时用OpenInt和Vol来判断是否换月可能更精准。其实只用一个来判断就可以了,两个合约交替的时候成交量相等的概率太低了,历史中就没有过。
作者: wanyg    时间: 2012-2-13 17:04:57

呵呵,等待你的好消息啊,
作者: fybhwsx    时间: 2012-2-13 20:00:35

我找到了函数OpenInt;
同时用OpenInt和Vol来判断是否换月可能更精准。其实只用一个来判断就可以了,两个合 ...
pepsi 发表于 2012-2-13 09:41


交替时成交量相等的概率不大,关键是老主力合约的成交量又时会重新超过新主力合约。以连续5天成交量保持最大的合约为条件来判断其为主力合约,应该比较稳妥吧。
作者: pepsi    时间: 2012-2-17 09:19:27

回复 12# fybhwsx
有道理
作者: 莫小漠    时间: 2012-4-12 11:24:28

pepsi 发表于 2012-2-11 14:30
回复 3# 读书山林
代码写的看上去没有逻辑错误,但是还是出现这种情况,怀疑是TB运行机制导致的,最终解释 ...

怎么会没有逻辑错误呢,穿越怎么用在了IF里面。
作者: pepsi    时间: 2012-4-12 15:20:18

代码未作任何修改,在4.2.5版本中做回测,达到理想效果,实盘表现还未知。
作者: rookies    时间: 2012-7-27 12:33:54

pepsi 发表于 2012-4-12 15:20
代码未作任何修改,在4.2.5版本中做回测,达到理想效果,实盘表现还未知。 ...

最近在研究这方面问题,如果用于自动化交易的话,要实现无人值守换月是必须自动完成的。
作者: pepsi    时间: 2012-7-27 14:04:02

有好方法,欢迎来晒一晒
作者: rookies    时间: 2012-7-31 12:47:01

pepsi 发表于 2012-7-27 14:04
有好方法,欢迎来晒一晒

没有什么好的方法,受您的方法启发很大,就是不太放心自动去换月。没有测试条件

如果需要做得更细一些可以If(Data0.Vol==Datax.Vol  && Data0.High==Datax.High && Data0.Low==Datax.Low)

这样不会因为成交量的误差而造成开平错合约

我测试过实时地对比连续合约与主力合约的High、Low,发现有时连续和主力合约会出现瞬时的不一致,不确定是否会影响自动换月交易

不知道您长期测试过效果没有,如何?
作者: prozacer    时间: 2017-9-13 00:27:03






欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2