Startseite Technischer Indikator Beitrag

Condition Scanner: Ein Indikator für MetaTrader 4 zur Analyse von Handelsbedingungen

Anhang
11135.zip (178.96 KB, Herunterladen 0 mal)

Condition Scanner (cs)

Die Idee hinter dem beigefügten Code ist folgende:

Du denkst dir eine (oder mehrere) Bedingungen aus. Du schreibst Code, um diese Bedingungen zu testen. Dann bettest du deinen Code in die bereitgestellten Code-Schnipsel ein und nimmst ein paar einfache Anpassungen vor.

Am Ende hast du mehrere Indikatoren. Einer dieser Indikatoren zeigt dir auf dem aktuellen Chart, wo deine Bedingungen in der Vergangenheit aufgetreten sind. Der andere zeigt in einem Panel an, ob die Bedingungen derzeit für alle Instrumente und Zeitrahmen, die dich interessieren, aufgetreten sind. Das spart dir die Mühe, manuell nach Paaren und Zeitrahmen zu suchen, um deine Bedingungen zu finden.

Installation:

Kopiere die Inhalte der vier Ordner (Indikatoren, Include, Vorlagen, Profile) in die entsprechenden Ordner deiner Installation. Es ist alles harmlos – nur Indikatoren und ähnliches.
Schließe das Programm und starte MetaTrader neu.

So kannst du die Funktionen des Scanners demonstrieren:

Dieses Beispiel basiert auf der Power Pro Strategie (Setup-Identifikator = "PP"), die von Russ Horn vorgestellt wurde. Es handelt sich um eine Band-Breakout-Strategie, bei der die obere Bandgrenze ein EMA (Exponentieller gleitender Durchschnitt) der Hochs ist und die untere Bandgrenze ein EMA der Tiefs. Ich unterstütze diese Strategien nicht – dies ist lediglich ein Beispiel dafür, was du entwickeln kannst.

Wechsle in deinem System zum Profil cspp. Dies kann einige Sekunden für die erste Anzeige dauern, verbraucht danach jedoch nicht viel Computerressourcen.

Du solltest einen Bildschirm ähnlich diesem sehen:



Das obige Beispiel besteht aus:
  • einem Indikator auf dem Chart mit 4 Plots,
  • einem separaten Indikator-Fenster, das den EMA des RSI anzeigt,
  • einem separaten Indikator-Fenster, das zeigt, wo Bedingungen für Long- oder Short-Trades historisch aufgetreten sind,
  • und einem Panel-Indikator, der anzeigt, wo die gleichen Bedingungen gerade aufgetreten sind oder aktuell auftreten, über eine Reihe von Paaren und Zeitrahmen.

Der Code, der allen Scans gemeinsam ist:

Utils.mqh enthält einige Utility-Funktionen, die in jedem Indikator, Expert Advisor usw. verwendet werden können.
cs_Chart.mqh enthält fast den gesamten Code für den Indikator auf dem aktuellen Chart.
cs_Panel.mqh enthält fast den gesamten Code für den Indikator im Panel.

Der Code, der spezifisch für die PP (Power Pro) Strategie ist:

csPP_0.mq4 zeigt die relevanten "Chart-Fenster"-Indikatoren an.
csPP_1.mq4 zeigt die relevanten "separate Fenster"-Indikatoren an.
csPP_Chart.mq4 ist der Indikator, der zeigt, was historisch auf dem aktuellen Chart passiert ist.
csPP_Panel.mq4 ist der Indikator, der die aktuelle Situation für alle Paare und Zeitrahmen anzeigt, die dich interessieren.
csPP_GetBarFlag.mqh ist der Code, der sowohl im Chart- als auch im Panel-Indikator "eingefügt" wird. Er entscheidet, ob es an einer bestimmten Kerze eine interessante Bedingung gibt.


Ich habe auch ein weiteres, weniger komplexes Beispiel (Identifikator=MAX) beigefügt.

Der Code, der spezifisch für die MAX (Gleitender Durchschnitt Crossover) Strategie ist:

csMAX_0.mq4 ist ein benutzerdefinierter Indikator, der zwei gleitende Durchschnitte anzeigt. Er ist vollständig in sich geschlossen.
Es gibt kein entsprechendes csMAX_1, da, im Gegensatz zu PP, kein separates Fenster angezeigt werden muss.
csMAX_Chart.mq4, csMAX_Panel.mq4 und csMAX_GetBarFlag.mqh erfüllen die gleiche Funktion wie bei der PP-Strategie oben.

Der Code, dessen IDs mit csXXXX beginnen:

Dies sind Vorlagen, die beim Entwickeln zusätzlicher Scans verwendet werden können.

So gehe ich beim Programmieren einer neuen Bedingung vor:

Ich wähle einen Strategie-Identifikator (z.B. PB für Pinbars).

Ich richte mein Fenster wie oben unter "So kannst du die Funktionen des Scanners demonstrieren" ein und entferne alle bestehenden Indikatoren.

Wenn mein neuer Scan auf Indikatoren im Chart angewiesen ist, baue ich diese mit csXXXX_0.mq4 als Vorlage. Ich denke daran, es als csPB_0.mq4 zu speichern. Ich wende meinen benutzerdefinierten Indikator auf den linken Chart an.

Wenn ich einen separaten Fenster-Indikator benötige, baue ich ihn ebenfalls. Ich denke daran, es als csPB_1.mq4 zu speichern. Ich wende es auf den linken Chart an.

Ich baue benutzerdefinierte Indikatoren, anstatt Standardindikatoren zu verwenden, damit ich auf sie an anderer Stelle mit der iCustom-Funktion verweisen kann. So muss ich, wenn ich meine Meinung über die grundlegenden Parameter meiner Strategie (z.B. Methode des gleitenden Durchschnitts) ändere, nur meine benutzerdefinierten Indikatoren ändern. Verwende ich Standardindikatoren, müsste ich diese ändern und dann in den Tiefen meines Codes nach Anpassungen suchen.

Ich hole mir csXXXX_Chart.mq4, ersetze alle Vorkommen von 'XXXX' durch meinen Strategie-Identifikator 'PB' und speichere den Code als csPB_Chart.mq4. Er wird noch nicht kompilieren, da noch einige "Include"-Codes zu schreiben sind.

Jetzt um den "Include"-Code bereitzustellen.

Wenn die Bedingungen, die ich testen möchte, ganz einfach sind, verwende ich einfach die "Include"-Datei csXXXX_GetBarFlag.mqh, programmiere, was ich möchte, und speichere es als csPB_GetBarFlag.mqh. Wenn die Programmierung jedoch knifflig ist, gehe ich zurück zu dem csPB_Chart.mq4, das ich zuvor erstellt habe, kommentiere die Zeile mit dem Code, die jetzt lautet "#include <csPB_GetBarFlag.mqh>", und baue den Code, den ich brauche, direkt innerhalb der csPB_Chart.mq4-Datei. Wenn ich alles sauber habe, verschiebe ich den Bedingungsfindungscode in die "Include"-Datei 'csPB_GetBarFlag.mqh' und entkommentiere die #include-Anweisung in der 'csPB_Chart.mq4'-Datei.

Jetzt kann die 'csPB_Chart.mq4'-Datei kompiliert und auf den linken Chart angewendet werden.

Zu diesem Zeitpunkt speichere ich die Vorlage für den linken Chart als csPB-CHART.tpl. Sie umfasst alle benutzerdefinierten Indikatoren auf dem Chart, benutzerdefinierte Indikatoren im separaten Fenster und die Anzeige der Ergebnisse, wie sie auf den aktuellen Chart zutreffen.

Ich lade die Datei 'csXXXX_Panel.mq4', ersetze alle Vorkommen von "XXXX" durch "PB" und speichere sie als "csPB_Panel.mq4". Diese letzte Datei wird kompiliert und auf den rechten Chart angewendet. Es kann beim ersten Anwenden etwas langsam sein, benötigt danach aber nicht viel Ressourcen.

Ich speichere dann csPB_panel.tpl als Vorlage für den rechten Chart.

Ich speichere dann normalerweise csPB als Profil.

HINWEIS: Bei der Erstellung benutzerdefinierter Indikatoren und deren Bezugnahme mit der iCustom-Funktion achte ich darauf, dass die Namen exakt richtig sind. Es gibt keine Warnung, wenn iCustom auf einen Indikator verweist, der nicht existiert.

HINWEIS: Es kann einen Fehler geben, sodass der Panel-Indikator beim ersten Laden Ergebnisse produziert, die nicht mit denen auf dem spezifischen Chart übereinstimmen. Ich finde, wenn ich die Zeitspanne im Panel-Fenster ändere (was eine Neuberechnung erzwingt), stimmt alles wieder. Ich wäre dankbar, wenn mir jemand bei diesem Problem helfen könnte.

HINWEIS: Im ...GetBarFlag.mqh-Code, den du selbst entwickelst, kannst du jede Ganzzahl an das aufrufende Programm zurückgeben, um sie anzuzeigen. Wie der Code steht, bedeutet null 'kein Ergebnis' und zeigt eine graue Anzeige an, die angibt, welche Kerze getestet wurde. Die Rückgabe einer negativen Ganzzahl führt zu einer roten Anzeige, während eine positive Ganzzahl eine grüne Anzeige ergibt.

Einige Aspekte der Software:

Der Code wurde als Indikatoren geschrieben, sodass du, wenn ein Panel angezeigt wird und du dir ein bestimmtes Paar und einen bestimmten Zeitrahmen ansehen möchtest, einfach das Paar aus dem Marktbeobachtungsfenster auswählst, es auf den aktuellen Chart ziehst und die Zeitspanne anpasst. Die Vorlage kümmert sich um den Rest.

Um die Computerlast zu reduzieren, habe ich zwei Dinge getan.

Erstens gehe ich beim Arbeiten mit Zeitreihenarrays meist nur 200 Kerzen zurück.

Zweitens testet die Panel-Anzeigesoftware die Bedingungen des Nutzers nicht bei jedem Tick. Sie verwendet einen Timer-Mechanismus, sodass Tests nur auf Bar[0] angewendet werden, wenn Bar[0] zu 90 % gebildet ist; andernfalls werden sie auf Bar[1] angewendet. Wenn Bar[1] im Fokus ist (d.h. Bar[0] ist weniger als 90 % gebildet), wird sie einmal getestet und ein Wechsel zu Bar[0] wird berechnet. Für jeden nachfolgenden Tick, der kommt, passiert bis zum Wechselzeitpunkt nichts. Ich bin mir nicht 100 % sicher, dass ich das richtig programmiert habe, aber es scheint ganz gut zu funktionieren.

Über den oben genannten Timer-Mechanismus zeigt die oberste Zeile des Panels das Datum und die Uhrzeit des letzten Bedingungstests an. Außerdem zeigen in den hier bereitgestellten Beispielen die neutralen Anzeigen eine null, wenn Bar[0] im Fokus ist, und eine '1', wenn Bar[1] im Fokus ist.

Verwandte Beiträge

Kommentar (0)