TBQ监控器手动换月的手数问题和自动换月的一个设想
2023-07-23 11:03

问题一:

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;

       }

}


评论区
顶部