以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  近月远月合约的计算及引用  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=157659)

--  作者:qingxiao
--  发布时间:2017/9/6 15:10:41
--  近月远月合约的计算及引用
nn:=\'AG\';
VARIABLE: X[12]=0;
X[1]:=CALLSTOCKEX(nn+\'01\',vtVOL,6,0,2000);
X[2]:=CALLSTOCKEX(nn+\'02\',vtVOL,6,0,2000);
X[3]:=CALLSTOCKEX(nn+\'03\',vtVOL,6,0,2000);
X[4]:=CALLSTOCKEX(nn+\'04\',vtVOL,6,0,2000);
X[5]:=CALLSTOCKEX(nn+\'05\',vtVOL,6,0,2000);
X[6]:=CALLSTOCKEX(nn+\'06\',vtVOL,6,0,2000);
X[7]:=CALLSTOCKEX(nn+\'07\',vtVOL,6,0,2000);
X[8]:=CALLSTOCKEX(nn+\'08\',vtVOL,6,0,2000);
X[9]:=CALLSTOCKEX(nn+\'09\',vtVOL,6,0,2000);
X[10]:=CALLSTOCKEX(nn+\'10\',vtVOL,6,0,2000);
X[11]:=CALLSTOCKEX(nn+\'11\',vtVOL,6,0,2000);
X[12]:=CALLSTOCKEX(nn+\'12\',vtVOL,6,0,2000);


VARIABLE:ZL=0;
IF X[1]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'01\';
IF X[2]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'02\';
IF X[3]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'03\';
IF X[4]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'04\';
IF X[5]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'05\';
IF X[6]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'06\';
IF X[7]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'07\';
IF X[8]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'08\';
IF X[9]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'09\';
IF X[10]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'10\';
IF X[11]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'11\';
IF X[12]=CALLSTOCKEX(nn+\'00\',vtVOL,6,0,2000) THEN ZL:=\'12\';


VARIABLE:CZL=0;
IF X[1]=large(X,12,2) THEN CZL:=\'01\';
IF X[2]=large(X,12,2) THEN CZL:=\'02\';
IF X[3]=large(X,12,2) THEN CZL:=\'03\';
IF X[4]=large(X,12,2) THEN CZL:=\'04\';
IF X[5]=large(X,12,2) THEN CZL:=\'05\';
IF X[6]=large(X,12,2) THEN CZL:=\'06\';
IF X[7]=large(X,12,2) THEN CZL:=\'07\';
IF X[8]=large(X,12,2) THEN CZL:=\'08\';
IF X[9]=large(X,12,2) THEN CZL:=\'09\';
IF X[10]=large(X,12,2) THEN CZL:=\'10\';
IF X[11]=large(X,12,2) THEN CZL:=\'11\';
IF X[12]=large(X,12,2) THEN CZL:=\'12\';

VARIABLE:JY=0;
IF STRTONUM(ZL)<MONTH() AND STRTONUM(CZL)<MONTH() AND STRTONUM(ZL)<STRTONUM(CZL) THEN JY:=ZL;
IF STRTONUM(ZL)<MONTH() AND STRTONUM(CZL)<MONTH() AND STRTONUM(ZL)>STRTONUM(CZL) THEN JY:=CZL;
IF STRTONUM(ZL)<MONTH() AND STRTONUM(CZL)>MONTH() THEN JY:=nn+CZL;
IF STRTONUM(ZL)>MONTH() AND STRTONUM(CZL)<MONTH() THEN JY:=nn+ZL; 
IF STRTONUM(ZL)>MONTH() AND STRTONUM(CZL)>MONTH() AND STRTONUM(ZL)<STRTONUM(CZL) THEN JY:=ZL;
IF STRTONUM(ZL)>MONTH() AND STRTONUM(CZL)>MONTH() AND STRTONUM(ZL)>STRTONUM(CZL) THEN JY:=CZL;


VARIABLE:YY=0;
IF STRTONUM(ZL)<MONTH() AND STRTONUM(CZL)<MONTH() AND STRTONUM(ZL)<STRTONUM(CZL) THEN YY:=CZL;
IF STRTONUM(ZL)<MONTH() AND STRTONUM(CZL)<MONTH() AND STRTONUM(ZL)>STRTONUM(CZL) THEN YY:=ZL;
IF STRTONUM(ZL)<MONTH() AND STRTONUM(CZL)>MONTH() THEN YY:=ZL;
IF STRTONUM(ZL)>MONTH() AND STRTONUM(CZL)<MONTH() THEN YY:=CZL; 
IF STRTONUM(ZL)>MONTH() AND STRTONUM(CZL)>MONTH() AND STRTONUM(ZL)<STRTONUM(CZL) THEN YY:=CZL;
IF STRTONUM(ZL)>MONTH() AND STRTONUM(CZL)>MONTH() AND STRTONUM(ZL)>STRTONUM(CZL) THEN YY:=ZL;


我用以上公式区分品种‘nn’主力与次主力合约中哪个是近月哪个是远月,显示在副图上数据是完整正确的
agjy:STKINDIEX(\'\',\'ZCJY.JY\',0,6,0,2000);
在引用时数据显示不完整,问题出在哪里?
另外我希望品种‘nn’能够成为一个参数被STKINDIEX引用,这样我可以方便的获取全部商品的主次近远月,但是思路不清晰,请版主指点。

--  作者:banzhuan
--  发布时间:2017/9/7 11:02:06
--  
稍等,我们测试一下
--  作者:banzhuan
--  发布时间:2017/9/7 13:04:49
--  
你的数据都补充完整吗?
--  作者:qingxiao
--  发布时间:2017/9/11 13:12:21
--  
数据应该是完整的,因为原指标“ZCJY”加一句“JY1:JY;”显示在图表上是完整显示的,新建一个指标插入语句“agjy:STKINDIEX(\'\',\'ZCJY.JY\',0,6,0,2000);”智能显示部分。
--  作者:qingxiao
--  发布时间:2017/9/11 13:16:19
--  
图片点击可在新窗口打开查看
图片点击可在新窗口打开查看此主题相关图片如下:1505106862(1).jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:1505106968(1).jpg
图片点击可在新窗口打开查看

--  作者:gxx978
--  发布时间:2017/9/11 14:01:09
--  
本地未测到这个现象,你的版本是多少?重新安装一个最新版试下呢,看是否有此现象。
--  作者:qingxiao
--  发布时间:2017/9/12 12:26:36
--  
另外我希望品种‘nn’能够成为一个参数被STKINDIEX引用,这样我可以方便的获取全部商品的主次近远月,但是思路不清晰,请版主指点。
--  作者:gxx978
--  发布时间:2017/9/12 13:27:13
--  

你是想要nn不要自己指定,根据引用的品种自己得出品种代码?你可以用函数stklabel获取,再用字符串函数进行处理。例如:

a:stklabel;
nn:STRLEFT(a,2);//这里是品种简称是2位的,若是1位的需要另外判断,例如玉米C等。

再通过nn和JY字符串组合输出,通过stkindi引用。


--  作者:qingxiao
--  发布时间:2017/9/12 14:46:02
--  
并不是,我想要实现的是遍历所有的商品期货,将每一个品种的主力和次主力合约根据交割月份分为近月和远月,然后通过公式计算价格差,再将所有品种的价格差放在一起比较大小,上面的公式是计算这个价格差的。在另外一个公式中,我希望将“nn”变成一个参数,然后把所有商品价格差集合到一起比较大小。
--  作者:wenarm
--  发布时间:2017/9/12 16:26:38
--  
不知道你说什么意思。