图表指令,卖出平仓时有可能对应的开仓指令没有买够手数,会导致卖出平仓失败,因此卖出平仓之前我加了一段代码,先检查本策略单元未成交的开仓单,如果有未成交开仓委托单则先撤消未成交开仓委托单,然后检查本策略单元现有多头持仓手数,以该手数进行卖出平仓。
这样做经常会有信号闪烁问题,例如消息中心的提示:图表信号是卖出平仓4手,但因为前面4次开仓委托中,其中有1次开仓委托直至卖出平仓时还没有成交,在平仓卖出时会撤掉这笔未成交委托单,帐户实际持仓3手,帐户实际以3手进行卖出。
疑问:
1、这样做为什么会有信号闪烁问题?代码里检查不出哪个环节会产生信号闪烁。
2、如果有,怎么样规避?
谢谢
代码如下:
Integer y=0;
Array<Integer> orderIDs;
self_source=A_GetOrderCreateSource;
Bool ret8=A_GetUnFillOrderIDs(RelativeSymbol,orderIDs,self_source);
For y = 0 To GetArraySize(orderIDs) - 1
{
Order value;
Bool ret9=A_getorder(orderids[y],value);
if(value.combOffset==Enum_Entry and value.side==Enum_buy)
{
bool ret10 =A_DeleteOrderEx(orderids[y]);
numeric sleep = SystemDateTime;
while(true)
{
A_getOrder(orderids[j], value);
if(value.status == Enum_Canceled) break;
if(value.status == Enum_Filled) break;
if(DateTimeDiffV2(Sleep, SystemDateTime) >= 1000) break;
}
}
}
Position order_pos;
Bool ret2 = A_GetPosition(RelativeSymbol, order_pos, self_source);
order_buyposition= order_pos.longCurrentvolume;
sell(order_buyposition, data1_buyprice + duo_mantiao *MinMove * PriceScale- tiao2 * MinMove * PriceScale,Enum_Signal_UnCorrectPrice);