如果想程序化交易商品,编写策略时一般会取连续合约进行测试,但是问题产生了:一旦商品进入换月,那么测试数据就会失真。
本人的想法是这样:连续合约的日期跟主力合约一致的,将符合范围的时间值标记输出;
比如,当前主力合约为1505时,将主力合约的这个时间(假设为150205开始,到150403结束,就将这两个时间值取出来,而且这两个时间戳理论上是和连续合约吻合的)
在150205到150403这段时间的主力合约数据和连续合约的数据理论是吻合的(比如成交量,最高价,最低价等等)
最好能够将数据生成外部文件格式存放。
万能的版主啊,请教您,如何实现这个想法?希望给予帮助啊。不胜感激。
runmode:0;
aa:=strleft(stklabel,2);
nn:=aa+'00';
if vol=callstock(nn,vtvol,datatype) then nn1:date+19000000;
debugfile2('d:\test.txt','当前为主力合约日期: %.0f',nn1,0);
文档在d盘的test文档
我在MA09下执行这段代码,输出结果为:当前主力合约日期: 20150414
当前主力合约日期: 20150415
当前主力合约日期: 20150416
当前主力合约日期: 20150417
当前主力合约日期: 20150420
当前主力合约日期: 20150421
当前主力合约日期: 20150422
当前主力合约日期: 20150423
当前主力合约日期: 20150424
当前主力合约日期: 20150427
当前主力合约日期: 20150428
当前主力合约日期: 20150429
当前主力合约日期: 20150430
当前主力合约日期: 20150504
当前主力合约日期: 20150505
当前主力合约日期: 20150506
当前主力合约日期: 20150507
当前主力合约日期: 20150508
当前主力合约日期: 20150511
当前主力合约日期: 20150512
当前主力合约日期: 20150513
当前主力合约日期: 20150514
当前主力合约日期: 20150515
当前主力合约日期: 20150518
如何利用函数读取外部生成的test.txt文件,将时间信息读入金字塔自编函数;
时间开始和结束这两个值,20150414(VAR1)和20150518(VAR2),存在两个变量中VAR1和VAR2;
entertime := data>=VAR1 and data<=VAR2;
大概就只这个意图。谢谢版主
版主给出的代码真是个好东西。但是还是不符合我的想法,我的表达有问题,重新说明如下:
在连续合约页面下,自动判断连续合约和主力合约的时间戳;
1、自动寻找1501主力合约时间:将这个起始点和终点时间取出;
2、1502...直到1512;
也许需要做成外部数据文件,每个品种去做成一个数据表格。
这些时间构成断断续续的二维数组;
当执行主力合约换月的时候,连续合约上面必须强制平仓,等待新的信号出现,才出现开仓信号(以吻合换月后的新合约)。那么在连续合约上,就必须要有这些时间戳来匹配。否则执行换月的时候,价格可能会有跳空情况出现,导致测试数据失真。
这个时间戳就是为了过滤这个换月过程带来的数据异常情况。
你的要求实现不了,
之前的代码可以实现判断当前合约是不是主力合约,再多的就没有了
版主你好:
品种比如是I00,和TA00,显然公式得修改:
aa:=strleft(stklabel,2);
nn:=aa+'00';
能否加个判断,优化下,当前品种为一个字母的,自动取aa:=strleft(stklabel,1); 当品种为2个字母的,自动取aa:=strleft(stklabel,2);
[此贴子已经被作者于2015/5/21 8:26:46编辑过]
版主你好:
品种比如是I00,和TA00,显然公式得修改:
aa:=strleft(stklabel,2);
nn:=aa+'00';
能否加个判断,优化下,当前品种为一个字母的,自动取aa:=strleft(stklabel,1); 当品种为2个字母的,自动取aa:=strleft(stklabel,2);
这个判断不了是不是字母,如果合约是1个字母的,那就自行把
aa:=strleft(stklabel,2);修改为aa:=strleft(stklabel,1);