以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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=183933) |
-- 作者:lqsh -- 发布时间:2021/1/15 16:47:26 -- 能不能帮助编写一个远月和近月价差的选股公式? 选股范围主力合约 远月合约价格高于当前主力合约的归入上涨板块 远月合约价格低于当前主力合约的归入下跌板块
|
-- 作者:FireScript -- 发布时间:2021/1/15 17:21:10 -- 远月合约是你自己指定的,还是有具体确定的规则来判定,如果有请说明下判断逻辑。 [此贴子已经被作者于2021/1/15 17:21:29编辑过]
|
-- 作者:lqsh -- 发布时间:2021/1/16 14:14:42 -- 远月合约里头持仓量最大的就可以了。 |
-- 作者:lqsh -- 发布时间:2021/1/16 14:16:45 -- 回复:(FireScript)远月合约是你自己指定的,还是有... 远月合约选择几个远期里头持仓量最大的。 |
-- 作者:lqsh -- 发布时间:2021/1/25 11:48:12 -- 公式能编出来吗? |
-- 作者:lqsh -- 发布时间:2021/1/26 16:23:53 -- 远月里头持仓量最大的就可以 近月合约和远月合约选持仓量最大的比就可以。 |
-- 作者:lqsh -- 发布时间:2021/1/26 16:26:32 -- 近月合约和远月合约选持仓量最大的比就可以。 近月合约和远月合约选持仓量最大的比就可以。也就是按照期限结构Contango和Backwardation分为两个大板块就可以了。 |
-- 作者:FireScript -- 发布时间:2021/1/26 16:41:04 -- 所以是以主力合约所在月份后面 持仓量最大月份作为远月?如果是这样的话,就要写循环遍历了。但是还要构建后面月份合约的代码字符串。会比较麻烦。我试试看。 |
-- 作者:FireScript -- 发布时间:2021/1/28 14:27:44 -- //不可以用在原油上,原油代码特殊。 //只能在连续合约上操作 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); 当前主力之后最大持仓量的合约就是下图的04: 基本逻辑就是这样了。剩下的就是拼接处一个品种合约 然后调用下数据做下判断。你理解了上面的代码这个问题也不大。你自行尝试下吧。 |
-- 作者:lqsh -- 发布时间:2021/2/9 16:25:50 -- 帮着改一下,调用选出合约的收盘价为何没输出? //不可以用在原油上,原油代码特殊。 //只能在连续合约上操作 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;//主力之后成交量最大合约收盘价
|