und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
CSetupLedger: a per-setup win rate ledger for Expert Advisors - Bibliothek für den MetaTrader 5
- Ansichten:
- 6
- Rating:
- Veröffentlicht:
-
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
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
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
Der Accumulation/Distribution Indikator wird aus Änderung von Preis und Volumen bestimmt.
Accelerator Oszillator (AC)
Der Acceleration/Deceleration Indikator (AC) misst die Beschleunigung und Verlangsamung des aktuellen Marktimpulses, der Kraft der Kursbewegung.