Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

CSetupLedger: a per-setup win rate ledger for Expert Advisors - Bibliothek für den MetaTrader 5

Ali Akbar
Ali Akbar
  • MQL5 Developer & Algorithmic Trading Specialist in  Freelance
  • Pakistan
  • 1612
Hi, I'm Ali. 24 years old, trading for around 5 years, and developing MQL5/MQL4 tools. I mainly work on automating manual strategies, fixing broken EA logic, and building clean indicators. I care more about clean architecture and proper risk management than over-complicated code. Always down to talk
| German English Русский 中文 Español 日本語 Português 한국어 Français Italiano Türkçe
Ansichten:
6
Rating:
(1)
Veröffentlicht:
MQL5 Freelance Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Warum ich es geschrieben habe

Mein Scalper handelt zwei Setups: einen bullischen Orderblock und dessen bärisches Spiegelbild. Der Strategietester lieferte mir für beide denselben Profitfaktor. Ich habe zwei Wochen damit verbracht, die Parameter so anzupassen, dass sie für jedes Setup gleichermaßen gelten.

Dann habe ich die Trades nach Setup-Typ aufgeschlüsselt. Auf USDCAD M1 hatte die bullische Seite 88 Prozent des Verlusts verursacht. Die bärische Seite war nahezu ausgeglichen. Die Zahl, die ich brauchte, stand die ganze Zeit in meiner eigenen Handelshistorie. Ich hatte nur keine Möglichkeit, sie zu erkennen.

Dieser Kurs zeigt, wie man sie liest.

Was sie Ihnen bietet

Sie registrieren Ihre Setup-Typen einmalig beim Start. Jeder Typ erhält eine ID zurück. Diese ID wird Ihrer Magic-Number-Basis hinzugefügt, sodass jede Bestellung ab dem Zeitpunkt ihrer Übermittlung ihr eigenes Setup-Tag trägt.

Danach beantwortet das Ledger für jede Konfiguration drei Fragen: Wie viele Gewinne und Verluste gab es? Wie hoch war das Nettoergebnis nach Swap und Provision? Und hat die Gewinnquote bereits Vertrauen gewonnen?

Diese letzte Frage ist der Grund, warum ich das hier entwickelt habe. Drei Gewinne aus drei Trades entsprechen einer Gewinnquote von 100 Prozent. Das ist auch das Ergebnis, das eine Münze, die in 44 Prozent der Fälle „Kopf“ zeigt, etwa einmal bei zwölf Versuchen erreicht. Daher gibt die Klasse neben der Rohquote eine untere Wilson-Score-Grenze aus und vergleicht diese mit der Gewinnquote, bei der sich die Investition amortisiert, die Ihr Belohnungsverhältnis erfordert. Bei einem Verhältnis von 1:2 liegt diese Schwelle bei 33,3 Prozent. Ein Setup gilt erst dann als vertrauenswürdig, wenn selbst seine pessimistische Gewinnquote diese Schwelle überschreitet. Zu Beginn wird alles als „noch nicht vertrauenswürdig“ eingestuft. Das ist die ehrliche Antwort, wenn man erst zwanzig Trades hinter sich hat.

Anwendung

#include <CSetupLedger.mqh>

CSetupLedger ledger;
int SETUP_BULL, SETUP_BEAR;

int OnInit()
  {
   ledger.Init(552001);                          // Deine magische Basis
   SETUP_BULL = ledger.Register("Bullish OB");   // ID 0 -> Magie 552001
   SETUP_BEAR = ledger.Register("Bearish OB");   // ID 1 -> Magie 552002

   ledger.RebuildFromHistory();                  // den Datensatz aus dem Konto auslesen
   Print(ledger.Report(2.0));                    // 2,0 = Risiko-Ertrags-Verhältnis
   return INIT_SUCCEEDED;
  }

Weisen Sie dem Trade das Setup zu, bevor die Order ausgeführt wird.

trade.SetExpertMagicNumber((ulong)ledger.MagicFor(SETUP_BULL));

Schließen Sie die Position, sobald sie geschlossen ist.

double net = 0.0;
if(ledger.ProcessClosedPosition(posId, setupId, net))
   Print(ledger.Report(2.0));

Report() gibt einen Textblock zurück . Es funktioniert wie ein Print () und wie ein Comment () . Hier ist ein echter Lauf von mir auf USDCAD M1.

Per-setup ledger  (breakeven win rate at 1:2.0 = 33.3%)
---------------------------------------------------------------------
Bullish OB         235/529  raw  30.8%  wilson  27.6%  net  -5819.94  not yet trusted
Bearish OB         191/393  raw  32.7%  wilson  29.0%  net   -811.42  not yet trusted

Derselbe Bericht, der an Comment () übergeben wird, wird während der Ausführung des EAs in der Ecke des Charts angezeigt . Das Feld auf dem Balken ist die Einstiegsbezeichnung. Es erfasst, wie die Bilanz dieses Setups vor dem Handel aussah. Hier zeigt das Feld 4 Gewinne und 6 Verluste an. Die Rohquote beträgt 40 Prozent. Die untere Wilson-Grenze liegt bei 16,8 Prozent. Bei zehn Trades lautet das Urteil also weiterhin „noch nicht vertrauenswürdig“, was ja genau der Sinn dieser Spalte ist.

Die Zahlen geben die Gewinne im Verhältnis zu den Verlusten an. Das sind also 764 Trades beim bullischen Setup und 584 beim bärischen. Beide Salden ergeben zusammen den Nettoverlust des Testers auf den Cent genau. Führen Sie diese Abstimmung anhand Ihrer eigenen Ausgabe durch, bevor Sie irgendeinem Konto, einschließlich diesem, vertrauen. Wenn die Trades pro Setup nicht mit der Handelsanzahl des Testers übereinstimmen, werden Positionen falsch gezählt, und jeder Prozentsatz oberhalb dieser Linie ist wertlos.

Drei Fallstricke, die das Programm für Sie abfängt

In handschriftlichen Versionen dieser Berechnung werden diese Punkte üblicherweise falsch dargestellt. Ich selbst habe zwei davon falsch verstanden, bevor es diesen Kurs gab.

Geschäfte sind keine Trades. Der MT5-Verlauf ist eine Liste von Geschäften. Eine in drei Teilen geschlossene Position erzeugt drei OUT-Geschäfte. Durchlaufen Sie die Geschäfte und zählen Sie jedes gewinnbringende als einen Gewinn – so wird aus einem einzigen gewinnbringenden Trade drei Gewinne. Das Hauptbuch aggregiert nach DEAL_POSITION_ID , sodass eine Teilschließung immer noch einmal zählt.

DEAL_PROFIT ist nicht das Endergebnis. Swap und Provision werden in eigenen Feldern erfasst. Bei einem Swing-EA ist dieser Unterschied nur kosmetischer Natur. Bei einem Scalper entscheidet er jedoch darüber, ob das Setup überhaupt Gewinn gebracht hat. Ein Trade, der eine Kursbewegung von 3 USD erzielte und 4 USD an Provisionen kostete, ist ein Verlust. Das Hauptbuch summiert Gewinn plus Swap plus Provisionen.

POSITION_TICKET ist nicht POSITION_IDENTIFIER . HistorySelectByPosition () benötigt die Kennung. Bei einem Netting-Konto haben beide meist denselben Wert, sodass der Fehler unsichtbar bleibt, bis ein Hedging-Konto oder eine Teilschließung sie voneinander trennt. Dann liefert die Auswahl keine Ergebnisse und gibt keine Rückmeldung.

Die eine Regel, die Sie nicht brechen dürfen

Die Registrierungsreihenfolge ist ein Datenformat. Die Setup-ID existiert nirgendwo außer in den magischen Zahlen bereits abgeschlossener Trades. Fügen Sie nächsten Monat ein neues Setup in die Mitte der Liste ein, und jeder historische Trade des Setups, das zuvor diese ID hatte, wird stillschweigend zu einem Trade des neuen Setups. Es wird kein Fehler ausgegeben. Die Zahlen sind von da an einfach falsch.

Neue Setups kommen ans Ende der Liste. Wenn du ein Setup aus dem Verkehr ziehst, lass den Aufruf von `Register ()` an seiner Stelle stehen, damit die ID weiterhin belegt bleibt. Ein kurzer Kommentar oberhalb des Registrierungsblocks, der dies erklärt, hat durchaus seine Berechtigung.

Was es nicht tut

Es wird pro Position nur ein Datensatz geführt. Ein EA, der einen zweiten Einstieg in dieselbe Netting-Position stapelt, schreibt das gesamte Geschäft dem ersten Setup gut. Wenn Ihr EA dies tut, benötigt er stattdessen ein Modell, das pro Geschäft abrechnet.

Sechzehn Setups sind die Obergrenze. Erhöhen Sie SETUP_LEDGER_MAX , wenn Sie mehr benötigen. Sechzehn Setups auf einem Konto bedeuten auch sechzehn kleine Stichproben, und die Wilson-Spalte wird Sie darauf hinweisen.

Ein Nettoergebnis von genau null gilt als Verlust. Nullsummengeschäfte sind selten, und sie als Gewinne zu behandeln, ist der schmeichelhaftere Fehler.

ProcessClosedPosition() ersetzt die globale Historieauswahl, da es HistorySelectByPosition () aufruft. Rufen Sie diese Funktion nicht mitten in Ihrer eigenen Historie-Schleife auf, ohne anschließend die Auswahl erneut vorzunehmen.

Außerdem bewertet es eher Ihre Ausstiegspunkte als Ihre Handelsidee. Ein Setup, das die Richtung zwar richtig erkennt, aber den Stop schlecht platziert, wird als schlechtes Setup gewertet. Für die Entscheidung, was Sie morgen handeln sollen, ist das wohl die richtige Antwort. Es ist jedoch nicht dasselbe wie die Beurteilung, ob die Idee fundiert war.

Anforderungen

MetaTrader 5. Keine Abhängigkeiten über die Standardbibliothek hinaus. Legen Sie die Datei im Ordner „MQL5/Include/“ ab und binden Sie sie ein. Geschrieben und getestet mit Build 6190.

Noch eine Anmerkung: Ein auf einem einzelnen In-Sample-Backtest basierendes Ledger dient lediglich der Auswertung dieses Backtests. Es validiert keine Strategie. Out-of-Sample-Tests für einen Zeitraum, den Sie nie optimiert haben, sind eine separate Aufgabe, und diese Klasse ersetzt diese nicht.

— Ali Rajput


Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/77531

Session Candle Counter: candles numbered from the cash open, DST aware Session Candle Counter: candles numbered from the cash open, DST aware

Die Nummerierung erfolgt für jede Kerze des aktuellen Handelstages, beginnend mit der Eröffnung an den Börsen in Frankfurt, London, New York oder Tokio. Der Anker wird von der Ortszeit der Börse in die Serverzeit des Brokers umgerechnet, wobei die Sommerzeit automatisch berücksichtigt wird, sodass die erste Kerze nach der Eröffnung sowohl im Sommer als auch im Winter immer die Nummer eins ist.

RiskGuard Lite - Percent-Risk EMA/ATR EA RiskGuard Lite - Percent-Risk EMA/ATR EA

Lern-EA für MT5: Einstiegssignale durch EMA-Crossover bei geschlossenen Kerzen, ATR-basierte Stop-Loss- und Take-Profit-Werte, Lotgröße als fester Prozentsatz des Eigenkapitals über OrderCalcProfit, Spread-Filter, Isolierung von Magic Numbers und Überprüfung der Server-Rückgabecodes. Eine übersichtliche Vorlage zur Erstellung von EAs mit Risikokontrolle. Keine Gewinnversprechen.

Accumulation/Distribution Accumulation/Distribution

Der Accumulation/Distribution Indikator wird aus Änderung von Preis und Volumen bestimmt.

Accelerator Oszillator (AC) Accelerator Oszillator (AC)

Der Acceleration/Deceleration Indikator (AC) misst die Beschleunigung und Verlangsamung des aktuellen Marktimpulses, der Kraft der Kursbewegung.