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
TransactionCostCollector – Skript zur Ermittlung der Broker-Kosten - Skript für den MetaTrader 5
- Ansichten:
- 23
- Veröffentlicht:
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Pipelines zur Kennzeichnung mit dreifacher Barriere verwenden häufig eine willkürliche Konstante (0,5–1,0 %) oder eine veraltete Spread-Annahme als „min_ret“-Schwellenwert. Ein Schwellenwert, der unter den tatsächlichen Round-Trip-Transaktionskosten liegt, führt dazu, dass die Pipeline kostenbedingtes Rauschen als handelbares Signal kennzeichnet. Der so gekennzeichnete Datensatz überbewertet dann systematisch den „Edge“, und jedes Modell, das auf diesen Kennzeichnungen trainiert wird, passt sich übermäßig an ein Artefakt des Kennzeichnungsschemas an, anstatt an die tatsächliche Marktstruktur.
„TransactionCostCollector.mq5“ ist ein eigenständiges Skript, das den Datenerfassungsschritt dieses Problems löst. Es erstellt Stichproben der historischen Spread-Verteilung, liest die Swap-Sätze und Provisionsdaten des Brokers für das angehängte Chart-Symbol aus und exportiert alles in eine strukturierte CSV-Datei. Die CSV-Datei wird von der zugehörigen Python-Klasse „TransactionCostModel“ verarbeitet, die alle Kosten in fraktionierte Renditen umrechnet und den instrumentspezifischen „min_ret“- Schwellenwert für Ihren Labeling-Aufruf berechnet.

Dreiteilige Darstellung der Ausgabe von „TransactionCostCollector“: Aufschlüsselung der Intraday-Kosten nach Handelssitzung (a), vollständige Kostenverteilung (b) und Perzentilkurve für die „min_ret“-Auswahl (c)
Was das Skript erfasst
Das Skript erfasst in einem Durchlauf drei Kostenkomponenten für ein einzelnes Symbol:
- Spread – historische Verteilung aus „CopySpread()“ über die angeforderte Anzahl von Bars. Ausgewiesen als Mittelwert, Standardabweichung und Perzentile (p25, p50, p75, p90, p95, p99), jeweils in Pips. Wird zudem pro UTC-Stunde des Tages berechnet, um Sitzungseffekte sichtbar zu machen.
- Swap – Long- und Short-Overnight-Swapsätze, die direkt aus SYMBOL_SWAP_LONG / SYMBOL_SWAP_SHORT ausgelesen werden, einschließlich des Swap-Modus (Punkte, Währung, Zinsen) und des Wochentags, an dem ein dreifacher Swap berechnet wird.
- Provision – nur zu Diagnosezwecken. MQL5 stellt die Provision pro Lot nicht bei allen Brokern als direkten API-Aufruf bereit. Das Skript protokolliert „ACCOUNT_COMMISSION_BLOCKED“ sowie einen Hinweis, wie sich der Satz pro Lot aus einem einzelnen Referenzgeschäft ableiten lässt.
Eingabeparameter
| Parameter | Standard | Beschreibung |
|---|---|---|
| InpBars | 50000 | Anzahl der Balken der Spread-Historie, die als Stichprobe herangezogen werden sollen. Ein höherer Wert führt zu einer repräsentativeren Verteilung und erfasst mehr Schwankungen innerhalb einer Handelssitzung. 50.000 Balken auf H1 decken etwa 5,7 Jahre ab; auf M15 decken sie etwa 1,4 Jahre ab. Verringern Sie diesen Wert, wenn das Terminal nur über eine begrenzte Historie für das Symbol verfügt. |
| InpOutputFile | (leer) | Überschreiben Sie den Namen der Ausgabedatei. Wenn das Feld leer ist (Standard), lautet der Dateiname <SYMBOL>_costs.csv – zum Beispiel EURUSD_costs.csv für EURUSD. Die Datei wird im Datenordner des Terminals unter „MQL5\Files\“ gespeichert (ModusFILE_WRITE | FILE_CSV ). |
CSV-Ausgabeformat
Die CSV-Datei verwendet eine vier Spalten umfassende Struktur: Abschnitt, Schlüssel, Wert, Einheit. Die Abschnitte sind:
- symbol_properties – Punktgröße, Pip-Faktor, Tick-Wert, Kontraktgröße, Währungskennungen.
- swap – Long-/Short-Sätze, Swap-Modus, Wochentag mit dreifachem Swap.
- commission – Diagnosewert und Hinweis zur Herleitung.
- spread_summary – Mittelwert, Standardabweichung und Perzentile über alle erfassten Balken.
- spread_by_hour – mittlerer Spread (Pips) für jede Stunde des Tages, eine Zeile pro Stunde (UTC, Broker-Zeit).
Ausführung
- Legen Sie „TransactionCostCollector.mq5“ in Ihrem Ordner „MQL5\Scripts\Downloads\ “ ab und kompilieren Sie die Datei im MetaEditor.
- Öffnen Sie ein Chart des Zielsymbols in einem beliebigen Zeitrahmen. Der Zeitrahmen bestimmt, aus welchem Balkentyp die Spread-Verteilung erfasst wird – H1 wird als sinnvoller Kompromiss zwischen Granularität und Länge der historischen Daten empfohlen.
- Ziehen Sie das Skript auf das Chart. Das Eingabedialogfeld wird angezeigt (gesteuert durch #property script_show_inputs). Stellen Sie „InpBars“ auf die gewünschte Anzahl von Stichproben ein und klicken Sie auf „OK“.
- Rufen Sie die CSV-Ausgabedatei aus dem Ordner „MQL5\Files\“ im Datenordner des Terminals ab (Datei → Datenordner öffnen in MetaTrader 5).
Integration mit Python
Die zugehörige Python-Klasse „TransactionCostModel“ lädt die CSV-Datei und berechnet „min_ret“ für die Triple-Barrier-Kennzeichnung:
from afml.transaction_costs import load_cost_model import pandas as pd model = load_cost_model( csv_path = "EURUSD_costs.csv", spread_percentile = "p95_pips", # konservativ slippage_pips = 0.4, commission_per_lot = 7.0, # aus Referenzgeschäft lot_size = 0.01, ) close = pd.read_parquet("EURUSD_H1.parquet")["close"] min_ret = model.min_ret_for_symbol( price_series = close, holding_days = 1.0, cost_multiplier = 1.5, # 1,5-fache Gewinnschwelle ) print(f"min_ret = {min_ret:.6f}")
Hinweise zur Provision
Der Provisionssatz pro Lot lässt sich nicht bei allen Brokern programmgesteuert auslesen. Die empfohlene Vorgehensweise lautet: Eröffnen Sie einen Referenztrade mit genau 1,0 Standardlot auf einem Demokonto, lesen Sie unmittelbar nach Eröffnung des Trades den Wert „ACCOUNT_COMMISSION_BLOCKED“ aus dem Terminal aus und schließen Sie den Trade anschließend. Der gesperrte Wert geteilt durch 1,0 ergibt den Pro-Lot-Satz. Vergleichen Sie diesen mit dem Kontoauszug. Dies muss einmal pro Broker-Beziehung durchgeführt werden.
Warum p95 und nicht der Mittelwert
Der mittlere Spread wird von ruhigen Phasen dominiert: der asiatischen Handelssitzung, der nächtlichen Konsolidierung und geordneten Trendbedingungen. Strategie-Einstiege fallen jedoch oft mit den Momenten höchster Unsicherheit zusammen (genau dann, wenn Modelle Signale generieren). Die Verwendung des Spreads am 95. Perzentil als „min_ret“-Eingabe berücksichtigt das Kostenumfeld unter typischen Einstiegsbedingungen und nicht unter durchschnittlichen Marktbedingungen.
Literaturhinweise und Begleitartikel
- López de Prado, M. (2018). Advances in Financial Machine Learning, Kapitel 3 (Labels), S. 44–47. Wiley.
- Vollständige Implementierung und Herleitung: MetaTrader 5 Machine Learning Blueprint – Teil 14: Transaktionskostenmodell von Patrick M. Njoroge.
- Die zugehörige Python-Klasse „TransactionCostModel“ sowie Anwendungsbeispiele sind im Download-Paket des Artikels enthalten.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/73173
Institutional Harmonic Volumetric Gravity Center
Ein quantitatives Verfahren zur Berechnung der Volumendichte, das auf dem gewichteten harmonischen Mittelwert basiert, um arithmetische Ausreißer zu eliminieren und den tatsächlichen Schwerpunkt der institutionellen Liquidität zu ermitteln.
Close Profit Positions
Gewinnpositionen schließen
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.