在平仓时,因为仓位不足,导致废单。我写个如下处理。如果接受到平仓废单,则重新下单,将账户内全部实际合约清仓。请老师指教,这样写对不对?
OnOrder(OrderRef ord)
{
Numeric MinPoint;
MinPoint = MinMove*PriceScale;
if(ord.status == Enum_deleted and ord.combOffset == Enum_Exit)
{
if(ord.side == Enum_Buy)
{
Array<Integer> orders;
A_SendOrderEx(Enum_Buy,Enum_Entry,A_BuyPosition(0),ord.price+2*MinPoint,orders);
}else if(ord.side == Enum_Sell)
{
Array<Integer> orders;
A_SendOrderEx(Enum_Sell,Enum_Entry,A_SellPosition(0),ord.price-2*MinPoint,orders);
}
}
}
是不是原来的图表交易buy函数操作,出现的废单事件不会被onorder接受?只有A函数引发的废单才会被onorder处理?如果是这样,那我的老的图表交易,只用buy sell,不用A函数,如果想处理废单并重新按照实际持仓去下单,如何入手呢?
按照交易助手写
开盘后测试了一下,
1 如果是程序自动化平仓,则上述废单处理的代码没有生效。
2 如果手动,发出一个平仓操作,平仓手数大于实际仓位,比如实际1手,平3手,则上述代码生效,先提示平仓不足,然后重新下单,按实际仓位去平仓一手。
手动生效,说明代码基本没问题,但是自动化交易下的单,只提示仓位不足,没有引发废单的事件处理。想不出来有什么区别,老师有什么建议吗?
唯一的区别是,自动化下单是buy函数,开多仓的同时平空仓。而手动是直接下平空仓单。这个区别会导致废单处理失效吗?看系统委托页面,平仓不足的提示无论是自动还是手动都出现了。但只有手动继续按实际仓位平仓,自动完全没反应
自动化是图表交易,没有用A函数,也没有用过onorder.用的是buy,sell.只有在新加的废单处理新加的onorder里用A函数。现在看,貌似,只有手动下平仓单,才能触发onorder,如果自动交易,用buy函数,在开多仓的同时,下平仓单,没有触发onorder。
看上去是对的,不过A函数这种要自己实际调试,模拟盘足够验证了