设为首页收藏本站

 找回密码
 注册
查看: 22813|回复: 32
打印 上一主题 下一主题

自动构建主力合约--自动实现历史测试之前的数据选取工作 [复制链接]

Rank: 4

精华
1
UID
714
积分
581
帖子
126
主题
23
阅读权限
50
注册时间
2007-11-10
最后登录
2015-12-1
跳转到指定楼层
1#
发表于 2009-3-9 14:10:30 |只看该作者 |倒序浏览
    笔者踏入期货市场多年,学习了不少技术分析方法,也接触了一些前沿理念,而期货市场日益兴起的程序化交易方法就是其中重要的一种。
程序化交易,即是指将人的操作理念和风险控制原则等编制为计算机的某种特定软件可执行的代码,由计算机代为执行。从而减少因为人性的弱点而执行起来产生偏差的情况。同时,使用程序化交易系统也可以对人的操作起到有益的辅助作用,减轻人的负担。
    愿望是美好的,程序化交易理念的产生应该也是基于以上的美好目标。可是要编制出一套完整有效和稳定的程序化交易系统出来,却并非易事。先不说前期的量化和代码转化等问题,即使是这些问题都已经解决了,那也只能说是我们的程序化交易系统才完成一小半。为什么呢?因为我们还有更重要的测试工作要做。一个没有经过测试并优化改进的系统,是万万不可贸贸然投入实战的。
    由于我们是立足于对过去已经发生的事件和行情所编制的系统,所以第一步我们应该测试在历史行情上的表现如何,如果在历史测试中都表现平平,那大概就是我们总结归纳出来的方法有问题,是没有任何实际使用价值的。在此基础上,如果测试效果不错,我们再将系统应用于实盘上跟踪观测一段时间。在确保没有新的问题和不稳定因素出现的情况下,我们才可以投入真金白银进去。
    可见第一步的历史测试相当重要,它的结果几乎就决定了后续工作的开展与否。了解程序化交易的朋友们都知道,目前国内普遍使用的可支持程序化交易的交易软件也就那么2-3家,他们分别是文华财经、金狐交易师和交易开拓者。其中最为普遍的还是文华财经的WebStock,目前最新版本是2008版。可是笔者却不怎么喜欢该软件:函数少,自定义扩展功能也不怎么样,数据还经常变来变去不真实。而金狐交易师是由鼎鼎大名的飞狐交易师演变而来,由于其本身固有的特点以及营销模式的问题,目前国内似乎只有中国国际期货公司才为客户提供该软件,一般客户难以享受到该软件的强大功能。那么,就剩下最后一款软件了:交易开拓者,又称TB。事实上,笔者该次的试验就是建立在该软件之上的,没有该软件,就不会有本文的产生。
    为什么要选择交易开拓者做为我们本次分析研究的平台,这要归因于历史数据的选取上。很多步入程序化交易领域的交易员——有些甚至已经堪称“元老”级人物,却还是不知道该如何来进行历史测试。常见的就是看到有人说自己研发出一套系统,宣称盈利和各方面表现都非常可观,再一看他的测试周期——直接跨度几年。我们都知道,期货市场不同于股票,是存在换月和主力合约与非主力合约一说的。我很怀疑他们的方法难道在一天成交量不足1手的情况下也能发挥出系统本人宣称的“奇效”。所以我比较赞同的,是程序化交易中一直存在的另一种理性的声音:分段截取主力合约数据来检验系统的有效性。
    数据收集工作,看似简单。如果历史测试回溯时间不长,那我们大可以人工选择并截取,但是如果测试时间跨度长达几年呢?如果能够用电脑程序来自动筛选提取那是最好不过了。而要实现编程自动实现这一目的,目前来看,只有运用TB强大的合约叠加功能才能实现。
        附完成图:


上部分是所有合约的叠加效果,顺序无所谓。以橡胶为例,如下图:

下部分则是我们历史测试需要的数据,根据需要,可取得任一品种从上市之初到现在的所有主力合约数据。这样,对于系统测试就方便多了。
    说到这里,笔者一直心存疑惑:为什么目前的期货行情软件不考虑一下方便投资者,设置一个自动筛选并更新各品种主力合约的功能呢?由于期货市场的特殊性,主力合约是一般投资者重点关注的对象,更有许多投资者从来只看主力合约,而他们为了保持这样一个习惯,则经常要注意是否该换月了,是否自己说做的月份已经流动性不足……可喜的是,在本文即将完稿之时,无意中发现一款软件,已经具备这个功能,它是由深圳市金牛信息技术有限公司开发的“财顺”:

    只是目前该软件尚处于测试期,各大期货公司也都只提供了它的测试版下载地址,远远没有期货公司目前采用的澎博博易大师、文华财经、富远行情普及,希望以后能看到这些老牌的期货信息提供商也能够吸取晚辈的优点,早日推出更合理更人性化的服务。


[ 本帖最后由 hedgehog 于 2009-3-9 22:18 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
森林中最不缺的是猎物,对猎人来说最珍贵的是子弹
[fly]人生没有彩排,每一场都是现场直播[/fly]

Rank: 4

精华
1
UID
714
积分
581
帖子
126
主题
23
阅读权限
50
注册时间
2007-11-10
最后登录
2015-12-1
2#
发表于 2009-3-9 14:11:43 |只看该作者
  1. //------------------------------------------------------------------------
  2. // 简称: ZLHY
  3. // 名称: 主力合约
  4. // 类别: 技术指标
  5. // 类型: 其它类
  6. // 输出:
  7. //------------------------------------------------------------------------
  8. Vars
  9.     Numeric Major(0);
  10.     Numeric Con0;
  11.     Numeric Con1;
  12.     Numeric Con2;
  13.     Numeric Con3;
  14.     Numeric Con4;
  15.     Numeric Con5;
  16.     Numeric Con6;
  17.     Numeric Con7;
  18.     Numeric Con8;
  19.     Numeric Con9;
  20.     Numeric Con10;
  21.     Numeric Con11;
  22.     Numeric MyOpen;
  23.     Numeric MyHigh;
  24.     Numeric MyLow;
  25.     Numeric MyClose;
  26. Begin
  27.     CON0=AverageFC(DATA0.OPENINT(),5);
  28.     CON1=AVERAGEFC(DATA1.OPENINT(),5);
  29.     CON2=AVERAGEFC(DATA2.OPENINT(),5);
  30.     CON3=AVERAGEFC(DATA3.OPENINT(),5);
  31.     CON4=AVERAGEFC(DATA4.OPENINT(),5);
  32.     CON5=AVERAGEFC(DATA5.OPENINT(),5);
  33.     CON6=AVERAGEFC(DATA6.OPENINT(),5);
  34.     CON7=AVERAGEFC(DATA7.OPENINT(),5);
  35.     CON8=AVERAGEFC(DATA8.OPENINT(),5);
  36.     CON9=AVERAGEFC(DATA9.OPENINT(),5);
  37.     CON10=AVERAGEFC(DATA10.OPENINT(),5);
  38.     CON11=AVERAGEFC(DATA11.OPENINT(),5);

  39.     If(Con0 > Major)
  40.     {
  41.         Major = Con0;
  42.         MyOpen = Data0.Open;
  43.         MyHigh = Data0.High;
  44.         MyLow = Data0.Low;
  45.         MyClose = Data0.Close;
  46.     }

  47.     If(Con1 > Major)
  48.     {
  49.         Major = Con1;
  50.         MyOpen = Data1.Open;
  51.         MyHigh = Data1.High;
  52.         MyLow = Data1.Low;
  53.         MyClose = Data1.Close;
  54.     }

  55.     If(Con2 > Major)
  56.     {
  57.         Major = Con2;
  58.         MyOpen = Data2.Open;
  59.         MyHigh = Data2.High;
  60.         MyLow = Data2.Low;
  61.         MyClose = Data2.Close;
  62.     }

  63.     If(Con3 > Major)
  64.     {
  65.         Major = Con3;
  66.         MyOpen = Data3.Open;
  67.         MyHigh = Data3.High;
  68.         MyLow = Data3.Low;
  69.         MyClose = Data3.Close;
  70.     }

  71.     If(Con4 > Major)
  72.     {
  73.         Major = Con4;
  74.         MyOpen = Data4.Open;
  75.         MyHigh = Data4.High;
  76.         MyLow = Data4.Low;
  77.         MyClose = Data4.Close;
  78.     }

  79.     If(Con5 > Major)
  80.     {
  81.         Major = Con5;
  82.         MyOpen = Data5.Open;
  83.         MyHigh = Data5.High;
  84.         MyLow = Data5.Low;
  85.         MyClose = Data5.Close;
  86.     }

  87.     If(Con6 > Major)
  88.     {
  89.         Major = Con6;
  90.         MyOpen = Data6.Open;
  91.         MyHigh = Data6.High;
  92.         MyLow = Data6.Low;
  93.         MyClose = Data6.Close;
  94.     }

  95.     If(Con7 > Major)
  96.     {
  97.         Major = Con7;
  98.         MyOpen = Data7.Open;
  99.         MyHigh = Data7.High;
  100.         MyLow = Data7.Low;
  101.         MyClose = Data7.Close;
  102.     }

  103.     If(Con8 > Major)
  104.     {
  105.         Major = Con8;
  106.         MyOpen = Data8.Open;
  107.         MyHigh = Data8.High;
  108.         MyLow = Data8.Low;
  109.         MyClose = Data8.Close;
  110.     }

  111.     If(Con9 > Major)
  112.     {
  113.         Major = Con9;
  114.         MyOpen = Data9.Open;
  115.         MyHigh = Data9.High;
  116.         MyLow = Data9.Low;
  117.         MyClose = Data9.Close;
  118.     }

  119.     If(Con10 > Major)
  120.     {
  121.         Major = Con10;
  122.         MyOpen = Data10.Open;
  123.         MyHigh = Data10.High;
  124.         MyLow = Data10.Low;
  125.         MyClose = Data10.Close;
  126.     }

  127.     If(Con11 > Major)
  128.     {
  129.         Major = Con11;
  130.         MyOpen = Data11.Open;
  131.         MyHigh = Data11.High;
  132.         MyLow = Data11.Low;
  133.         MyClose = Data11.Close;
  134.     }

  135.     PlotNumeric("High",MyHigh);
  136.     PlotNumeric("Open",MyOpen);
  137.     PlotNumeric("Low",MyLow);
  138.     PlotNumeric("Close",MyClose);
  139. End
  140. //------------------------------------------------------------------------
  141. // 编译版本        GS2004.06.12
  142. // 用户版本        2008/08/21 16:15
  143. // 版权所有        hedgehog
  144. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  145. //                        每一版本的TrabeBlazer公式修改和重写的权利
  146. //------------------------------------------------------------------------
复制代码
森林中最不缺的是猎物,对猎人来说最珍贵的是子弹
[fly]人生没有彩排,每一场都是现场直播[/fly]

使用道具 举报

Rank: 4

精华
1
UID
714
积分
581
帖子
126
主题
23
阅读权限
50
注册时间
2007-11-10
最后登录
2015-12-1
3#
发表于 2009-3-9 14:12:43 |只看该作者
已经附上指标代码

有需要的可自行稍作修改,加入文字提示,这样就可以大大方便系统历史测试之前的数据选取工作了。


明眼人一眼就可以看出来,我的构建依据是持仓量的5日平均,以最大的那个合约作为主力合约


实际中发现 把OPENINT()换成VOL()可能更好,因为在主力合约的变换上面,成交量的变化更先于持仓量。


本文仅做抛砖引玉只用,欢迎斧正

[ 本帖最后由 hedgehog 于 2009-3-9 14:26 编辑 ]
森林中最不缺的是猎物,对猎人来说最珍贵的是子弹
[fly]人生没有彩排,每一场都是现场直播[/fly]

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
296
积分
2574
帖子
40
主题
6
阅读权限
80
注册时间
2007-9-6
最后登录
2023-5-24
4#
发表于 2009-3-9 14:29:54 |只看该作者
很不错.谢谢hedgehog 分享.

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
5#
发表于 2009-3-9 14:32:16 |只看该作者
不错,加精

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
296
积分
2574
帖子
40
主题
6
阅读权限
80
注册时间
2007-9-6
最后登录
2023-5-24
6#
发表于 2009-3-9 14:36:37 |只看该作者
有个问题是换月时各合约之间的价差产生的跳空缺口怎么处理?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
7#
发表于 2009-3-9 14:42:12 |只看该作者
应该是没有处理,可以考虑做一个标记。比如,把最后一天的成交量修改为奇数。这样程序判断到这天就换仓

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
296
积分
2574
帖子
40
主题
6
阅读权限
80
注册时间
2007-9-6
最后登录
2023-5-24
8#
发表于 2009-3-9 14:59:49 |只看该作者
原帖由 nopain 于 2009-3-9 14:42 发表
应该是没有处理,可以考虑做一个标记。比如,把最后一天的成交量修改为奇数。这样程序判断到这天就换仓

也是个方法.在测试程序中加入换仓程序.

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
2688
积分
1440
帖子
33
主题
11
阅读权限
60
注册时间
2008-10-30
最后登录
2019-3-30
9#
发表于 2009-3-9 16:02:02 |只看该作者
问题是做好了连续数据再导入就出问题!!这问题不解决就难办!

使用道具 举报

Rank: 9Rank: 9Rank: 9

精华
0
UID
1003
积分
19790
帖子
490
主题
38
阅读权限
150
注册时间
2007-12-30
最后登录
2020-2-26
10#
发表于 2009-3-9 20:25:00 |只看该作者
的确是精华文章

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-10 22:08

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部