-- 作者:小布丁
-- 发布时间:2012/8/3 14:28:51
--
没人支持我,好伤心!
以下我自己写的根据实时的持仓量来计算豆粕指数合约的代码,可能存在不足的地方,望高手们加以改进:
//引用当前所在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月份的合约。因为每个品种的合约月份各不相同,所以上述算法每个品种的算法都不一样,必须是把各品种历史上存在过的合约都加进去,得到的指数结果才准确。
[此贴子已经被作者于2012-8-3 14:29:31编辑过]
|