老师:
您好!
我做两腿套利交易,在OnSignal域中用A_SendOrderEx()开仓发右腿单,在OnOrder域中用A_SendOrderEx()开仓发左腿单,并在OnOrder域中用全局变量condition控制发单次数。当连接模拟账户后,会成功发送一对右腿和左腿单,但以后却只有OnSignal域中的右腿单能成功发出,OnOrder域中的左腿却不发单。我估计是OnOrder域中的全局变量condition未回复到0。请老师指教怎样才能将全局变量condition回复到0。 代码如下:
Params
Global String leftSymbol(“rb2310,SHFE”); //左腿合约
Global String rightSymbol(“rb2311,SHFE”); //右腿合约
Vars
Global tick mytick;
Global Numeric condition;
Global Integal id;
Global Integal timeId;
Global Order RightOrder; //用于存放右腿开仓订单的Order
OnInit()
{
Condition=0;
timeId=CreateTimer(200,0,1);
}
OnBar()
{
}
OnSignal()
{
}
OnOrder()
{
If(Barstatus==2 and RightOrder.status==Enum_Filled and RightOrder.side==Enum_Buy and condition==0)
{
Bool LeftEntry=A_SendOrderEx(leftSymbol,Enum_Sell,Enum_Entry,1,mytick.bidask1.bidP,leftOrderId);
Condition=1;
If(id==timeId) condition=0; //在OnTimer域中执行If(LeftEntry and id==timeId) condition=0也不成功
}
}
看不懂你这个逻辑。
onorder是要订单状态发生变化才驱动的。
ontimer执行以后 condition就算重置了,但是不驱动onorder域,也没办法重置。
首先你应该说清楚重置condition的变量的时机吧,到底是延迟多少时间重置,还是等左腿单成交再重置,这个不说清楚怎么处理呢?