图表指令,卖出平仓时有可能对应的开仓指令没有买够手数,会导致卖出平仓失败,因此卖出平仓之前我加了一段代码,先检查本策略单元未成交的开仓单,如果有未成交开仓委托单则先撤消未成交开仓委托单,然后检查本策略单元现有多头持仓手数,以该手数进行卖出平仓。
这样做经常会有信号闪烁问题,例如消息中心的提示:图表信号是卖出平仓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);
sell?用账户数据作为信号条件?从哪里学来的?应该没有教程教过这样用吧?图表信号就有图表行情数据和图表虚拟账户数据判断,是肯定不可以用真实账户数据作为判断条件的,这个在零基础课程里讲两种机制的时候应该都是说过的吧,都是基础常识了。
因为我既要又要。既想要图表函数方便核对信号,又确实有以真实帐户数据作为判断条件。用A函数的话确实没有信号闪烁的问题,但如果有问题的话极难排查。
解决方案是onsignal
onbar里还是正常判断信号逻辑
在onsignal里自行编写发单逻辑接管系统的发单操作。
你的问题就是如果平仓的时候手数不足,会导致平不掉,对吧?
那就直接用onsignal域接管系统的报单操作,报单前写持仓数量判断逻辑,如果账户持仓不满信号手数就按实际手数平仓。
主要难点在这部分报单逻辑需要你自己写了
谢谢老师