Systemhandel 게시글

Selbstoptimierender RSI/MFI Trader: Dein Expert Advisor für MetaTrader 4

첨부파일
19392.zip (4.86 KB, 다운로드 0회)

Es ist ein Traum von mir, einen Roboter zu haben, der sich selbst optimiert. So wüsste ich, dass er immer mit den besten Werten arbeitet. Dies ist mein bescheidener Versuch, ein Stück meines Traums in die Realität umzusetzen. Der angehängte Expert Advisor optimiert die überkauften und überverkauften Niveaus, die er für seine Trades nutzt. Ich hoffe, dass andere mit diesem Konzept etwas Größeres erschaffen können. Wenn das der Fall ist, lass es mich bitte wissen! Und vergiss nicht, meinen Roboter mit den Sternen oben zu bewerten. Diese Strategie kann auf jedes Währungspaar angewendet werden und funktioniert in jedem Zeitrahmen, sofern die richtigen Einstellungen verwendet werden.

Für diesen Roboter gibt es einige Eingaben. Ich habe einige zusätzliche Funktionen eingebaut, mit denen du experimentieren kannst. Viel Spaß damit!


Einstellungen

  • magic = 4376 - Eindeutige Nummer für diesen EA.
  • optimizingPeriods = 144 - Optimierungsperioden (Bars). Dies ist die Anzahl der Bars, die du für die Optimierung verwenden möchtest. Wenn du beispielsweise ein Stunden-Chart nutzt und 144 wählst, wird der Roboter 144 Stunden in die Vergangenheit schauen, was sechs Tagen entspricht.
  • inAggressive = false - Soll der Expert Advisor aggressiv handeln? Risikoreich. Im aggressiven Modus wird der Expert Advisor Trades auf eine aggressivere Weise eingehen. Anstatt auf einen Schnittpunkt der überkauften oder überverkauften Niveaus zu warten, wird der Roboter nur dann einen Kauf tätigen, wenn die Käufe in letzter Zeit profitabler waren als die Verkäufe und umgekehrt.
  • inTradeReverse = false - Reverse Trading. Reverse Trading ändert die Richtung deiner Trades.
  • inOneOrderAtATime = true - Nur eine Order gleichzeitig öffnen? Wenn wahr, hat der Roboter nur eine Order gleichzeitig, andernfalls werden unbegrenzt viele Orders gemäß den Einstiegskriterien geöffnet.
  • Lot_sizing_dynamic_invalidates_static - Einfach ein Platzhalter, um die Lot-Größenmechanik von den anderen Eingaben zu trennen.
  • Lots = 0.01 - Statische Lotgröße von Orders. Gib die Lotgröße für deine Orders mit einer statischen Zahl an.
  • inUseDynamicLotSize = true - Dynamische Lotgröße verwenden. Aktiviert die dynamische Lotgröße, die anstelle der statischen Lotgröße verwendet wird. Sollte die dynamische Lotgröße ungültig sein, weicht der Roboter auf die statische Lotgröße zurück.
  • inPercentageOfRisk = 2 - Prozentualer Anteil des Kontostands, der bei jedem Trade riskiert wird (2 = 2%). Bei Verwendung dynamischer Lotgrößen gibst du die Lotgröße als Prozentsatz deines Kontostands an. 2 entspricht 2 Prozent. Es ist nicht nötig, 0,02 einzugeben; wenn du es so machst, wäre der verwendete Prozentsatz sehr klein. Der maximale Prozentsatz, der verwendet werden kann, beträgt 10 Prozent.
  • Index_Indicator_Values - Einfach ein Platzhalter, um die Parameter des Indexindikators von anderen Eingaben zu trennen.
  • indicator index = _RSI_ - Wähle, welchen Indexindikator du verwenden möchtest. Aktuelle Auswahlmöglichkeiten sind der Relative Strength Index (RSI) oder der Money Flow Index (MFI).
  • IndicatorTopValue = 100 - Höchster Wert, zu dem du traden würdest. Dies ist der oberste Wert, zu dem du mit deinem Indikator einen Trade platzieren würdest. Lass es bei 100, um alle Werte des Indexindikators zu berücksichtigen.
  • IndicatorBottomValue = 0 - Niedrigster Wert, zu dem du traden würdest. Dies ist der unterste Wert, zu dem du mit deinem Indikator einen Trade platzieren würdest. Lass es bei 0, um alle Werte des Indexindikators zu berücksichtigen.
  • IndyTimeframe = PERIOD_CURRENT - Zeitrahmen für den Index. Wähle, welchen Zeitrahmen du für den Indikator während der Optimierung und des Tradens verwenden möchtest. PERIOD_CURRENT bedeutet einfach, dass der Zeitrahmen des Charts verwendet wird, an den du den Expert Advisor anfügst. Du könntest theoretisch einen anderen Zeitrahmen für deine Berechnungen verwenden, wenn du das wünschst; hier kannst du die Einstellung ändern.
  • inIndyPeriods = 14 - Durchschnittsperiode für Index- und ATR-Berechnungen. Der Average True Range (ATR) wird verwendet, um einen dynamischen Stop-Loss oder Take-Profit in weiteren Eingabeoptionen unten festzulegen.
  • IndyAppPrice = PRICE_CLOSE - Angelegter Preis für den Index, falls nötig.
  • SL_TP_Dynamic_invalidates_static_values - Einfach ein Platzhalter, um die Stop-Loss- und Take-Profit-Parameter von anderen Eingaben zu trennen.
  • iStoploss = 1000 - Statischer Stop-Loss-Wert in Punkten. Stop-Loss-Werte sind in Punkten angegeben, was die kleinste Bewegungseinheit in deinem Terminal ist.
  • iTakeprofit = 2000 - Statischer Take-Profit-Wert in Punkten. Take-Profit-Werte sind ebenfalls in Punkten angegeben.
  • input inDynamic = true - Dynamische Stop-Loss und Take-Profit basierend auf ATR-Multiplikator verwenden? Wenn du den dynamischen Stop-Loss und Take-Profit aktivierst, werden diese anstelle des statischen Stop-Loss oder Take-Profit verwendet. Dynamische Einstellungen können attraktiv sein, weil sie sich an das Marktverhalten anpassen können. Da der ATR größer ist, wenn es mehr Bewegung gibt, würde die Verwendung dynamischer Einstellungen zu größeren Stop-Loss- und Take-Profit-Werten führen, wenn der Markt schnell ist, und zu engeren Einstellungen, wenn der Markt langsamer geworden ist.
  • inStoplossMultiple = 2 - Dynamischer SL = X * ATR (Durchschnittsperiode). Der Stop-Loss wird der Wert sein, den du hier angibst, multipliziert mit dem Average True Range (ATR) unter Verwendung der in der inIndyPeriods-Eingabe festgelegten Perioden.
  • inTakeProfitMultiple = 7 - Dynamischer TP = X * ATR (Durchschnittsperiode). Der Take-Profit wird der Wert sein, den du hier angibst, multipliziert mit dem Average True Range (ATR) unter Verwendung der in der inIndyPeriods-Eingabe festgelegten Perioden.
  • Break_Even_Settings - Der Puffer muss kleiner als der Trigger sein. Ein Separator für die Break-Even-Einstellungen. Es funktioniert so: Wenn die Punkte im Gewinn den Triggerbetrag überschreiten, wird der Stop-Loss auf Break Even verschoben. Wenn du eine Puffer-Einstellung hast, wird der Stop-Loss auf Break Even + Puffer verschoben, um den Pufferbetrag des Gewinns zu sichern.
  • bUseBreakEven = true - Break Even (BE) verwenden. Schalte die Verwendung von Break Even ein oder aus.
  • inTrigger = 200 - Wenn BE = [true], setze Punkte im Gewinn für den Trigger. Wenn der Trade diese Anzahl an Punkten im Gewinn erreicht, wird der Stop-Loss auf Break Even verschoben.
  • inPadding = 100 - Pufferpunkte, die zu BE hinzugefügt werden müssen, müssen kleiner als der Trigger sein. Dies ist eine Anzahl von Gewinnpunkten, die du sichern möchtest, wenn du auf Break Even wechselst; dieser Betrag muss geringer als der Trigger sein.

Wie selbstoptimiert dieser Roboter? Hier ist das Geheimnis: Der Roboter testet jede Variable im Indexindikator zweimal. Wenn ein Indikator beispielsweise hundert mögliche Werte hat, nimmt er jeden Wert und versucht, bei diesem Wert einen Trade zu tätigen, indem er auf eine bestimmte Anzahl von Bars zurückblickt (optimizingPeriods). Dann bewertet er diesen Wert danach, wie viel Geld er bei einem Trade zu diesem Wert gewonnen oder verloren hätte. Es ist etwas komplexer, aber du liest das hier, um mehr Details zu erfahren, also hier ist es:

Die Vorgaben sind, dass beim Überschreiten des überkauften Wertes von oben eine Verkaufsorder erteilt wird, und eine Kauforder erteilt wird, wenn ein Indikator von unterhalb eines überverkauften Wertes auf über einen überverkauften Wert steigt. Wenn beispielsweise der überkaufte Wert auf 80 gesetzt wurde und der Wert deines Indikators in der vorletzten Kerze 85 betrug, während der Wert des Indikators in der letzten Kerze 79 betrug, würde eine Verkaufsorder erteilt. 85 → 79 kreuzt 80 nach unten, Verkaufsorder erteilt. Wenn überverkauft = 23, würde 19 → 27 nach oben eine Kauforder erzeugen.

Dieser Roboter nimmt jeden Wert für den Indikator zwischen dem IndicatorTopValue und dem IndicatorBottomValue und führt einen Test durch, genauer gesagt zwei Tests. Er führt einen Kauf- und Verkaufstest für jeden Wert durch. Wenn der Höchstwert 100 beträgt, nimmt er diesen Höchstwert und testet ihn anhand der optimizingPeriods, sagen wir, das sind 144 Perioden. Er würde also prüfen, ob der Kauf bei 100 und der Verkauf bei 100 in den letzten 144 Perioden profitabel gewesen wäre. Wenn es profitabel ist, behält es diesen Geldbetrag.

Unter Berücksichtigung der Anzahl der Perioden, die du zurücktestest, könnte es mehrere Gelegenheiten gegeben haben, während des Backtests mehrfach zu kaufen. Wenn es den Take-Profit erreicht, bevor es den Stop-Loss erreicht, hätte es ein profitables Ergebnis; wenn es den Stop-Loss erreicht, bevor es den Take-Profit erreicht, hat es ein negatives Ergebnis. Nach dem Testen aller Perioden in den optimizingPeriods addiert er alle profitablen Ergebnisse mit allen Verlusten, um einen Geldwert zu behalten. Dann geht der Indikator zum nächsten niedrigeren Indikatorwert über und testet ihn auf Rentabilität.

Nachdem alle Werte getestet wurden, wählt er den Wert mit dem höchsten Geldbetrag aus und bestimmt ihn als optimalen Kaufwert. Als nächstes führt er ähnliche Prüfungen für den Verkaufswert durch. Wenn dies abgeschlossen ist, vergleicht er den besten Kaufwert mit dem besten Verkaufswert und sucht nach einem Trade, der der beste von allen ist. Angenommen, nach der Durchführung dieser Optimierung stellt er fest, dass der beste Kauf bei 65 liegt, weil ein Kauf bei 65 den meisten Gewinn für Käufe generiert hat, sagen wir $329 im Backtesting, dann würde er den Wert für den besten Verkauf prüfen, und wenn der beste Verkauf 32 mit einem Gewinn von $530 war, würde der Roboter nach einem Verkaufstrade suchen, wenn der Indikator die 32er-Marke überschreitet, weil der Verkauf profitabler ist als der Kauf gemäß den erzielten Gewinnen im Backtest.


Zukunftsideen zur Erweiterung

  • Mehrere Währungspaare gleichzeitig traden, möglicherweise gefiltert nach Spreads.
  • Selbstlernen, wobei er aus seinen eigenen Trades lernt, was am besten ist.
  • Backtesting könnte auch eine Forward-Testing-Komponente beinhalten.
  • Mehr Indikatoren zur Auswahl.

Bitte hinterlasse deine Vorschläge und Kommentare, und vergiss nicht, zu bewerten!

Jetzt im MetaTrader-Marktplatz verfügbar: https://www.mql5.com/en/market/product/26332


Aktualisiert mit fehlenden Klammern in den Zeilen 137-142, um den in den Kommentaren festgestellten Fehler zu beheben.

연관 포스트

댓글 (0)