以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 合约基差 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=183486) |
-- 作者:01部落 -- 发布时间:2020/12/16 14:35:53 -- 合约基差 求当前合约与上一主力合约的价差 比如:当前主力合约为2105,则求2105合约与2101和合约的价差
|
-- 作者:FireScript -- 发布时间:2020/12/16 14:50:22 -- 求不到的。还是和之前那个问题一样,只知道除权位置的,但是没有函数获取对应的具体合约是多少。 最多是很简单的获取上一个月份的合约的价格。但是有些品种,很可能好久才换一次。这样就没办法。
|
-- 作者:01部落 -- 发布时间:2020/12/16 14:55:53 -- 豆粕0501:"M05$close"-"m01$close",LINETHICK1,COLORWHITE; 这个是求豆粕05和01的价差 我的想法是能不获得图表的当前合约,从而将上面的公式改成通用的代码,而不是某个特i定品种 特定月份的价差
[此贴子已经被作者于2020/12/16 14:57:14编辑过]
|
-- 作者:FireScript -- 发布时间:2020/12/16 15:02:35 -- 啥意思?你自己把指标加载到上次主力合约(自行判断的)上 然后调用现在的主力合约做价差的计算? |
-- 作者:01部落 -- 发布时间:2020/12/16 15:03:48 -- 对 |
-- 作者:FireScript -- 发布时间:2020/12/16 15:12:31 -- STR:=STRTRIMRIGHT( STKLABEL, \'0123456789\'); //双年份合约,豆一和白糖虽然取消双年份,但是金字塔为保证老用户策略的正常操作,所以保持不变。因此依旧需要区分。 if STRCMP(STR,\'AY\')=0 or STRCMP(STR,\'BUY\')=0 OR STRCMP(STR,\'SRY\') THEN BEGIN STR:=STRREPLACE(STR , \'Y\',\'X\' ); END //区分处理原油和其他品种的连续代码 STR00:=IF(STRCMP(STR,\'SC\')=0,STRCAT(STR , \'0000\'),STRCAT( STR, \'00\')); JC:c-CALLSTOCK(STR00,vtCLOSE,-1,0),LINETHICK1,COLORWHITE;//当前加载的合约之间用C取收盘价;主力用CALLSTOCK函数调用,被调用的周期直接指定到当前加载的周期 |
-- 作者:01部落 -- 发布时间:2020/12/16 16:54:33 -- 通常我是要加载到主力合约上,看主力合约和上主力合约及主力合约和次主力合约的价差, 1 所以,主力合约直接用c取得,而其它两个合约可以用callstock取得吗? 2 如果不行,能不能用参数的形式取得,比如设俩个参数N1,N2,然后通过callstock取得其对应品种的N1和N2月份合约收盘价,从而计算出价差 谢谢
|
-- 作者:FireScript -- 发布时间:2020/12/16 16:59:13 -- 1.可以。但是具体什么品种,只能你自己指定。而且这样的代码没办法做到通用,你换了个品种,你代码都必须重新写一次,感觉还是挺麻烦的。 2.用参数的话,也是可以。可以利用参数拼接处月份合约,然后调用。
|
-- 作者:FireScript -- 发布时间:2020/12/16 17:13:01 -- INPUT:M(1,0,12,1);//月份参数 STR:=STRTRIMRIGHT( STKLABEL, \'0123456789\'); //双年份合约,豆一和白糖虽然取消双年份,但是金字塔为保证老用户策略的正常操作,所以保持不变。因此依旧需要区分。 if STRCMP(STR,\'AY\')=0 or STRCMP(STR,\'BUY\')=0 OR STRCMP(STR,\'SRY\') THEN BEGIN STR:=STRREPLACE(STR , \'Y\',\'X\' ); END //注意 不支持原油合约。因为原油合约的代码规则不一样,不能直接拼接出来。如果你需要的话我再想办法处理。 Mcode:STRCAT(STR ,STRRIGHT(NUMTOSTR(M/100,2),2) );//拼接品种名称+月份 生产品种代码。 JC:c-CALLSTOCK(Mcode,vtCLOSE,-1,0);//Mcode 是你指定月份的当前品种的合约。不支持对原油品种的处理。 |
-- 作者:01部落 -- 发布时间:2020/12/16 19:34:15 -- 很给力 谢谢 JC:c-CALLSTOCK(Mcode,vtCLOSE,-1,0); 其中变量名称“JC"能不能直接用对应的品种代码名称替代, 比如:如果上述参数:M=1的话,而加载的品种为豆粕,则用“豆粕2101”或“豆粕01“,或者“JC2101”或“JC01”作为变量名称,这样直观点 总之,体现出"01"月份就可以
|