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

 
Sfinks35:
¡Buenas tardes!
Parece que ahora lo tengo claro:

Pero al compilar, da una advertencia: posible pérdida de datos debido a la conversión de tipos en línea:
índice = GetPatt5barsDN(índice);

No hay errores en la cabecera de la función (o en la propia función) durante la compilación.

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index); // Здесь передача значения по ссылке

   Print("low3= ", low3);
   Print("index= ", index);
 

Saludos, tengo una pregunta, ¿hay alguna forma de saltarme una determinada pasada durante la optimización.

Por ejemplo estoy optimizando mi robot con 2 MA's - rápido y lento empezando por 10 y terminando con 1000 para cada uno

¿Cómo puedo omitir pases cuando el periodo de la lenta es menor que el de la rápida?

 
Roman Sharanov:

Saludos, tengo una pregunta, ¿hay alguna forma de saltarme una determinada pasada durante la optimización.

Por ejemplo estoy optimizando mi robot con 2 MA's - rápido y lento empezando por 10 y terminando con 1000 para cada uno

¿Cómo puedo omitir pases cuando el periodo de la lenta es menor que el de la rápida?

En este caso, haga return(INIT_PARAMETERS_INCORRECT) durante la inicialización;

 
Igor Zakharov:

En este caso, haga return(INIT_PARAMETERS_INCORRECT) durante la inicialización;

gracias

 

Hola. ¿Quién puede decírmelo? Tres TS diferentes, tres EAs diferentes, con tres números mágicos diferentes, en pares diferentes. Pero tienen una característica común: el cierre de la orden (mediante la función OrderClose()) cuando se alcanzan ciertas condiciones(número de órdenes y beneficio pequeño). En el probador, no hay problemas, pero en la práctica, la impresión es que cuando la función Order Close() se dispara en uno de los pares, esta función (OrderClose()) se dispara también en otros pares, se cumplan o no las condiciones. ¿Cuál puede ser la razón de esto? ¿Puede ser una función Close() definida por el usuario?

A continuación se muestran las condiciones de cierre y la función personalizada Close().

if(CountBuy() >= 1 && CountSell() >= 1 && CountSymbolTotal() >= NumberOrder)
   {
      int    i;
      int    total    = OrdersTotal();
      double accruals = CalculateCommission() + CalculateSwapBuy() + CalculateSwapSell();
   
      if((CountProfitBuy() + CountProfitSell()) >= (MaxOrderProfit*GetLots()+ accruals))
      {
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_BUY)
                     OrderCloseX();
               }
            }
         } 
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_SELL)
                     OrderCloseX();
               }
            }
         }            
      }
   }
//---------------------
void OrderCloseX()
{
   int i;
   int ticket = -1;
   int k      = OrdersTotal();
   
   for(i = k - 1; i >= 0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if((OrderType() == OP_BUY || OrderType() == OP_SELL) )
         {            
            ticket = OrderTicket();
         }
      }
   }
   if(OrderTicket() != ticket) 
      if(!OrderSelect(ticket, SELECT_BY_TICKET))
         Print("Ошибка в выборе ордеров!");

   while(true)
   {
      int  error;
      bool result = true;
      
      if (OrderType()==OP_BUY) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, 0);
         
      if (OrderType()==OP_SELL) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, 0);
         
      if(result != TRUE) 
      { 
         error = GetLastError(); 
            Print("LastError = ", error); 
      }
      else 
      { 
         error = 0; 
      }
      if(error == 135) 
         RefreshRates();
      else break;
   } 
}

 
Youri Lazurenko:

Hola. ¿Quién puede decírmelo? Tres TS diferentes, tres EAs diferentes, con tres números mágicos diferentes, en pares diferentes. Pero tienen una característica común: el cierre de la orden (mediante la función OrderClose()) cuando se alcanzan ciertas condiciones(número de órdenes y beneficio pequeño). En el probador, no hay problemas, pero en la práctica, la impresión es que cuando la función Order Close() se dispara en uno de los pares, esta función (OrderClose()) se dispara también en otros pares, se cumplan o no las condiciones. ¿Cuál puede ser la razón de esto? ¿Quizás esté en la función Close() definida por el usuario?

Aquí están las condiciones de cierre y la función Close() definida por el usuario.

En primer lugar, se utiliza OrderSelect() para comprobar las órdenes como debería ser - se controla el símbolo y el número maestro de la orden, y luego se cierra la orden utilizando OrderCloseX() y se busca a través de las órdenes de nuevo, pero no se controla el símbolo y el número maestro en OrderSelect() por alguna razón

Creo que deberíamos añadir OrderCloseX() para evitar reescribir todo el código:

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
 
Igor Makanu:

Primero se comprueban las órdenes a través de OrderSelect() como debería ser - controlando el símbolo y el número maestro de la orden, y luego se cierra la orden en OrderCloseX() y se buscan de nuevo las órdenes, pero por alguna razón no se controla el símbolo y el número maestro en OrderSelect()

Creo que debería añadir OrderCloseX() para no reescribir todo el código:

Gracias. Lo corregiré. Ya está corregido. Tal vez esta sea la razón: la función OrderCloseX() se llama en uno de los pares que luego funciona en todos los demás pares y números mágicos. Puede ser, puede ser. Gracias de nuevo.

 
Igor Makanu:

Dígitos - Variables predefinidas

También decidí usar esta función, leí que si el número de dígitos en la oficina es de 5 por ejemplo 1.00000 y los últimos valores son ceros podría no devolver 5 dígitos sino cero o por ejemplo el número se verá como 1.24700 devolverá 3 decimales aunque debería haber 5 de ellos ¿es cierto?

 
Seric29:

También decidí usar esta función, leí que si el número de dígitos en un establo de 5 caracteres por ejemplo 1.00000 y el último valor de cero puede no devolver 5 caracteres sino cero, o por ejemplo el número se verá como 1.24700 devolverá 3 decimales aunque debería haber 5 de ellos ¿es cierto?

Los dígitos se utilizan con NormalizeDouble

https://docs.mql4.com/ru/convert/normalizedouble

NormalizeDouble - Преобразование данных - Справочник MQL4
NormalizeDouble - Преобразование данных - Справочник MQL4
  • docs.mql4.com
Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров, должны быть нормализованы с точностью, значение которой можно получить функцией Digits(). Нужно...
 
De repente, todos los terminales han perdido la conexión con los corredores. En todas partes el error de conexión falló.
En la ventana de acceso, el servidor no me permite seleccionar un servidor, está en blanco. No he cambiado nada antes, no he instalado nada ni he borrado nada.
¿Cuál es la razón?
Razón de la queja: