Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 414

 
Leanid Aladzyeu:

escupe

posible pérdida de datos debido a la conversión del tipo .mq4 1697 29

tipo Doble en SL.

El compilador es estricto hoy en día, debería ser así, MarketInfo devuelve el tipo double

sl = NormalizeDouble(sl,(int)MarketInfo(Symbol(),MODE_DIGITS));
 
Alexey Volchanskiy:

El compilador es estricto hoy en día, debería ser así, MarketInfo devuelve el tipo double

La variable "sumbol" es correcta, la tengo como variable en la envoltura del modificador.

Gracias puse(int) y todo está bien.

No sé cómo lo hice antes; mi experiencia en la redacción de EAs es de 21 días))

No sé cuánto tiempo he estado escribiendo mis EAs y no sé cómo hacerlo correctamente).

 

Leanid Aladzyeu:

No sé cómo solía escribir los EAs (hace 21 días que los escribo )). Y mi EA está haciendo persistentemente su camino a la cima de los EAs libres))

Pues entonces tienes mucha suerte, hasta la versión 600 el antiguo MQL4 era horrible )) Por favor, envíeme el enlace a mi EA, puede estar en su buzón de correo
 
Alexey Volchanskiy:
Pues entonces tienes mucha suerte, hasta la versión 600 el antiguo MQL4 era horrible )) Por favor, envíenme el enlace al MQL4 Expert Advisor.
A mi apodo y producto.
 

Por alguna razón da un error en la última línea.

'}' - no todas las rutas de control devuelven un valor Expert4.mq4

Toda función no vacía debe terminar con el operador de retorno.

Sólo estoy mirando este código del video tutorial, pero puede ser para una build antigua.



#include#include <stderror.mqh>

//+------------------------------------------------------------------+
//|Experto4.mq4 |
//|Mikhail |
//||
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#enlace de la propiedad ""
#versión de la propiedad "1.00"
#propiedad estricta

int señal = 1;

int inicio()
{
si (señal == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue);
}
return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError();
err = 0;
bool exit_loop = false;
int ticket = -1;

int Reintento = 10;
int cnt = 0;
if (cmd = OP_BUY || cmd = OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
err = GetLastError();

switch(err)
{
caso ERR_NO_ERROR:
exit_loop = true;
romper;

{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_OFF_QUOTES:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt++;
romper;

caso ERR_PRICE_CHANGED:


RefreshRates();
continuar;

por defecto:
exit_loop +true;
romper;

}
si (cnt> Reintento)
exit_loop = true;


if (!exit_loop)
{
Sleep(1000);
RefreshRates();

}
si no
{
if(err != ERR_NO_ERROR)
{
Imprimir ("ERROR: " + err);

}

}

if(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
return(ticket);
}

Print("Error: la apertura de la orden falló después de" + cnt + "intentos");
return(-1);


}//mientras
}//si
}/salir
 
Mikhail Nikolaev:

Aquí....

}


}


return(ticket);

}

 
Mikhail Nikolaev:

Leanid Aladzyeu:

Insertar correctamente el código en el foro

 
Mikhail Nikolaev:

Por alguna razón da un error en la última línea.

'}' - no todas las rutas de control devuelven un valor Expert4.mq4

Toda función no vacía debe terminar con el operador de retorno.

Acabo de ver este código en el video tutorial pero puede ser para builds antiguos.



#include#include <stderror.mqh>

//+------------------------------------------------------------------+
//|Experto4.mq4 |
//|Mikhail |
//||
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#enlace de la propiedad ""
#versión de la propiedad "1.00"
#propiedad estricta

int señal = 1;

int inicio()
{
si (señal == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue);
}
return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError();
err = 0;
bool exit_loop = false;
int ticket = -1;

int Reintento = 10;
int cnt = 0;
if (cmd = OP_BUY || cmd = OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
err = GetLastError();

switch(err)
{
caso ERR_NO_ERROR:
exit_loop = true;
romper;

{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_OFF_QUOTES:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt++;
romper;

caso ERR_PRICE_CHANGED:


RefreshRates();
continuar;

por defecto:
exit_loop +true;
romper;

}
si (cnt> Reintento)
exit_loop = true;


if (!exit_loop)
{
Sleep(1000);
RefreshRates();

}
si no
{
if(err != ERR_NO_ERROR)
{
Imprimir ("ERROR: " + err);

}

}

if(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
return(ticket);
}

Print("Error: la apertura de la orden falló después de" + cnt + "intentos");
return(-1);


}//mientras
}//si
}/salir

Hombre, ¿de verdad es tan difícil formatear el código? Ni siquiera lo miraré por principio: es un dolor de ojos.
 
Me estoy retrasando de nuevo, no encaja
 
Leanid Aladzyeu:
Vuelvo a tener un retraso, no consigo que encaje.

Está bien, ¿qué navegador utilizas? Intenta cambiar a otro. Tengo FFox. He dado la respuesta en los comentarios del código al final.

#include <stderror.mqh>
//+------------------------------------------------------------------+
//|                                                      Expert4.mq4 |
//|                                                          Mikhail |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#property link      ""
#property version   "1.00"
#property strict

int signal = 1;

int start()
{
   if (signal == 1)
   {
      OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue);
   }
   return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
               double takeprofit, string comment=NULL, int magic=0, datetime expiration=0,color arrow_color=CLR_NONE)
{
   int err = GetLastError();
   err = 0;
   bool exit_loop = false;
   int ticket = -1;
  
   int Retry = 10;
   int cnt = 0;
   if (cmd == OP_BUY || cmd == OP_SELL)
   {
      while(!exit_loop)
      {
         ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
         err = GetLastError();
        
         switch(err)
         {
            case ERR_NO_ERROR:
            exit_loop = true;
            break;
           
            case ERR_SERVER_BUSY:
            case ERR_NO_CONNECTION:
            case ERR_INVALID_PRICE:
            case ERR_OFF_QUOTES:
            case ERR_BROKER_BUSY:
            case ERR_TRADE_CONTEXT_BUSY:
            cnt++;
            break;
           
            case ERR_PRICE_CHANGED:
           
          
            RefreshRates();
            continue;
           
            default:
               exit_loop +true;
               break;
         
         }
         if (cnt> Retry)
            exit_loop = true;
          
           
         if (!exit_loop)
            {
               Sleep(1000);
               RefreshRates();
              
            }
            else
               {
                  if(err != ERR_NO_ERROR)
                  {
                  Print ("ERROR: " + err);
                 
                  }
            
               }
              
               if(err == ERR_NO_ERROR)
               {
                  OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
                  return(ticket);
               }
              
               Print("Error: order open failed after" + cnt + "atempts");
               return(-1);
           
           
}//while
}//if
// тут надо вернуть какое-то значение, компилятор не понимает, что у вас есть return-ы внутри while, он не умеет анализировать код. Он ожидает, что при выходе из функции будет возвращаться значение
}//exit
Razón de la queja: