Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1215

 

buon pomeriggio a tutti, ho bisogno di un suggerimento su come tradurre il codice da MT4 a MT5...


su MT4 - restituisce True o False 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);
  }
//*********************************************************************************************

bisogno di trasferirlo su MT5

Il problema è nelle serie temporali Low[i] e High[i], non capisco come convertirle.

 
Milhail Novgorodcev:

buon pomeriggio a tutti, ho bisogno di un suggerimento su come tradurre il codice da MT4 a MT5...


su MT4 - restituisce True o False usando MA.


bisogno di trasferirlo su MT5

Il problema è nelle serie temporali Low[i] e High[i], non capisco come convertirle.

Dovete creare la maniglia dell'indicatore SOLO una volta. Questo viene fatto nell'OnInit. Esempio di creazione:iMA

2. Primo punto fisso 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 maniglia dell'indicatore DEVE essere creata una volta. Questo viene fatto in OnInit. Esempio di creazione:iMA

2. Prima voce corretta 1.

Ecco cosa si ottiene:

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:

questo è quello che ho ottenuto:

Ora ditemi, perché avete bisogno di un ciclo così grande - su tutte le barre?

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

È molto irrazionale.


Descrivi la logica con parole tue.

 
Vladimir Karputov:

Ora ditemi, perché avete bisogno di un ciclo così grande - su tutte le barre?

È molto irrazionale.


Descrivi la logica con parole tue.

La condizione - il prezzo si allontana dalla linea mediana aMinDist(30 pips). Se succede, allora quando torna alla linea mediana e raggiungeOpenDev( 10 pips) - c'è un segnale per aprire un ordine di acquisto. (È sempre Buy nella parte superiore della linea media)

 
Milhail Novgorodcev:

La condizione è che il prezzo si allontani dalla linea media sulMinDist (30 pip), se ciò accade, allora quando il prezzo ritorna alla linea media e raggiungeOpenDev (10 pip) - c'è un segnale per aprire un ordine Buy. (È sempre Buy nella parte superiore della linea media)

Quando dovremmo controllare 'MinDist(30 pips)' e 'OpenDev(10 pips)' - ad ogni tick o solo al momento dell'apertura di una nuova barra?

 

Qual è la ragione per aprire una posizione subito dopo l'avvio dell'EA?

Le condizioni per aprire una posizione non sono soddisfatte, ma la posizione viene aperta

 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:

Qual è la ragione per aprire una posizione subito dopo l'avvio dell'EA?

Le condizioni per aprire una posizione non sono soddisfatte, ma la posizione viene aperta

Dove e come si ottengono i valori delle medie? Le hai ricevute? Se i valori sono ottenuti normalmente, avete notato l'indicizzazione nell'array delle medie?

 
Alexey Viktorov:

Dove e come si ottengono i valori medi? Sono stati ottenuti? Se questi valori sono ottenuti normalmente, avete notato l'indicizzazione negli array di medie?

Ecco il codice

 {

   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:

Ecco il codice

La maniglia dell'indicatore DEVE essere creata una volta sola. Questo viene fatto in OnInit. Esempio di creazione:iMA

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