以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于主力合约问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=78718)

--  作者:chenfansky
--  发布时间:2015/5/18 16:06:38
--  关于主力合约问题

如果想程序化交易商品,编写策略时一般会取连续合约进行测试,但是问题产生了:一旦商品进入换月,那么测试数据就会失真。


本人的想法是这样:连续合约的日期跟主力合约一致的,将符合范围的时间值标记输出;

比如,当前主力合约为1505时,将主力合约的这个时间(假设为150205开始,到150403结束,就将这两个时间值取出来,而且这两个时间戳理论上是和连续合约吻合的)

在150205到150403这段时间的主力合约数据和连续合约的数据理论是吻合的(比如成交量,最高价,最低价等等)


最好能够将数据生成外部文件格式存放。


万能的版主啊,请教您,如何实现这个想法?希望给予帮助啊。不胜感激。



--  作者:jinzhe
--  发布时间:2015/5/18 16:22:04
--  
处理中,请稍等
--  作者:jinzhe
--  发布时间:2015/5/18 16:24:47
--  

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文档


--  作者:chenfansky
--  发布时间:2015/5/18 16:42:46
--  
我在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

大概就只这个意图。谢谢版主



--  作者:jinzhe
--  发布时间:2015/5/18 16:50:02
--  

runmode:0;
aa:=strleft(stklabel,2);
nn:=aa+\'00\';
nn1:=0;
drawtext(islastbar,close,aa);
drawtext(islastbar,close,nn);


if vol=callstock(nn,vtvol,datatype) then nn1:=date+19000000;

if nn1<>0 then debugfile2(\'d:\\test.txt\',\'当前为主力合约日期: %.0f\',nn1,0);

 

entertime:=nn1>0;


--  作者:chenfansky
--  发布时间:2015/5/18 17:16:58
--  
版主给出的代码真是个好东西。但是还是不符合我的想法,我的表达有问题,重新说明如下:

在连续合约页面下,自动判断连续合约和主力合约的时间戳;
1、自动寻找1501主力合约时间:将这个起始点和终点时间取出;
2、1502...直到1512;

也许需要做成外部数据文件,每个品种去做成一个数据表格。

这些时间构成断断续续的二维数组;

当执行主力合约换月的时候,连续合约上面必须强制平仓,等待新的信号出现,才出现开仓信号(以吻合换月后的新合约)。那么在连续合约上,就必须要有这些时间戳来匹配。否则执行换月的时候,价格可能会有跳空情况出现,导致测试数据失真。

这个时间戳就是为了过滤这个换月过程带来的数据异常情况。

--  作者:jinzhe
--  发布时间:2015/5/18 17:20:48
--  

你的要求实现不了,

之前的代码可以实现判断当前合约是不是主力合约,再多的就没有了


--  作者:chenfansky
--  发布时间:2015/5/21 8:26:16
--  关于主力合约问题
版主你好:

品种比如是I00,和TA00,显然公式得修改:
aa:=strleft(stklabel,2);
nn:=aa+\'00\';

能否加个判断,优化下,当前品种为一个字母的,自动取aa:=strleft(stklabel,1); 当品种为2个字母的,自动取aa:=strleft(stklabel,2);
[此贴子已经被作者于2015/5/21 8:26:46编辑过]

--  作者:chenfansky
--  发布时间:2015/5/21 9:07:13
--  关于主力合约问题
版主你好:

品种比如是I00,和TA00,显然公式得修改:
aa:=strleft(stklabel,2);
nn:=aa+\'00\';

能否加个判断,优化下,当前品种为一个字母的,自动取aa:=strleft(stklabel,1); 当品种为2个字母的,自动取aa:=strleft(stklabel,2);

--  作者:jinzhe
--  发布时间:2015/5/21 9:21:19
--  
这个判断不了是不是字母,如果合约是1个字母的,那就自行把aa:=strleft(stklabel,2);修改为aa:=strleft(stklabel,1);