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

 

buenas tardes a todos, necesito una pista sobre cómo traducir el código de MT4 a MT5...


en MT4 - devuelve Verdadero o Falso usando MA.


input int                 MinDist          = 30;            // Мин. пройденное расстояние( отклонение от средней линии в  тиках)
input int                 OpenDev          = 16;         // Отклонение для входа ( отклонение от средней линии в  тиках)
//*********************************************************************************************
bool SignalBuy()  
  {
   double MA0 = iMA(Symbol(), 0, PeriodMA, ShiftMA, MethodMA, PriceMA, 0);
   if(Bid <= MA0+OpenDev*Point)
     {
      if(High[0]-MA0 >= MinDist*Point)
         return(true);
      for(int i=1; i<=Bars-1; i++)
        {
         double MA = iMA(Symbol(), 0, PeriodMA, ShiftMA, MethodMA, PriceMA, i);
         if(Low[i] <= MA+OpenDev*Point)
            return(false);
         if(High[i]-MA >= MinDist*Point)
            return(true);
        }
     }
   return(false);
  }
//*********************************************************************************************

necesito transferirlo a MT5

El problema está en las series temporales Low[i] y High[i] , no entiendo cómo convertirlas.

 
Milhail Novgorodcev:

buenas tardes a todos, necesito una pista sobre cómo traducir el código de MT4 a MT5...


en MT4 - devuelve Verdadero o Falso usando MA.


necesito transferirlo a MT5

El problema está en las series temporales Low[i] y High[i] , no entiendo cómo convertirlas.

Tiene que crear el mango del indicador SOLO una vez. Esto se hace en el OnInit. Ejemplo de creación:iMA

2. Primer punto de fijación 1.

Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
//|                                                     Demo_iMA.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Перечисление способов создания хэндла                            |  Creation             type=Call_iMA;                ...
 
Vladimir Karputov:

1. la manija del indicador DEBE ser creada una vez. Esto se hace en OnInit. Ejemplo de creación:iMA

2. Primer punto correcto 1.

Esto es lo que obtienes:

int MA0;                                  // variable for storing the handle of the iMA indicator

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  
MA0 = iMA(o_symbol.Name(), Period(), PeriodMA, ShiftMA, MethodMA, PriceMA);
  
  //--- if the handle is not created
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }
//---
 
Milhail Novgorodcev:

eso es lo que tengo:

Ahora dime, ¿por qué necesitas un ciclo tan grande - en todas las barras?

      for(int i=1; i<=Bars-1; i++)
        {

Es muy irracional.


Describa la lógica con sus propias palabras.

 
Vladimir Karputov:

Ahora dime, ¿por qué necesitas un ciclo tan grande - en todas las barras?

Es muy irracional.


Describa la lógica con sus propias palabras.

La condición - el precio se aleja de la línea media enMinDist(30 pips). Si sucede, entonces cuando vuelve a la línea media y alcanzaOpenDev( 10 pips) - hay una señal para abrir una orden de compra. (Siempre es Comprar en la parte superior de la línea media)

 
Milhail Novgorodcev:

La condición es que el precio se aleje de la línea media en elMinDist (30 pips), si sucede, entonces cuando el precio vuelve a la línea media y alcanzael OpenDev (10 pips) - hay una señal para abrir una orden de Compra. (Siempre es Comprar en la parte superior de la línea media)

¿Cuándo debemos comprobar 'MinDist(30 pips)' y 'OpenDev(10 pips)' - en cada tick o sólo en el momento de la apertura de una nueva barra?

 

¿Cuál es la razón para abrir una posición inmediatamente después de iniciar el EA?

No se cumplen las condiciones para abrir una posición, pero la posición se abre

 if(
      (MovingAverage1[0]<MovingAverage2[0]) &&
      (MovingAverage1[1]>MovingAverage2[1])
   )
     {
      if(PositionsTotal()==0)
         trade.Sell(0.1);
     }

   if(
      (MovingAverage1[0]>MovingAverage2[0]) &&
      (MovingAverage1[1]<MovingAverage2[1])
   )
     {
      if(PositionsTotal()==1)
         trade.PositionClose(_Symbol);
        }

 
Pineapple88:

¿Cuál es la razón para abrir una posición inmediatamente después de iniciar el EA?

No se cumplen las condiciones para abrir una posición, pero la posición se abre

¿Dónde y cómo se obtienen los valores de las medias? ¿Los has conseguido? Si los valores se obtienen normalmente, ¿te has fijado en la indexación en la matriz de medias?

 
Alexey Viktorov:

¿Dónde y cómo se obtienen los valores medios? ¿Se obtienen en absoluto? Si estos valores se obtienen con normalidad, ¿te has fijado en la indexación en las matrices de medias?

Este es el código

 {

   double MovingAverage1[], MovingAverage2[]; //задаем два массиса для МА

   int MovingAverageIndic1 = iMA(_Symbol,0,20,0,MODE_EMA,PRICE_CLOSE);
   int MovingAverageIndic2 = iMA(_Symbol,0,200,0,MODE_EMA,PRICE_CLOSE);

   ArraySetAsSeries(MovingAverage1,true);
   ArraySetAsSeries(MovingAverage2,true);

   CopyBuffer(MovingAverageIndic1,0,0,3,MovingAverage1);
   CopyBuffer(MovingAverageIndic2,0,0,3,MovingAverage2);

   if(
      (MovingAverage1[0]<MovingAverage2[0]) &&
      (MovingAverage1[1]>MovingAverage2[1])
   )
     {
      if(PositionsTotal()==0)
         trade.Sell(0.1);
     }

   if(
      (MovingAverage1[0]>MovingAverage2[0]) &&
      (MovingAverage1[1]<MovingAverage2[1])
   )
     {
      if(PositionsTotal()==1)
         trade.PositionClose(_Symbol);
     }

  }
 
Pineapple88:

Este es el código

La manija del indicador DEBE crearse una vez. Esto se hace en OnInit. Ejemplo de creación:iMA

Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
//|                                                     Demo_iMA.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Перечисление способов создания хэндла                            |  Creation             type=Call_iMA;                ...
Razón de la queja: