Questions des débutants MQL5 MT5 MetaTrader 5 - page 1215

 

Bonjour à tous, j'ai besoin d'un conseil sur la façon de traduire un code de MT4 à MT5...


sur MT4 - renvoie Vrai ou Faux en utilisant 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);
  }
//*********************************************************************************************

Je dois le transférer sur MT5

Le problème est dans les séries temporelles Low[i] et High[i], je ne comprends pas comment les convertir.

 
Milhail Novgorodcev:

Bonjour à tous, j'ai besoin d'un conseil sur la façon de traduire un code de MT4 à MT5...


sur MT4 - renvoie Vrai ou Faux en utilisant MA.


Je dois le transférer sur MT5

Le problème est que dans les séries temporelles Low[i] et High[i], je ne comprends pas comment les convertir.

Vous devez créer la poignée de l'indicateur UNE SEULE fois. Ceci est fait dans le OnInit. Exemple de création :iMA

2. Fixez d'abord le point 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 poignée de l'indicateur DOIT être créée une fois. Ceci est fait dans OnInit. Exemple de création :iMA

2. Premier point à corriger 1.

Voici ce que vous obtenez :

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:

c'est ce que j'ai obtenu :

Maintenant, dites-moi, pourquoi avez-vous besoin d'un cycle aussi grand - sur toutes les barres ?

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

C'est très irrationnel.


Décrivez la logique dans vos propres mots.

 
Vladimir Karputov:

Maintenant, dites-moi, pourquoi avez-vous besoin d'un cycle aussi grand - sur toutes les barres ?

C'est très irrationnel.


Décrivez la logique dans vos propres mots.

La condition - le prix s'éloigne de la ligne médiane àMinDist(30 pips). Si cela se produit, alors quand il revient à la ligne médiane et atteintOpenDev( 10 pips) - il y a un signal pour ouvrir un ordre d'achat. (C'est toujours Buy en haut de la ligne de moyenne)

 
Milhail Novgorodcev:

La condition est que le prix s'éloigne de la ligne moyenne sur laMinDist (30 pips), si cela se produit, alors lorsque le prix revient à la ligne moyenne et atteintOpenDev (10 pips) - il y a un signal pour ouvrir un ordre d'achat. (C'est toujours Buy en haut de la ligne de moyenne)

Quand devons-nous vérifier 'MinDist(30 pips)' et 'OpenDev(10 pips)' - à chaque tick ou seulement au moment de l'ouverture d'une nouvelle barre ?

 

Quelle est la raison d'ouvrir une position immédiatement après le lancement de l'EA ?

Les conditions d'ouverture d'une position ne sont pas remplies, mais la position est ouverte.

 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:

Quelle est la raison d'ouvrir une position immédiatement après le lancement de l'EA ?

Les conditions d'ouverture d'une position ne sont pas remplies, mais la position est ouverte.

Où et comment sont obtenues les valeurs des moyennes ? Vous les avez eus ? Si les valeurs sont obtenues normalement, avez-vous remarqué l'indexation dans le tableau des moyennes ?

 
Alexey Viktorov:

Où et comment les valeurs moyennes sont-elles obtenues ? Sont-ils obtenus ? Si ces valeurs sont obtenues normalement, avez-vous remarqué l'indexation dans les tableaux de moyennes ?

Voici le code

 {

   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:

Voici le code

Le manche de l'indicateur DOIT être créé une fois. Ceci est fait dans OnInit. Exemple de création :iMA

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