别的软件都做到了,没理由金字塔做不到,同意的哥们把帖子顶上~
没人支持我,好伤心!
以下我自己写的根据实时的持仓量来计算豆粕指数合约的代码,可能存在不足的地方,望高手们加以改进:
//引用当前所在K线周期豆粕所有合约的实时持仓量
MVol1:=STKINDI('M01','CCL',0,DATATYPE,0);
MVol3:=STKINDI('M03','CCL',0,DATATYPE,0);
MVol5:=STKINDI('M05','CCL',0,DATATYPE,0);
MVol7:=STKINDI('M07','CCL',0,DATATYPE,0);
MVol8:=STKINDI('M08','CCL',0,DATATYPE,0);
MVol9:=STKINDI('M09','CCL',0,DATATYPE,0);
MVol11:=STKINDI('M11','CCL',0,DATATYPE,0);
MVol12:=STKINDI('M12','CCL',0,DATATYPE,0);
//对各合约持仓量求和,得到豆粕品种总的持仓量
MVol88:=MVol1+MVol3+MVol5+MVol7+MVol8+MVol9+MVol11+MVol12;
//计算各豆粕合约的权重
权重1:=MVol1/MVol88;
权重3:=MVol3/MVol88;
权重5:=MVol5/MVol88;
权重7:=MVol7/MVol88;
权重8:=MVol8/MVol88;
权重9:=MVol9/MVol88;
权重11:=MVol11/MVol88;
权重12:=MVol12/MVol88;
//引用当前所在K线周期各豆粕合约的收盘价
MClose1:=CALLSTOCK('M01',VTCLOSE,-1);
MClose3:=CALLSTOCK('M03',VTCLOSE,-1);
MClose5:=CALLSTOCK('M05',VTCLOSE,-1);
MClose7:=CALLSTOCK('M07',VTCLOSE,-1);
MClose8:=CALLSTOCK('M08',VTCLOSE,-1);
MClose9:=CALLSTOCK('M09',VTCLOSE,-1);
MClose11:=CALLSTOCK('M11',VTCLOSE,-1);
MClose12:=CALLSTOCK('M12',VTCLOSE,-1);
//根据权重计算指数收盘价
MClose88:=权重1*MClose1+权重3*MClose3+权重5*MClose5+权重7*MClose7+权重8*MClose8+权重9*MClose9+权重11*MClose11+权重12*MClose12;
//引用当前所在K线周期各豆粕合约的开盘价
MOpen1:=CALLSTOCK('M01',VTOPEN,-1);
MOpen3:=CALLSTOCK('M03',VTOPEN,-1);
MOpen5:=CALLSTOCK('M05',VTOPEN,-1);
MOpen7:=CALLSTOCK('M07',VTOPEN,-1);
MOpen8:=CALLSTOCK('M08',VTOPEN,-1);
MOpen9:=CALLSTOCK('M09',VTOPEN,-1);
MOpen11:=CALLSTOCK('M11',VTOPEN,-1);
MOpen12:=CALLSTOCK('M12',VTOPEN,-1);
//根据权重计算指数开盘价
MOpen88:=权重1*MOpen1+权重3*MOpen3+权重5*MOpen5+权重7*MOpen7+权重8*MOpen8+权重9*MOpen9+权重11*MOpen11+权重12*MOpen12;
//引用当前所在K线周期各豆粕合约的最高价
MHigh1:=CALLSTOCK('M01',VTHIGH,-1);
MHigh3:=CALLSTOCK('M03',VTHIGH,-1);
MHigh5:=CALLSTOCK('M05',VTHIGH,-1);
MHigh7:=CALLSTOCK('M07',VTHIGH,-1);
MHigh8:=CALLSTOCK('M08',VTHIGH,-1);
MHigh9:=CALLSTOCK('M09',VTHIGH,-1);
MHigh11:=CALLSTOCK('M11',VTHIGH,-1);
MHigh12:=CALLSTOCK('M12',VTHIGH,-1);
//根据权重计算指数最高价
MHigh88:=权重1*MHigh1+权重3*MHigh3+权重5*MHigh5+权重7*MHigh7+权重8*MHigh8+权重9*MHigh9+权重11*MHigh11+权重12*MHigh12;
//引用当前所在K线周期各豆粕合约的最低价
MLow1:=CALLSTOCK('M01',VTLOW,-1);
MLow3:=CALLSTOCK('M03',VTLOW,-1);
MLow5:=CALLSTOCK('M05',VTLOW,-1);
MLow7:=CALLSTOCK('M07',VTLOW,-1);
MLow8:=CALLSTOCK('M08',VTLOW,-1);
MLow9:=CALLSTOCK('M09',VTLOW,-1);
MLow11:=CALLSTOCK('M11',VTLOW,-1);
MLow12:=CALLSTOCK('M12',VTLOW,-1);
//根据权重计算指数最低价
MLow88:=权重1*MLow1+权重3*MLow3+权重5*MLow5+权重7*MLow7+权重8*MLow8+权重9*MLow9+权重11*MLow11+权重12*MLow11;
//绘制豆粕指数K线图
KLINE(MOpen88,MHigh88,MLow88,MClose88,1);
有个不明白的地方是,为什么豆粕合约中有8月、12月两个双月份合约,却没有2,4,6,10月份的合约。因为每个品种的合约月份各不相同,所以上述算法每个品种的算法都不一样,必须是把各品种历史上存在过的合约都加进去,得到的指数结果才准确。
另外补充一点,加载时需注意:加载豆粕指数之前要先把豆粕品种的各月份合约的数据先下载好,1分钟指数需要豆粕各月份合约的1分钟数据,日线指数需要豆粕各月份合约的日线数据,其它周期需要豆粕各月份合约的5分钟数据,等等。