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
Librerie

CSetupLedger: a per-setup win rate ledger for Expert Advisors - libreria per MetaTrader 5

Ali Akbar
Ali Akbar
  • MQL5 Developer & Algorithmic Trading Specialist al  Freelance
  • Pakistan
  • 2106
Hi, I'm Ali. 24 years old, trading for around 5 years, and developing MQL5/MQL4 tools. I mainly work on automating manual strategies, fixing broken EA logic, and building clean indicators. I care more about clean architecture and proper risk management than over-complicated code. Always down to talk
| Italian English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Visualizzazioni:
11
Valutazioni:
(1)
Pubblicato:
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

Perché l'ho scritto

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.

Cosa ti offre

È 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.

Come utilizzarlo

#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.

Tre insidie che il sistema gestisce per voi

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’unica regola che non devi infrangere

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.

Cosa non farà

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.

Requisiti

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 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

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 – 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 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.