以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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;
文档在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;
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); |