Condition Scanner (cs)
Installation:
So kannst du die Funktionen des Scanners demonstrieren:

- 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:
Der Code, der spezifisch für die PP (Power Pro) Strategie ist:
Der Code, der spezifisch für die MAX (Gleitender Durchschnitt Crossover) Strategie ist:
Der Code, dessen IDs mit csXXXX beginnen:
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.
Verwandte Beiträge
- iMFISignAlert: Das perfekte Signal-Tool für MetaTrader 5
- iStochKomposterAlert: Ein leistungsstarker Indikator für MetaTrader 5
- Ideal ZigZag: Der schnelle Indikator für MetaTrader 5
- Ideal ZigZag: Der unverzichtbare Indikator für MetaTrader 4
- Tägliche prozentuale Veränderung in MT4 – Indikator für MetaTrader 4