以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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=160541)

--  作者:jiaoyizhe
--  发布时间:2017/12/20 9:53:58
--  主力合约与非主力合约比较与显示应该怎么写?
想实现这样的功能,并用代码写出,主要包含这几点:
1.根据同品种所有合约持仓量大小比较选出品种的主力合约和次主力合约;(持仓量最大的为主力合约,第二大的为次主力合约)
2.比较主力合约和次主力合约的ma20均线的大小;
3.ma更大的那个合约,将合约的尾数显示在最后一根K右侧。(比如1801合约就显示01)

谢谢!

--  作者:jiaoyizhe
--  发布时间:2017/12/20 11:14:01
--  
没人知道吗
--  作者:yukizzc
--  发布时间:2017/12/20 13:08:24
--  

http://www.weistock.com/bbs/dispbbs.asp?boardid=2&Id=160506&page=2

这里有一个分享的,您可以看看


--  作者:FireScript
--  发布时间:2017/12/20 13:14:50
--  
编写中,请稍等。
--  作者:FireScript
--  发布时间:2017/12/20 13:47:14
--  

逐K下运行。

VARIABLE:arry[12]:=0;
t:=STRRIGHT(STKLABEL ,2);
z:=STRTRIMRIGHT(STKLABEL ,t );//截取出品种名称,如AL,RB
temp:=\'\';

if ISLASTBAR then begin //如果不加这一句,历史K都走一次循环,会非常卡。
FOR  i=1 to 12 do
begin
if i<10 then temp:=STRCAT(z,\'0\'+NUMTOSTR(i,0)); else if then temp:=STRCAT(z,NUMTOSTR(i,0));//拼接品种代码名称
openints:=CALLSTOCK(temp,vtOPENINT,6,0);//直接引用持仓量
if not(openints) then arry[i]:=0;else if then arry[i]:=openints;//如果取不到持仓量数据,直接写入0.
end
end

op1:=0;//最大持仓量合约
op2:=0;//最小持仓量合约

for j=1 to 12 do
begin
if HOD2(arry, 0, arry[j])=1 then op1:=j;
if HOD2(arry, 0, arry[j])=2 then op2:=j;
if op1*op2 <>0 then break;
end

//到这里已经挑选出持仓量第一和第二的合约了 分别用op1和op2表示 ,使用的时候注意这2个值是1到12的值。

//剩下的引用品种对应的均线,请自行补充完整。

[此贴子已经被作者于2017/12/20 14:02:33编辑过]