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

 
-Aleks-:

Fehler erhalten - was ist los? In MQL4 funktioniert es...


'{' - zu viele Initialisierungen TZ_Sky_and_Ground_V_04.mq5 2484 6

Ich sollte arrFibo[18] eingeben - sie sagen 18 Elemente.
 
Vladimir Karputov:

Haben Sie dieiMA-Hilfe gesehen?

Schritt eins: Deklarieren Sie eine Variable in der "Kopfzeile", um das Handle des iMA-Indikators zu speichern:

Schritt zwei: Erstellen eines Indikator-Handles in OnInit().

Und das Ergebnis (das Fadenkreuz auf dem Screenshot ist auf Takt 1 eingestellt):

Frage: Wenn ich durch den Indikator schleife, sollte ich auch double MA[1] setzen; oder sollte ich ein größeres Array anfordern/empfangen? Ich verstehe einfach nicht, was es mit dieser ganzen Komplexität auf sich hat - wo liegt der Vorteil gegenüber MQL4.
 
-Aleks-:

Wenn ich versuche, double MA[1] in der Schleife zu verwenden, sollte ich auch double MA[1] verwenden; oder ist es besser, die größere Arraygröße anzufordern/zu empfangen? Ich verstehe einfach nicht, warum all diese Komplikationen notwendig sind - wo liegt der Vorteil gegenüber MQL4?


Mein Beispiel mit der Funktion iMAGetist ein Beispiel für den Empfang von jeweils einem Wert von einem Indikator. Wenn Sie mehr Werte aus dem Indikator erhalten möchten, sollten SieCopyBuffer mit den Parametern "from" und "to"verwendenund das Ergebnis in einem Array speichern.


Hinzugefügt: Es wird später ein Beispiel geben ...


Versprochenes Beispiel.

Eingabeparameter:

  • Werte in ein Array holen - wenn "true", dann benutzen wir get values into an array, wenn "false", dann holen wir einen Wert nach dem anderen
  • count -> nur wenn "get values into an array"==true - die Anzahl der in das Array kopierten Balken
  • Startposition -> nur wenn "get values into an array"==true - Nummer des ersten Elements (bar), das in das Array kopiert werden soll von

Arbeiten mit dem Array und dem Moving Avegarege Indikator im Expert Advisor:

Arbeiten mit dem Array und dem Moving Avegarege Indikator im EA

Bitte beachten Sie das Array arr_ma und die Werte der Elemente mit dem Index #0 und mit dem Index #8.

ds

Dateien:
iMAGet.mq5  12 kb
 
Vladimir Karputov:


Mein Beispiel mit der Funktion iMAGetist ein Beispiel für den Empfang von jeweils einem Wert vom Indikator. Wenn Sie mehrere Werte aus dem Indikator holen wollen, sollten SieCopyBuffer mit den Parametern "from" und "to"verwendenund das Ergebnis in einem Array speichern.

Hinzugefügt: Es wird später ein Beispiel geben ...

Versprochenes Beispiel.

Eingabeparameter:

  • Werte in ein Array holen - wenn "true", dann benutzen wir get values into an array, wenn "false", dann holen wir einen Wert nach dem anderen
  • count -> nur wenn "get values into an array"==true - die Anzahl der in das Array kopierten Balken
  • Startposition -> nur wenn "get values into an array"==true - Nummer des ersten Elements (bar), das in das Array kopiert werden soll von

Arbeiten mit dem Array und dem Moving Avegarege Indikator im Expert Advisor:

Achten Sie bitte auf das Array arr_ma und die Werte der Elemente mit dem Index #0 und mit dem Index #8.

ds

Danke für das Beispiel!

Es ist für mich sehr wichtig zu verstehen, ob es einen Vorteil hat, einen einzigen Indikatorwert anzufordern und ein Dutzend Indikatorwerte zu kopieren - vielleicht gibt es dazu eine Untersuchung?

Die Tatsache, dass die Zeitreihe umgekehrt ist, ist nicht gut - ich bin an die Standardnummerierung der Balken 0123 gewöhnt, aber hier bekomme ich 1230 in umgekehrter Reihenfolge.

Wenn ich nicht weiß, wie viele Balken ich während der Suche benötige (z. B. bei der Suche nach dem MA und dem Balkenkreuzungspunkt), sollte ich dann die maximal mögliche Anzahl anfordern? Beeinträchtigt dies die Leistung in irgendeiner Weise?

 
-Aleks-:

Danke für das Beispiel!

Es ist für mich sehr wichtig zu verstehen, ob es einen Vorteil hat, einen einzigen Indikatorwert anzufordern und ein Dutzend Indikatorwerte zu kopieren - vielleicht gibt es dazu Untersuchungen?

...


Wer hindert uns daran, selbst zu recherchieren :) ?

...

Die Tatsache, dass die Zeitreihe umgekehrt ist, ist nicht gut - ich bin an die Standardnummerierung der Balken 0123 gewöhnt, und hier haben wir 1230 in umgekehrter Reihenfolge.

...

Das einzige, was Sie tun müssen, nachdem Sie ein Array erhalten haben (nach dem Aufruf von iMAGetArray), ist die Ausführung vonArraySetAsSeries('unser Array',true).
...

Wenn ich nicht weiß, wie viele Balken ich für die Suche benötige (z. B. bei der Suche nach einem MA und einem Balkenkreuzungspunkt), sollte ich dann die maximal mögliche Anzahl anfordern? Beeinträchtigt dies die Leistung in irgendeiner Weise?


In solchen Fällen ist es besser, mehrere Abfragen zu machen. Zum Beispiel: erste Abfrage - 50 Elemente, ggf. zweite Abfrage (wieder 50 Elemente) ...
 
Vladimir Karputov:

Wer hindert uns daran, selbst zu recherchieren :) ?


Ich bin durch meine Analphabetenschaft in MQL5 behindert - ich kann jeden wegen eines Fehlers im Code in die Irre führen, aber Ihre Professionalität würde mehr Vertrauen in solche Studien erwecken!

Wladimir Karputow:


Sie müssen lediglichArraySetAsSeries('unser Array',true) ausführen, nachdem Sie das Array erhalten haben (nach dem Aufruf von iMAGetArray).

Ich meine, es in einer Funktion auf einmal tun?


Wladimir Karputow:


In solchen Fällen ist es besser, mehrere Abfragen zu machen. Zum Beispiel, die erste Anfrage - 50 Elemente, und, falls erforderlich, die zweite Anfrage (wieder 50 Elemente) ...
Brr... D.h. eine Schleife in eine Schleife legen? Und warum 50 und nicht 100? Gleiche Forschungen zu diesem Thema sind notwendig, vielleicht hat es keinen Sinn, die Informationen mehr als einen Takt zu erhalten...
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL4 MT4 MetaTrader 4 Anfängern" verschoben.
 
-Aleks-:

...

D.h. es in einer Funktion auf einmal tun?

...


Es ist besser, das Feld nach innen zu drehen:

Wladimir Karputow:

Nachdem Sie das Array erhalten haben (nach dem Aufruf von iMAGetArray), müssen SieArraySetAsSeries('our array',true)ausführen.

-Aleks-:

...

Brr... D.h., eine Schleife in die Schleife einbauen? Warum 50 und nicht 100? Trotzdem sind Studien zu diesem Thema notwendig, vielleicht macht es keinen Sinn, sich über mehr als eine Bar zu informieren...

Keine verschachtelten Schleifen - es wird nur eine Schleife um alle Werte geben: die gesamte Verarbeitung erfolgt sequentiell - Suchergebnis in einer separaten Funktion (in dieser wird ein bestimmter Wert abgefragt - zum Beispiel 50 Werte). Wenn wir das Ergebnis nicht finden, stellen wir eine neue Anfrage.

 

Die Arbeit mit Indikatoren in MQL5 nach MQL4 ist schrecklich! Das macht mich wirklich krank.

Ich verstehe nicht, warum sie nicht alles in einer Funktion zusammenfassen können, einschließlich des Handles, anstatt den Aufruf des Indikators im gesamten Code zu verschmieren!

Und wenn die Einstellungen eines Indikators durch die Funktion geändert werden, in der sich der Indikator befindet, verstehe ich nicht, was zu tun ist! Müssen alle Varianten des Indikators initiiert werden?


Ich habe ein Beispiel in MQL4 gesehen - wie kann man das in MQL5 machen?


int BarPeresek_iMAf(int PeriodMA)
  {
   int TFT=0;
   int shiftMAT=0;
   int typeMAT=0;
   int priceMAT=0;
   int BarPeresek=0;
   if(Bars(Symbol(),0)>PeriodMA)
     {
      for(int X=1;X<1000; X++)
        {
         double MAT=NormalizeDouble(iMA(Symbol(),TFT,PeriodMA,shiftMAT,typeMAT,priceMAT,X),Digits());
         if((Low(X)>MAT && High(X)>MAT) || 
            (Low(X)<MAT && High(X)<MAT))BarPeresek++;
         else {BarPeresek++; break;}
        }

     }
   return BarPeresek;
  }
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для...
 

Können Sie mir sagen, wie ich die Markierungen nach dem Schließen einer Position entfernen kann, damit sie nicht angezeigt werden?

Ist es möglich, sie programmatisch zu entfernen?

Ich danke Ihnen!

Grund der Beschwerde: