Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1215

 

Guten Tag zusammen, ich brauche einen Tipp, wie ich den Code von MT4 nach MT5 übersetzen kann...


Funktion auf MT4 - gibt True oder False mit MA zurück.


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);
  }
//*********************************************************************************************

sie auf MT5 übertragen müssen

Das Problem ist, dass ich bei den Zeitreihen Low[i] und High[i] nicht weiß, wie ich sie umwandeln soll.

 
Milhail Novgorodcev:

Guten Tag zusammen, ich brauche einen Tipp, wie ich den Code von MT4 nach MT5 übersetzen kann...


Funktion auf MT4 - gibt True oder False mit MA zurück.


sie auf MT5 übertragen müssen

Das Problem ist, dass ich bei den Zeitreihen Low[i] und High[i] nicht verstehe, wie man sie konvertiert.

Sie müssen den Indikatorgriff NUR einmal erstellen. Dies geschieht in der OnInit. Beispiel für die Erstellung:iMA

2. Erster Fixpunkt 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. Der Indikatorgriff MUSS einmal erstellt werden. Dies geschieht in OnInit. Beispiel für die Erstellung:iMA

2. Erste richtige Position 1.

Hier ist, was Sie bekommen:

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:

Das ist es, was ich habe:

Nun sagen Sie mir, warum Sie einen so großen Zyklus brauchen - über alle Stäbe hinweg?

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

Das ist sehr irrational.


Beschreiben Sie die Logik in Ihren eigenen Worten.

 
Vladimir Karputov:

Nun sagen Sie mir, warum Sie einen so großen Zyklus brauchen - über alle Stäbe hinweg?

Das ist sehr irrational.


Beschreiben Sie die Logik in Ihren eigenen Worten.

Die Bedingung - der Preis entfernt sich von der Mittellinie beiMinDist (30 Pips). Wenn dies geschieht, dann, wenn er zurück zur Mittellinie kommt undOpenDev (10 Pips)erreicht- gibt es ein Signal, um eine Kauforder zu öffnen. (Es wird immer am oberen Ende der Durchschnittslinie gekauft)

 
Milhail Novgorodcev:

Die Bedingung ist, dass sich der Preis von der Durchschnittslinie auf derMinDist (30 Pips) entfernt. Wenn dies geschieht und der Preis zur Durchschnittslinie zurückkehrt undOpenDev (10 Pips)erreicht, gibt es ein Signal zum Öffnen einer Kauforder. (Es wird immer am oberen Ende der Durchschnittslinie gekauft)

Wann sollten wir "MinDist(30 Pips)" und "OpenDev(10 Pips)" prüfen - bei jedem Tick oder nur bei der Eröffnung eines neuen Balkens?

 

Was ist der Grund für die Eröffnung einer Position unmittelbar nach dem Start des EA?

Die Bedingungen für die Eröffnung einer Position sind nicht erfüllt, aber die Position wird eröffnet

 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:

Was ist der Grund für die Eröffnung einer Position unmittelbar nach dem Start des EA?

Die Bedingungen für die Eröffnung einer Position sind nicht erfüllt, aber die Position wird eröffnet

Wo und wie werden die Durchschnittswerte ermittelt? Haben Sie sie überhaupt bekommen? Wenn die Werte normal erhalten werden, haben Sie die Indizierung im Array der Durchschnittswerte beachtet?

 
Alexey Viktorov:

Wo und wie werden die Mittelwerte ermittelt? Sind sie überhaupt erhältlich? Wenn diese Werte normal ermittelt werden, haben Sie dann die Indizierung in den Arrays der Durchschnittswerte bemerkt?

Hier ist der 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:

Hier ist der Code

Der Indikatorgriff MUSS einmal erstellt werden. Dies geschieht in OnInit. Beispiel für die Erstellung:iMA

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