I am running multiple terminals on a VPS (with EA's) and every so often I am getting the "OrderSend() error - trade timeout" message.
It also happens when the EA is trying to modify open orders right after they have been placed - e.g. to place the take profit.
Is there anything I can code so that it will keep trying until the order is sent or modified?
Yes, you code it to RefreshRates and try again.
Note that a trade timeout on OrderSend means that the order may or may not have been opened.
This is why I recommend just logging the error and returning. On the next tick, an OrderSelect loop tells you which.
My EA uses "once per bar" to execute the code, perhaps this is causing a problem also? Maybe if it was on every tick it would keep trying to modify the order. I will look for a refresh rates snippet of code to try and work with. Again, I hop refresh rates will work with once per bar.
Where on my code should I place "Refresh Rates"?
if (MarketInfo(Symbol(), MODE_SPREAD)/PipValue <= MaxSpread)
//RefreshRates(); Place here??
double SL = Bid + StopLoss*PipValue*Point;
if (StopLoss == 0) SL = 0;
double TP = Bid - TakeProfit*PipValue*Point;
if (TakeProfit == 0) TP = 0;
int ticket = -1;
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, MaxSlippage, 0, 0, ExpertName, MagicNumber2, 0, Red);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, MaxSlippage, SL, TP, ExpertName, MagicNumber2, 0, Red);
if (ticket > -1)
//RefreshRates(); And Place here??
if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Red) == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
To add comments, please log in or register