Guarda come scaricare robot di trading gratuitamente
Ci trovi su Telegram!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Script

TransactionCostCollector — Script per l'analisi dei costi del broker - script per MetaTrader 5

Patrick Murimi Njoroge
Patrick Murimi Njoroge
Quantitative researcher building production-grade ML pipelines for MetaTrader 5.
Author of the "MetaTrader 5 Machine Learning Blueprint" (20+ parts) and
"Feature Engineering for ML" series on MQL5 Community — the most comprehensive
| Italian English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Visualizzazioni:
56
Valutazioni:
(2)
Pubblicato:
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

I flussi di lavoro di etichettatura a tripla barriera utilizzano spesso una costante arbitraria (0,5–1,0%) o un’ipotesi di spread tradizionale come soglia min_ret. Una soglia impostata al di sotto del costo effettivo di transazione round-trip fa sì che il flusso di lavoro etichetti il rumore determinato dai costi come segnale negoziabile. Il set di dati etichettato sovrastima quindi sistematicamente l’edge, e qualsiasi modello addestrato su tali etichette va incontro a un overfitting rispetto a un artefatto dello schema di etichettatura piuttosto che alla struttura reale del mercato.

TransactionCostCollector.mq5 è uno script autonomo che risolve la fase di raccolta dati relativa a questo problema. Campiona la distribuzione storica dello spread, legge i tassi di swap del broker e i dati diagnostici sulle commissioni relativi al simbolo del grafico associato, ed esporta il tutto in un file CSV strutturato. Il file CSV viene utilizzato dalla classe Python associata TransactionCostModel, che converte tutti i costi in rendimenti frazionari e calcola la soglia min_ret specifica per lo strumento per la vostra chiamata di etichettatura.

Risultati del raccoglitore dei costi di transazione

Illustrazione a tre pannelli dell’output di TransactionCostCollector: ripartizione dei costi intraday per sessione (a), distribuzione completa dei costi (b) e curva dei percentili per la selezione di min_ret (c)

Cosa raccoglie lo script

Lo script raccoglie tre componenti di costo per un singolo simbolo in un’unica esecuzione:

  • Spread — distribuzione storica ottenuta da CopySpread() sul numero di barre richiesto. Riportata come media, deviazione standard e percentili (p25, p50, p75, p90, p95, p99), tutti in pip. Calcolata anche per ora UTC del giorno per evidenziare gli effetti della sessione.
  • Swap — tassi di swap overnight long e short letti direttamente da SYMBOL_SWAP_LONG / SYMBOL_SWAP_SHORT, inclusi la modalità di swap (punti, valuta, interessi) e il giorno della settimana in cui viene addebitato lo swap triplo.
  • Commissione — solo a scopo diagnostico. MQL5 non espone la commissione per lotto come chiamata API diretta su tutti i broker. Lo script registra ACCOUNT_COMMISSION_BLOCKED e una nota che spiega come ricavare il tasso per lotto da una singola operazione di riferimento.

Parametri di input

Parametro Valore predefinito Descrizione
InpBars 50000 Numero di barre della cronologia degli spread da campionare. Un valore più elevato produce una distribuzione più rappresentativa e cattura una maggiore variazione della sessione. 50.000 barre su H1 coprono circa 5,7 anni; su M15 coprono circa 1,4 anni. Ridurre il valore se il terminale dispone di una cronologia limitata per il simbolo.
InpOutputFile (vuoto) Sovrascrive il nome del file di output. Se lasciato vuoto (impostazione predefinita), il file viene denominato <SYMBOL>_costs.csv — ad esempio, EURUSD_costs.csv per l’EURUSD. Il file viene salvato nella cartella MQL5\Files\ all’interno della cartella dati del terminale (modalitàFILE_WRITE | FILE_CSV ).

Formato di output CSV

Il CSV utilizza una struttura a quattro colonne: sezione, chiave, valore, unità. Le sezioni sono:

  • symbol_properties — dimensione del punto, fattore pip, valore del tick, dimensione del contratto, identificatori di valuta.
  • swap — tassi long/short, modalità swap, giorni feriali con triplo swap.
  • commission — valore diagnostico e nota di derivazione.
  • spread_summary — media, deviazione standard e percentili su tutte le barre campionate.
  • spread_by_hour — spread medio (pip) per ogni ora del giorno, una riga per ora (UTC, ora del broker).

Come eseguire

  1. Inserire TransactionCostCollector.mq5 nella cartella MQL5\Scripts\Downloads\ e compilarlo in MetaEditor.
  2. Apri un grafico del simbolo di interesse su un qualsiasi timeframe. Il timeframe determina il tipo di barra da cui viene campionata la distribuzione dello spread: si consiglia H1 come compromesso ragionevole tra granularità e lunghezza della cronologia.
  3. Trascinare lo script sul grafico. Apparirà la finestra di dialogo di input (controllata dalla proprietà #property script_show_inputs). Impostare InpBars sul numero di campioni desiderato e fare clic su OK.
  4. Recupera il file CSV di output dalla cartella MQL5\Files\ nella cartella dei dati del terminale (File → Apri cartella dati in MetaTrader 5).

Integrazione con Python

La classe Python associata TransactionCostModel carica il file CSV e calcola min_ret per l’etichettatura a tripla barriera:

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",   # conservatore
    slippage_pips      = 0.4,
    commission_per_lot = 7.0,          # da transazione di riferimento
    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 volte il punto di pareggio
)
print(f"min_ret = {min_ret:.6f}")

Note sulle commissioni

Il tasso di commissione per lotto non può essere letto a livello di programmazione su tutti i broker. La procedura consigliata è la seguente: aprire un’operazione di riferimento di esattamente 1,0 lotto standard su un conto demo, leggere ACCOUNT_COMMISSION_BLOCKED dal terminale immediatamente dopo l’apertura dell’operazione, quindi chiudere l’operazione. Il valore bloccato diviso per 1,0 fornisce l’aliquota per lotto. Verificare confrontando con l’estratto conto. Questa operazione deve essere eseguita una volta per ogni rapporto con il broker.

Perché il p95 e non la media

Lo spread medio è influenzato dai periodi di calma: la sessione asiatica, il consolidamento notturno e le condizioni di trend ordinato. Le entrate nella strategia, tuttavia, spesso coincidono con i momenti di massima incertezza (ovvero quando i modelli generano segnali). L’utilizzo dello spread al 95° percentile come input per min_ret tiene conto del contesto dei costi in condizioni di ingresso tipiche piuttosto che in condizioni di mercato medie.

Riferimenti e articolo correlato

Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/73173

Institutional Harmonic Volumetric Gravity Center Institutional Harmonic Volumetric Gravity Center

Un motore quantitativo di densità di volume che utilizza il concetto matematico della media armonica ponderata per eliminare i valori anomali aritmetici e individuare il vero centro di gravità della liquidità istituzionale.

Close Profit Positions Close Profit Positions

Chiudere le posizioni in profitto

Heiken ashi as series Heiken ashi as series

Heiken Ashi con tutti i buffer impostati come serie

SetSLByLoss - set Stop Loss on all open positions by target loss amount SetSLByLoss - set Stop Loss on all open positions by target loss amount

Script per impostare lo Stop Loss su ogni posizione aperta in base a una perdita target espressa nella valuta del conto (ad es. 50 $ per posizione). Funziona con qualsiasi valuta di deposito e qualsiasi simbolo forex. Verifica i livelli di stop e di congelamento del broker. La conversione valutaria viene gestita automaticamente.