Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 880

 
Mikhail Rudyk:

робот только стоит на этом графике но торгует темже ток опционами такая технология уних для роботов

Вставьте эту строку

void Open(int lot,string comment)
   {
               bool eror=false;
               int step=0;
               if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)==1)
                  {
                           while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 eror=Trade.Buy(lot,symbolName,bid,0,0,comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)Print("error - ",GetLastError());
                              }
                  }
   }
 

поставил

но я думаю врятли сброс ошибки поможет

 
Mikhail Rudyk:

но я думаю врятли сброс ошибки поможет

Так еще

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

void Open(int lot,string comment)
   {
               bool eror=false;
               int step=0;
               if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)==1)
                  {
                           while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 // eror=Trade.Buy(lot,symbolName,bid,0,0,comment); // закомментировать
                                 eror=OrderSend(symbolName, OP_BUY, lot, bid, 0, 0, 0, comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)Print("error - ",GetLastError());
                              }
                  }
   }
 

я уже вот так сделал и помогло

но факт ошибки то не решен

большое спасибо за помощ

while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 eror=Trade.Buy(lot,symbolName,bid,0,0,comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)
                                    {
                                       Print("error - ",GetLastError());
                                       if(GetLastError()==4754){OnInit();}
                                    }  
                              }

 
Mikhail Rudyk:

факт ошибки то не решен

Поэтому и предложил этот вариант.

 
fxsaber:

Поэтому и предложил этот вариант.

ну я попробую

но почему стандартный клас не работает

 
Mikhail Rudyk:

ну я попробую

но почему стандартный клас не работает

Если альтернативная библиотека будет работать, то станет понятно, куда копать.

Мне не воспроизвести проблему с каждой из библиотек.

 
Mikhail Rudyk:

я уже вот так сделал и помогло

while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 eror=Trade.Buy(lot,symbolName,bid,0,0,comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)
                                    {
                                       Print("error - ",GetLastError());
                                       if(GetLastError()==4754){OnInit();}
                                    }  
                              }

Не должно это работать. 4754 возникает, когда OrdersTotal больше нуля, но при этом OrderSelect или OrderGetTicket обламываются.

Это очень большая редкость, но не в данном случае. Здесь настолько специфический сервер/символ, что и с позициями та же фигня происходит, только с ошибкой 4753.

Уже приготовился, что придется вносить коррективы в альтернативную библу, т.к. возникающие ситуации тянут на кирдык многим логикам. Ведь там отправляешь маркет-ордер, он приходит на сервер, создает позицию и в эту же миллисекунду ее закрывает. А Терминал уже задним числом из-за пинга получает инфу.

Приятно удивился, что все отрабатывает идеально.


Сам сервер/символ ддосил, ошибка не возникла.


ЗЫ Руками позу не открыть, только через MQL.

 

я имел ввиду что помогло чтоб робот не виснул

 
Mikhail Rudyk:

я имел ввиду что помогло чтоб робот не виснул

Тогда покажите OnInit. Сейчас выглядит, как бессмыслица. while продолжается.