问题一:
TBQ运行策略时遇到主力合约更换,监控器会显示实仓与信号仓不一致,只要手动同步就可以了吧?
我想问的是开仓手数会不会更换?
比如原来开5手,那么自动换合约也是再开5手?
还是按开仓的保证金来算?比如我设置每次开仓只用2万元,那么它会算出一个开仓手数是5手;当换月后,假设新合约价格只有原合约价格的一半,那么按2万元来算,它新开的手数应该是10手,实际同步换仓会自动调节手数吗?
问题二:
我想在data0上插入888主力合约连续,在data1上插入777主力合约连续。
然后监控两者的持仓量,当data1.OpenInt[1]>=data0.openint[1],在data0上平仓,在data1上开仓。是不是相当于换月了呢?然后次主力合约会慢慢变成主力合约。等待新的次主力合约的持仓量与主力合约相等时,再进行一次操作。
不过由于编程水平不高,也不清楚这样运行,实际中会有什么样的问题。
随便写了一个错误百出的程序,请各位老师指教,批评,改正。
Params
Numeric FastLength(5);// 短期指数平均线参数
Numeric SlowLength(20);// 长期指数平均线参数
Vars
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Series<Numeric> kaiguan;
Events
OnBar(ArrayRef<Integer> indexs)
{
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric(\"MA1\",AvgValue1);
PlotNumeric(\"MA2\",AvgValue2);
If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
{
Buy(1,Open);
}
If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
{
SellShort(1,Open);
}
If(data1.OpenInt[1]>=data0.openint[1])
{
If(MarketPosition==1 and kaiguan==1)
{
data0.sell(0,data0.open);
data1.buy(1,data1.open);
kaiguan=0;
}
If(MarketPosition==-1 and kaiguan==1)
{
data0.BuyToCover(0,data0.open);
data1.SellShort(1,data1.open);
kaiguan=0;
}
}
If(kaiguan==0 and data1.OpenInt[1]<0.8*data0.openint[1])
{
kaiguan=1;
}
}
手数取决于你代码里写的多少
加载888 和777来自己换月是可行,但确保编程代码没有问题