这个是双边委托单,一边成交,撤另外一边的单。实际上一边的委托单已经成交了,但是没有报送已成交的状态。
麻烦看一下这个代码有没有问题?
//如果两条委托单都有合同号了,再监控谁先全部成交
If(GetGlobalVar2("Ping_ContractNo")>0 and GetGlobalVar2("Kai_ContractNo")>0)
{
If(GetGlobalVar2("Ping_ContractNo")==Value(text(A_OrderContractNo(temm2)))and A_OrderStatus(temm2)==Enum_Filled()) //当前是平仓合同号,是平仓委托,并且是全部成交状态
{
FileAppend(AddLogStr,"时间:"+Text(Date)+","+Text(CurrentTime)+", Close:"+Text(Close)+", 平仓委托(单号:"+text(A_OrderContractNo(temm2))+")先全部成交,撤开仓委托(单号:"+Text(GetGlobalVar2("Kai_ContractNo"))+")。"); //输出记录文件
SetGlobalVar2("BmP",0); //再次计算基准价,再次发两个委托单
SetGlobalVar2("NeedDeleteOrder",1); //0为不需要撤单,1为撤同向单,2为撤全部单
SetGlobalVar2("Ping_ContractNo",-1);
Return;
}
If(GetGlobalVar2("Kai_ContractNo")==Value(text(A_OrderContractNo(temm2))) and A_OrderStatus(temm2)==Enum_Filled()) //当前是开仓合同号,是开仓委托,并且是全部成交状态
{
FileAppend(AddLogStr,"时间:"+Text(Date)+","+Text(CurrentTime)+", Close:"+Text(Close)+", 开仓委托(单号:"+text(A_OrderContractNo(temm2))+")先全部成交,撤平仓委托(单号:"+Text(GetGlobalVar2("Ping_ContractNo"))+")。"); //输出记录文件
SetGlobalVar2("BmP",0); //再次计算基准价,再次发两个委托单
SetGlobalVar2("NeedDeleteOrder",1); //0为不需要撤单,1为撤同向单,2为撤全部单
SetGlobalVar2("Kai_ContractNo",-1);
Return;
}
}
这种形式的驱动不是应该放在onfill里触发吗,你确定事件域用对了?