MQL5 Einsteiger sucht Fehler! - iMA/CopyBuffer

 

Zunächst ein herrzliches "Hallo" an die Community,

ich bin Einsteiger in Sachen automatisiertes Trading und habe aus der Vergangenheit aber bereits einige oberflächliche Erfahrungen mit der Programmierung.

Nun versuche ich meine ersten Schritte zu realisieren - ich bin Fan von "learning by doing". Der wirtschaftliche Nutzen steht dabei -zunächst noch- im Hintergrund, da ich mich zunächst mit der Syntax und den verschiedenen Befehlen vertraut machen möchte. Leider ist die Dokumentation - für einen nicht Vollblutprogrammierer - teils etwas schwer verständlich. ;)

---

Ich habe nun einen EA entworfen der eine Buy Order absetzt wenn der MovingAverage (Mittelung über 15 Kerzen) den MovingAverage (Mittelung über 5 Kerzen) von oben nach unten schneidet; umgekehrt wird ein Verkaufssignal generiert wenn der MA(15) den MA(5) von unten nach oben schneidet.

Das möchte ich nun untersuchen indem ich zunächst prüfe ob sie die Mittelwerte im Laufe der vergangenen 2 Kerzen geschnitten haben. Anschließend vergleiche ich die MA Werte der Kerze vor dem Schnittpunkt. Um zu erkennen ob der MA(15) von oben oder von unten geschnitten hat.

Dieser Logik folgend müssen für den Verkaufsfall die MA(15) Werte der vorletzten Kerzen größer der MA(5) Werte der vorletzten Kerze sein. Leider erfordert mein Modul das ich den Vergleichsoperator umdrehe damit es funktioniert. Vermutlich sind beim ermitteln der MA Werte der verschiedenen Kerzen Fehler passiert.

Hier mal ein kommentierten Codeschnipsel in dem ich den Fehler vermute:

   //handle auf den Pufffer der MA Werte -- Periode_kurz = 5;  
   int handle_iMA_kurz = iMA(_Symbol,_Period,Periode_kurz,0,MODE_SMA,PRICE_WEIGHTED);
   //definieren des Puffers der die Daten der letzten 2 Kerzen aufnehmen soll
   double buffer_iMA_kurz[2];
   //kopieren von 2 Werten aus dem Indikatorpuffer -- 0 = aktuelle Kerze, 1 = letzte komplette Kerze 
   CopyBuffer(handle_iMA_kurz, 0, 0, 2, buffer_iMA_kurz);
   
  //beschrieben der internen Variablen mit den Werten
   MovingAverage_kurz.aktuell = buffer_iMA_kurz[0];
   MovingAverage_kurz.letzte  = buffer_iMA_kurz[1];

Vorgeschaltet ist ein Modul welches prüft ob eine neue Kerze entstanden ist/angefangen wurde. Entsprechend kommt oben stehender Codeschnips pro Kerze einmal (am Anfang) zur Ausführung; er wird nicht mit jedem neuen Tick ausgeführt.

konkrete Fragen:

Habe ich evtl. eine falsche Vorstellung von der Funktion von iMA() / CopyBuffer() in Hinblick auf die Generierung von Daten einer bereits abgeschlossenen Kerze?

Wir die Indexierung durch CopyBuffer umgedreht?- Also 0 = ältere Kerze? (Die Dokumentation hatte ich dazu anders verstanden)

In dem zum Backtest gehörenden Chart (die IMA Werte werden ja eingeblendet) lassen sich nur die ".aktuell" Werte als plausibel erkennen. Die MA Werte der umliegenden Kerzen entsprechen nicht den Werten meines Parameters ".letzte"!? Probeweise hatte ich auch bereits 3 MA Werte ausgelesen um auszuschließen, dass die Index[0] Werte von der aktuellen unfertigen Kerze stammen. Jedoch waren dabei auch nur die Werte eines Parameter Indezies plausibel. Die anderen Indizies entsprachen nicht den Werten in der grafischen Darstellung ab.

Bei mir schaltet die Visualisierungsoption des Strategietesters scheinbar die Print()-Funktion ins Journal aus. Lässt sich das umgehen?


Leider hat mich alles testen und grübeln noch nicht weiter gebracht.

Ich bedanke mich vielmals für Eure Hilfe.

LG Chris

 

Zu Mt5 kann ich Dir (noch) wenig sagen - ich arbeite noch mit dem mt4.

Aber ich glaube man lernt schneller, wenn man einen bestehenden EA nimmt, zB aus der Codebase oben, und schaut, was und wie der das macht und dann beginnt da etwas zu ändern.

Man so schneller Erfolg und man sieht das eine oder andere mal ein paar geniale Kniffe anderer Programmierer!

Außerdem, wenn Du unsicher bist mit der Funktionsweise einer MT5-Funktion, Cursor drauf, F1 und lesen...

 
Carl Schreiber:

Zu Mt5 kann ich Dir (noch) wenig sagen - ich arbeite noch mit dem mt4.

Aber ich glaube man lernt schneller, wenn man einen bestehenden EA nimmt, zB aus der Codebase oben, und schaut, was und wie der das macht und dann beginnt da etwas zu ändern.

Man so schneller Erfolg und man sieht das eine oder andere mal ein paar geniale Kniffe anderer Programmierer!

Außerdem, wenn Du unsicher bist mit der Funktionsweise einer MT5-Funktion, Cursor drauf, F1 und lesen...

OK. Vielen Dank dennoch.

Von der Hilfe/Dokumentation mache ich schon rege gebrauch. Jedoch ist die Übersetzung teils etwas holprig, sodass die ein oder andere Unklarheit am Ende doch offen bleibt.

Die Codebase schaue ich mich auch mal an. Danke.

Grund der Beschwerde: