Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 880

 
Mikhail Rudyk:

el robot sólo está en este gráfico, pero negocia las mismas opciones que los robots

Inserta esta línea.

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());
                              }
                  }
   }
 

poner

pero no creo que reiniciar el error ayude.

 
Mikhail Rudyk:

pero no creo que reiniciar el error ayude.

También.

#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());
                              }
                  }
   }
 

Ya lo hice y funcionó.

Pero el hecho del error sigue sin resolverse.

muchas gracias por su ayuda

while(eror==false&&step<10)
{
double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
ResetLastError();
eror=Comercio.Comprar(lote,nombre del símbolo,oferta,0,0,comentario);
paso++;
Dormir(200);
if(eror==false)
{
Print("error - ",GetLastError());
if(GetLastError()==4754){OnInit();}
}
}

 
Mikhail Rudyk:

el hecho del error no está resuelto.

Por eso sugerí esta opción.

 
fxsaber:

Por eso sugerí esta opción.

Bueno, lo intentaré.

Pero, ¿por qué no funciona la clase estándar?

 
Mikhail Rudyk:

Bueno, lo intentaré.

Pero, ¿por qué no funciona la clase estándar?

Si la biblioteca alternativa funciona, quedará claro dónde cavar.

No puedo reproducir el problema con cada una de las bibliotecas.

 
Mikhail Rudyk:

Ya lo hice y funcionó.

while(eror==false&&&step<10)
{
double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
ResetLastError();
eror=Comercio.Comprar(lote,nombre del símbolo,oferta,0,0,comentario);
paso++;
Dormir(200);
if(eror==false)
{
Print("error - ",GetLastError());
if(GetLastError()==4754){OnInit();}
}
}

Esto no debería funcionar. 4754 ocurre cuando OrdersTotal es mayor que cero, pero OrderSelect o OrderGetTicket se fastidian.

Esto es muy raro, pero no en este caso. El servidor/símbolo es tan específico aquí que sucede lo mismo con las posiciones, sólo que con el error 4753.

Ya está preparado para tener que hacer ajustes a la biblia alternativa, ya que las situaciones que se presentan tiran mucho de la lógica. Pues ahí envías una orden de mercado, llega al servidor, crea una posición y la cierra en el mismo milisegundo. Y el terminal recibe información de forma retroactiva por el ping.

Me sorprendió gratamente que todo funcionara a la perfección.


Servidor/símbolo propio dodosil, el error no se produjo.


SZY La pose no se puede abrir manualmente, sólo a través de MQL.

 

Me refería a que ayudaba que el robot no colgara

 
Mikhail Rudyk:

Quería decir que ayudaba al robot a no colgarse

Entonces muestra OnInit. Ahora mismo parece una tontería.