I 3 Metodi di Esportazione: Dal Semplice al Professionale
La scelta del metodo dipende da cosa devi esportare e con quale frequenza. Se ti serve un’esportazione occasionale del report di un backtest, il metodo nativo MT5 (Metodo 1) è sufficiente. Se devi esportare i dati OHLCV storici di uno strumento per analisi statistica, il metodo CSV nativo (Metodo 2) è più rapido. Se hai bisogno di esportare automaticamente i risultati dei trade live o backtest con campi personalizzati come gli R-multipli, serve lo script MQL5 (Metodo 3) — quello che uso per Oracle.
Script MQL5 Completo per Esportazione Trade
//+------------------------------------------------------------------+ // ExportTrades.mq5 — Export storia trade in CSV per Excel | // Manuel Trotta — MTInvestments — P.IVA 14349331000 | //+------------------------------------------------------------------+ #property script_show_inputs input datetime InpFrom = D'2024.01.01'; // Data inizio input datetime InpTo = D'2026.12.31'; // Data fine input string InpFile = "oracle_trades.csv"; void OnStart() { // Carica storia nell'intervallo if(!HistorySelect(InpFrom, InpTo)) { Print("HistorySelect fallito"); return; } // Apri file CSV in scrittura int fh = FileOpen(InpFile, FILE_WRITE | FILE_CSV | FILE_ANSI, ";"); // separatore ; per Excel IT if(fh == INVALID_HANDLE) { Print("FileOpen fallito: ", GetLastError()); return; } // ── Header CSV ────────────────────────────────────── FileWrite(fh, "Ticket", "Data", "Simbolo", "Tipo", "Volume", "Prezzo_Entry", "Prezzo_Exit", "SL", "TP", "Profitto_USD", "Durata_Minuti", "R_Multiplo"); // ── Ciclo sui deal ────────────────────────────────── int total = (int)HistoryDealsTotal(); int count = 0; for(int i = 0; i < total; i++) { ulong ticket = HistoryDealGetTicket(i); if(ticket == 0) continue; // Solo deal di uscita (DEAL_ENTRY_OUT) long entry = HistoryDealGetInteger(ticket, DEAL_ENTRY); if(entry != DEAL_ENTRY_OUT) continue; string sym = HistoryDealGetString(ticket, DEAL_SYMBOL); double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT); double vol = HistoryDealGetDouble(ticket, DEAL_VOLUME); double price = HistoryDealGetDouble(ticket, DEAL_PRICE); datetime t = (datetime)HistoryDealGetInteger(ticket, DEAL_TIME); long dtype = HistoryDealGetInteger(ticket, DEAL_TYPE); // Calcolo R-multiplo: profit / (SL_pips * pip_value * volume) // (semplificato — usa SL dell'ordine corrispondente) double rMultiple = profit / (400.0 * vol); // SL fisso 400 punti demo FileWrite(fh, ticket, TimeToString(t, TIME_DATE|TIME_MINUTES), sym, (dtype == DEAL_TYPE_BUY) ? "BUY" : "SELL", vol, price, price, // exit price (deal di uscita) 0, // SL storico — recupera da HistoryOrders 0, // TP storico profit, 0, // durata minuti da calcolare rMultiple); count++; } FileClose(fh); PrintFormat("Esportati %d trade in %s", count, InpFile); PrintFormat("File in: %s\\MQL5\\Files\\%s", TerminalInfoString(TERMINAL_DATA_PATH), InpFile); }
Analisi Statistica in Excel sui Dati MT5 Esportati
Una volta importato il CSV in Excel, l’analisi statistica fondamentale richiede queste colonne calcolate:
- R-multiplo: =Profitto_USD / (SL_pip * PipValue * Volume). Normalizza ogni trade rispetto al rischio assunto — permette di confrontare trade su simboli e dimensioni diverse.
- Win/Loss flag: =SE(R_Multiplo>0;"WIN";"LOSS"). Base per il calcolo del Win Rate con COUNTIF.
- Profit Factor rolling: =SUMIF(range_flag;"WIN";range_R) / ABS(SUMIF(range_flag;"LOSS";range_R)). Calcola il PF su qualsiasi finestra selezionata.
- Drawdown progressivo: Colonna cumulativa della curva dei rendimenti in R, poi calcolo del MAX DD con formula array.
- t-Statistic: =MEDIA(R_col)/DEV.ST(R_col)*RADQ(CONTA.VALORI(R_col)). Verifica la significatività statistica dell’edge.
I 65.587 trade di Oracle sono stati analizzati in Excel per 19 anni. Non per nostalgia — perché Excel con pivot table e grafici XY è ancora lo strumento più rapido per identificare pattern stagionali, degradi di performance per sessione, e deviazioni dalla curva storica. MT5 calcola, Excel analizza. — Manuel Trotta, Fondatore MTInvestments
L’analisi statistica completa richiede meno di 10 minuti in Excel con il template giusto.
Il CSV Oracle include: Ticket, Data, Ora, Simbolo, Timeframe, Tipo (BUY/SELL), Volume, Entry, Exit, SL, TP, Profitto_USD, R_Multiplo, Score_Oracle. La colonna Score_Oracle (valore 0–100 del segnale al momento dell’entrata) è la più preziosa: permette di analizzare come la performance varia per fascia di punteggio — confermando che i segnali sopra 70 hanno PF 1.87 vs 1.21 dei segnali tra 50 e 70.
Questa analisi è possibile solo se il punteggio viene salvato al momento del segnale — non è recuperabile in retrospettiva. Oracle salva questo dato tramite GlobalVariables scritte dall’indicatore e lette dallo script di esportazione.
Vedi l’Analisi Oracle dal Vivo
Live gratuite: iscriviti alla prossima. Statistiche reali, CSV reale, analisi in tempo reale.
ENTRA ALLA LIVE GRATUITA → TRADING CON EXCEL: GUIDA →FAQ — Esportare Dati MT5 in Excel
FileWrite(fh, ..., StringFormat("%.5f", value)) con virgola decimale per compatibilità diretta con Excel italiano.HistorySelect(from, to) poi loop su HistoryDealsTotal() e HistoryDealGetTicket(i) per leggere ogni campo con HistoryDealGetDouble/GetInteger/GetString(). Il metodo automatizzato è l’unico che permette di aggiungere colonne calcolate (R-multiplo, score, regime di mercato) durante l’esportazione.