Il mio scalper opera su due configurazioni: un blocco di ordini rialzista e il suo corrispettivo ribassista. Il Strategy Tester mi ha fornito un unico fattore di profitto per entrambe. Ho trascorso due settimane a mettere a punto i parametri applicabili in modo uguale a ciascuna configurazione.
Poi ho suddiviso le operazioni per tipo di configurazione. Sul grafico M1 della coppia USDCAD, il lato rialzista aveva causato l’88% delle perdite. Il lato ribassista era quasi in pareggio. Il dato di cui avevo bisogno era sempre stato presente nella mia cronologia delle operazioni. Semplicemente non avevo modo di interpretarlo.
Questo corso ti insegna a interpretarlo.
È necessario registrare i tipi di configurazione una sola volta all’avvio. A ciascuno viene assegnato un ID. Tale ID viene aggiunto alla base dei numeri magici, in modo che ogni ordine riporti il proprio tag di configurazione dal momento in cui viene inviato.
Successivamente, il registro risponde a tre domande per ogni configurazione: quante vincite e quante perdite; qual è stato il risultato netto al netto dello swap e delle commissioni; e se la percentuale di vincita ha già guadagnato un certo livello di affidabilità.
È proprio per rispondere a quest’ultima domanda che ho creato questo programma. Tre vincite su tre operazioni corrispondono a un tasso di vincita del 100%. È anche il risultato che una moneta che esce testa il 44% delle volte ottiene circa una volta ogni dodici tentativi. Pertanto, la classe stampa un limite inferiore del punteggio di Wilson accanto al tasso grezzo e lo confronta con il tasso di vincita di pareggio richiesto dal proprio rapporto di ricompensa. Con un rapporto di 1:2, tale soglia si attesta al 33,3%. Una configurazione viene considerata affidabile solo quando anche il suo tasso pessimistico supera tale soglia. All’inizio, tutto risulta “non ancora affidabile”. Questa è la risposta onesta quando si hanno venti operazioni.
#include <CSetupLedger.mqh> CSetupLedger ledger; int SETUP_BULL, SETUP_BEAR; int OnInit() { ledger.Init(552001); // la tua base magica SETUP_BULL = ledger.Register("Bullish OB"); // id 0 -> magic 552001 SETUP_BEAR = ledger.Register("Bearish OB"); // id 1 -> magic 552002 ledger.RebuildFromHistory(); // legge il record dall'account Print(ledger.Report(2.0)); // 2,0 = rapporto rischio/rendimento return INIT_SUCCEEDED; }
Applicare la configurazione all’operazione prima che l’ordine venga inviato.
trade.SetExpertMagicNumber((ulong)ledger.MagicFor(SETUP_BULL));Chiudere la posizione una volta che si è chiusa.
double net = 0.0; if(ledger.ProcessClosedPosition(posId, setupId, net)) Print(ledger.Report(2.0));
La funzione Report() restituisce un unico blocco di testo. Funziona come Print () e come Comment (). Ecco un mio esempio reale su 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

Lo stesso report, passato a Comment (), rimane visualizzato nell’angolo del grafico mentre l’EA è in esecuzione. Il riquadro sulla barra è l’etichetta di ingresso. Registra qual era il record di quella configurazione prima che venisse effettuata l’operazione. Qui il pannello riporta 4 vittorie e 6 perdite. Tasso grezzo al 40%. Limite inferiore di Wilson al 16,8%. Quindi, su dieci operazioni, il verdetto recita ancora “non ancora affidabile”, il che è proprio lo scopo della colonna.
I conteggi si riferiscono alle vittorie rispetto alle perdite. Si tratta quindi di 764 operazioni sulla configurazione rialzista e 584 su quella ribassista. Entrambi i saldi netti si sommano alla perdita netta del tester stesso, al centesimo. Eseguite questa riconciliazione sui vostri risultati prima di fidarvi di qualsiasi registro, compreso questo. Se le operazioni per configurazione non corrispondono al conteggio delle operazioni del tester, significa che le posizioni sono state conteggiate in modo errato e ogni percentuale al di sopra di quella linea è priva di valore.
Le versioni scritte a mano di questo strumento di solito commettono questi errori. Io stesso ne ho commessi due prima che esistesse questo corso.
Le operazioni non sono trade. La cronologia di MT5 è un elenco di operazioni. Una posizione chiusa in tre parti produce tre operazioni OUT. Eseguendo un ciclo sulle operazioni e contando ciascuna di quelle redditizie come una vincita, un singolo trade vincente diventa tre vincite. Il registro aggrega in base a DEAL_POSITION_ID , quindi una chiusura parziale conta comunque una sola volta.
DEAL_PROFIT non rappresenta il risultato finale. Lo swap e la commissione sono riportati in campi separati. In un EA swing questa differenza è puramente estetica. In uno scalper, invece, determina se l’operazione ha generato o meno un profitto. Un’operazione che ha guadagnato 3 USD di variazione di prezzo e ha pagato 4 USD di commissione è una perdita. Il registro somma il profitto più lo swap più la commissione.
POSITION_TICKET non è POSITION_IDENTIFIER . La funzione HistorySelectByPosition () richiede l’identificatore. Nella maggior parte dei casi, su un conto di netting, i due valori coincidono, quindi il bug rimane invisibile finché un conto di copertura o una chiusura parziale non li separa. A quel punto, la selezione restituisce un risultato vuoto e non fornisce alcuna informazione.
L’ordine di registrazione è un formato di dati. L’ID della configurazione non risiede da nessuna parte se non all’interno dei numeri magici delle operazioni già chiuse. Se il mese prossimo si inserisce una nuova configurazione nel mezzo dell’elenco, ogni operazione storica della configurazione che in precedenza possedeva quell’ID diventa silenziosamente un’operazione della nuova configurazione. Non viene generato alcun errore. Da quel momento in poi, i numeri sono semplicemente sbagliati.
Le nuove configurazioni vanno inserite alla fine dell’elenco. Se si disattiva una configurazione, lasciare la chiamata a `Register ()` dove si trova, in modo che l’ID rimanga occupato. Un breve commento sopra il blocco di registrazione che lo specifichi è più che utile.
Conserva un unico record per ogni posizione. Un EA che aggiunge un secondo ingresso alla stessa posizione di netting attribuirà l’intero importo alla prima configurazione. Se il tuo EA si comporta in questo modo, ha invece bisogno di un modello basato su singola operazione.
Il limite massimo è di sedici operazioni. Aumenta il valore di SETUP_LEDGER_MAX se ne hai bisogno di più. Sedici operazioni su un unico conto significano anche sedici campioni di piccole dimensioni e la colonna Wilson te lo indicherà.
Un risultato netto pari esattamente a zero viene considerato una perdita. Le operazioni in pareggio sono rare e trattarle come vincite è l’errore più lusinghiero.
La funzione `ProcessClosedPosition()` sostituisce la selezione globale della cronologia poiché richiama `HistorySelectByPosition ()`. Non richiamarla nel mezzo del proprio ciclo di cronologia senza riselezionare successivamente.
Inoltre, misura le uscite piuttosto che l’idea di trading. Un setup che individua correttamente la direzione ma posiziona male lo stop viene valutato come un setup errato. Per decidere cosa negoziare domani, questa è probabilmente la risposta giusta. Non equivale a giudicare se l’idea fosse valida.
MetaTrader 5. Nessuna dipendenza oltre alla libreria standard. Inserisci il file in MQL5/Include/ e includilo. Scritto e testato sulla build 6190.
Un'ultima cosa. Un registro creato su un singolo backtest in-sample misura solo quel backtest. Non convalida una strategia. Il test out-of-sample su un periodo che non è mai stato ottimizzato è un'operazione a sé stante e questa classe non la sostituisce.
— Ali Rajput
Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/77531
Session Candle Counter: candles numbered from the cash open, DST aware
I numeri indicano ogni candela della giornata di negoziazione in corso, a partire dall'apertura del mercato a Francoforte, Londra, New York o Tokyo. Il punto di riferimento viene convertito dall'ora locale della borsa all'ora del server del broker con adeguamento automatico all'ora legale, quindi la prima candela dopo l'apertura è sempre la numero uno, sia d'estate che d'inverno.
Spread Monitor
Spread Monitor is an MQL5 Expert Advisor that draws a colour-coded panel on the chart. The panel shows the current spread of the attached symbol in points, along with the average, minimum, and maximum over a rolling history. It also counts how many stored samples exceeded a warning level, and turns the status row red when the current spread is above that level. The utility does not place orders. Inputs control the warning level, the history size, the refresh interval, and the panel position. Panel objects are removed when the EA is detached.
Line Master – Fast and Slow Trend Lines with Trend Change Signals
Line Master is a trend-following indicator for MetaTrader 5 that displays fast and slow dynamic price lines to help traders identify market direction and potential trend changes. Blue represents a bullish trend, while red represents a bearish trend. Visual markers highlight changes in the indicator's trend state. The indicator includes adjustable Fast Length and Slow Length parameters, allowing traders to customize its sensitivity. It can be used on forex, gold (XAUUSD), indices, and other MT5-supported markets. For better results, combine its signals with price action, support and resistance levels, and proper risk management. Signals are not guaranteed and should be confirmed before entering a trade.
PropGuard Lite - daily and max loss guard for prop firm accounts
Risk tool for prop firm accounts: closes all positions and blocks new trades when the daily loss or max loss limit is reached. Never opens trades on a live chart.