远月合约是你自己指定的,还是有具体确定的规则来判定,如果有请说明下判断逻辑。
[此贴子已经被作者于2021/1/15 17:21:29编辑过]
所以是以主力合约所在月份后面 持仓量最大月份作为远月?如果是这样的话,就要写循环遍历了。但是还要构建后面月份合约的代码字符串。会比较麻烦。我试试看。
//不可以用在原油上,原油代码特殊。
//只能在连续合约上操作
VARIABLE:codeArr[12]:='',optArr[12]:=0,sortArr[4]:=0;
code:=DYNAINFO2(210,STKLABEL);//连续对应的具体品种代码
index:STRTONUM(STRRIGHT(code,2));//主力品种月份的数字
STR:=STRTRIMRIGHT( code, '0123456789');//获取品种代码前缀
//生成每个月的合约代码 并存入到数组中。这个只在第一个K上运行下。字符串相关操作比较消耗资源,没必要每个分笔来都进行一次。
if BARPOS=1 then
begin
for i=index+1 to 12 do //从主力开始往后的月份,这其中有些月份是没有对应合约的,这里不做处理。因为需要下标和月份对应。
begin
codeArr[i]:= STRCAT(str,STRRIGHT(NUMTOSTR(i/100,2),2));
end
end
isAllhas:=0;
if ISLASTBAR then //将昨日成交量填充到数组里面去
begin
for j=index+1 to 12 do
begin
code:=codeArr[j];//code就是合约代码
temp:=CALLSTOCK(code,vtOPENINT,6,0);
if temp then isAllhas:=1;//有些垃圾合约除了主力都没有数据。所以这里判断下,如果除了主力都没有数据,那么这个变量值为0。
optArr[j]:=if(not(temp),0,temp);
end
end
//利用线性函数取最大持仓量的索引(就是月份数值)
if ISLASTBAR and isAllhas=1 then Maxindex:MFAMAX(optArr,12);
此主题相关图片如下:temp.png
当前主力之后最大持仓量的合约就是下图的04:
此主题相关图片如下:temp.png
基本逻辑就是这样了。剩下的就是拼接处一个品种合约 然后调用下数据做下判断。你理解了上面的代码这个问题也不大。你自行尝试下吧。
//不可以用在原油上,原油代码特殊。
//只能在连续合约上操作
VARIABLE:codeArr[12]:='',optArr[12]:=0,sortArr[4]:=0;
code:DYNAINFO2(210,STKLABEL),nodraw;//连续对应的具体品种代码????210事啥意思??
index:STRTONUM(STRRIGHT(code,2)),nodraw;//主力品种月份的数字
STR:STRTRIMRIGHT( code, '0123456789'),nodraw;//获取品种代码前缀
//生成每个月的合约代码 并存入到数组中。这个只在第一个K上运行下。字符串相关操作比较消耗资源,没必要每个分笔来都进行一次。
if BARPOS=1 then
begin
for i=index+1 to 12 do //从主力开始往后的月份,这其中有些月份是没有对应合约的,这里不做处理。因为需要下标和月份对应。
begin
codeArr[i]:= STRCAT(str,STRRIGHT(NUMTOSTR(i/100,2),2));
end
end
isAllhas:=0;
if ISLASTBAR then //将昨日成交量填充到数组里面去
begin
for j=index+1 to 12 do
begin
code:=codeArr[j];//code就是合约代码
temp:=CALLSTOCK(code,vtOPENINT,6,0);
if temp then isAllhas:=1;//有些垃圾合约除了主力都没有数据。所以这里判断下,如果除了主力都没有数据,那么这个变量值为0。
optArr[j]:=if(not(temp),0,temp);
end
end
//利用线性函数取最大持仓量的索引(就是月份数值)
if ISLASTBAR and isAllhas=1 then Maxindex:MFAMAX(optArr,12),nodraw;
//if ISLASTBAR and isAllhas=1 then Maxindex:STRRIGHT(NUMTOSTR(MFAMAX(optArr,12)/100,2),2);
cdmvol:=STRCAT(str,05),nodraw;//主力之后成交量最大合约代码
cx:"cdmvol$CLOSE",nodraw;//主力之后成交量最大合约收盘价