在我的mql4 EA交易中,我已经写了这个函数来立即关闭所有买入交易。当我通过策略测试程序进行测试时,会关闭一些买入交易,但对于其他一些买入交易,它会返回:OrderClose error 4051:invalid ticket for OrderClose function
错误。
void Close_All_Buy_Trdes(){
for (int i=0;i<=OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS);
if(OrderType()==OP_BUY {
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
}
}
发生这种情况的原因是什么?
答案 0 :(得分:1)
一旦你关闭其中一个订单,其余的订单的位置编号将会有所不同......所以循环正在尝试在那个位置不再可用的关闭订单。
您可以选择机票编号(这些不要更改)而不是位置,但这意味着存储了机票编号。
如果您更喜欢使用位置,这是一种方法:
void close_all()
{
int get_out=0,hstTotal=OrdersHistoryTotal();
if (hstTotal<1) get_out=1;
while (get_out==0)
{
if(!OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) get_out=1;
else
{
//you can add here any specific if condition
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
hstTotal=OrdersHistoryTotal();
if (hstTotal<1) get_out=1;
}
}
代码总是根据需要多次关闭第一个订单(position = 0),而未结订单的数量是&gt; = 1(while的退出条件是:hstTotal&lt; 1)