以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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"月份就可以