Guarda come scaricare robot di trading gratuitamente
Ci trovi su Twitter!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Visualizzazioni:
33
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

FVG Imbalance Marker Helper FVG Imbalance Marker Helper

A small educational MetaTrader 5 indicator that marks simple three-candle bullish and bearish Fair Value Gaps on the chart.

Confirmed Swing Points Helper Confirmed Swing Points Helper

A small educational MetaTrader 5 indicator that marks confirmed swing highs and lows and labels market structure as HH, HL, LH and LL.

Drawdown DNA Analyzer Drawdown DNA Analyzer

A native MQL5 script that analyzes the structure of an account's drawdowns, not just the single "maximum drawdown" figure. It reads a daily equity curve (Date,DailyPnL CSV), rebuilds the underwater curve, and splits it into individual drawdown episodes with their depth, duration and recovery time. It then reports the Ulcer Index, Pain Index, Recovery Factor and time spent underwater, and combines them into a single resilience score (A+ to F) with recommendations, printed in the Experts tab. No external libraries; if no file is found it generates a sample curve so it runs out of the box.

Profit Concentration Analyzer Profit Concentration Analyzer

A native MQL5 script that measures how concentrated a strategy's profit is — whether the edge is broad or rests on a few lucky trades. It reads a per-trade CSV (Date,Profit) and reports the share of net profit from the largest trades, the Gini coefficient of the winners, a concentration profile, a survival test that removes the best few trades and recomputes net profit and profit factor, and the largest single day versus a configurable consistency limit, combined into a concentration-and-consistency score (A+ to F) with recommendations. If no file is found it generates a sample set, so it runs out of the box. No external libraries, no Python, no AI. The helper ExportTrades.mq5 writes the file from your trade history.