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
Script

Broker Spec Inspector - script per MetaTrader 5

Seckin Erkut
Seckin Erkut
Algo Trading Systems Developer. I develop strategies and portfolios not by hypes but from solid academic literature.

I put my money where my mouth is, be sure to check the performance of my EAs through my signals.
| Italian English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Visualizzazioni:
14
Valutazioni:
(2)
Pubblicato:
Aggiornato:
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance
Ogni trader che utilizza sistemi automatizzati prima o poi si imbatte nell’errore 130, “Stop non validi”, o in un ordine che semplicemente non viene mai eseguito. La reazione più comune è quella di dare la colpa all’EA. Il più delle volte, però, l’EA funziona correttamente ed è il server che sta applicando un limite previsto dal contratto
che non viene mai visualizzato nella finestra del terminale: il livello degli stop, il livello di congelamento o un incremento minimo del lotto che il dimensionamento della posizione non rispetta. Questi limiti variano a seconda del simbolo e del broker e cambiano senza
preavviso. Questo script li visualizza.
Caricalo su qualsiasi grafico. Si limita a leggere le specifiche: non apre, modifica né chiude nulla, e non è necessario abilitare il trading algoritmico. Forniscigli un elenco di simboli separati da virgole oppure lascia il campo di input vuoto e il programma scorrerà la tua selezione in Market Watch.

COSA STAMPA

Per ogni strumento: cifre, punto, dimensione del tick e valore, dimensione del contratto, lotto minimo / incrementale / massimo, spread e se è variabile, modalità di esecuzione, swap long e short, e il margine richiesto per un lotto minimo rapportato al margine libero attuale. Poi la parte che risponde alla domanda vera e propria:

Avviso sui broker

--- XAUUSD (bid 4402.15 / ask 4402.63) ---------------------
stops level 350 pts | freeze level 0 pts | EFFECTIVE band 351 pts
VERDICT: a stop/pending placed 100 pts from price would be REJECTED as 'Invalid price' (band is 351 pts)
buy at ask 4402.63: you asked SL 4401.63 -> nearest legal SL 4399.12 (moved out)
L'ultima riga è quella utile. Non si limita a indicare che uno stop da 100 punti non è applicabile su questo titolo, ma indica il livello esatto che il server accetterebbe al suo posto.
LA REGOLA
Due limiti distinti possono far fallire uno stop, e gli strumenti che ne controllano solo uno forniscono un risultato errato per la metà dei broker:
double MinStopDistance(const string sym)
{
long stops = SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL);
long freeze = SymbolInfoInteger(sym, SYMBOL_TRADE_FREEZE_LEVEL);
long band = (stops > freeze ? stops : freeze) + 1;
return band * SymbolInfoDouble(sym, SYMBOL_POINT);
}

In quelle quattro righe sono racchiuse tre decisioni.
Il limite "band" è il più ALTO tra i due, poiché alcuni server mantengono il freeze a zero e impongono gli stop, mentre altri fanno il contrario. Scegliendo il valore più alto si coprono entrambe le eventualità senza dover sapere su quale tipo di server ci si trova.
Viene aggiunto un punto, poiché un livello che si trova esattamente al limite della fascia viene ancora rifiutato da molti server. La regola documentata è «più vicino di», quella implementata è spesso «più vicino di o uguale a», e un punto non costa nulla.
Il risultato viene restituito in unità PRICE, non in punti. È proprio ciò di cui hai bisogno quando definisci il livello di stop effettivo, e questo elimina la confusione tra punti e pip che causa un errore di un fattore dieci sui simboli a 5 cifre.
UTILIZZALO NEL TUO EA
La seconda funzione è quella che vale la pena copiare. Accetta lo stop desiderato e restituisce quello più vicino che il server accetterà, sul lato corretto del prezzo:
double LegalStopLoss(const string sym, const bool isBuy,
const double price, const double wanted)
{
double dist = MinStopDistance(sym);
int digits = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS);
double sl = wanted;
if(isBuy) { if(price - sl < dist) sl = price - dist; }
else { if(sl - price < dist) sl = price + dist; }
return NormalizeDouble(sl, digits);
}

Una fermata che è già legale viene riportata senza modifiche, quindi è sicuro far passare tutte le fermate attraverso di essa. Per includere il calcolo esistente basta una riga:
double sl = LegalStopLoss(_Symbol, true, ask, ask - atr * 1.5);
Questo aspetto assume particolare rilevanza quando la volatilità è elevata rispetto alla banda. Uno stop ATR che risulta adeguato per l’EURUSD può rientrare all’interno della banda sull’oro o su un indice durante una sessione tranquilla – proprio nel momento in cui il rifiuto ti coglie di sorpresa, perché lo stesso codice aveva funzionato il giorno prima.

NOTE SULLA LETTURA DEI RISULTATI

Un spread ampio non significa che il broker stia creando difficoltà. Di solito riflette il modo in cui il titolo viene quotato e coperto, ed è il motivo per cui un EA di scalping che funziona su un server smette di funzionare su un altro senza che venga modificata nemmeno una riga di codice.
Confronta prima di effettuare la migrazione. L’esportazione in formato CSV è attiva per impostazione predefinita e salva il file BrokerSpecs.csv nella cartella MQL5\Files, con una riga per ogni simbolo che include la banda, la distanza minima di stop e il livello legale più vicino. Esegui lo script su due broker, affianca i file e le differenze che ti sarebbero costate una settimana di debug saranno visibili in un minuto.
Controlla il margine prima di scalare. La colonna del margine si riferisce a un lotto minimo. Se quel valore è già vicino al tuo margine libero, la dimensione della tua posizione ha un limite massimo che non hai ancora valutato.

I simboli devono essere presenti in Market Watch e devono aver registrato almeno un tick. Se un simbolo non riporta dati relativi ai tick, apri il relativo grafico una volta ed esegui nuovamente la procedura.


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

Risk Guard — risk-based lot size, daily loss lock, max positions, oversized-trade trim, forced stop-loss Risk Guard — risk-based lot size, daily loss lock, max positions, oversized-trade trim, forced stop-loss

Enforces your own risk rules on every position, whether opened by hand or by another EA: shows the lot size that matches your risk, locks the account for the day after a set loss, caps open positions, trims positions that risk more than allowed, and adds a stop-loss to any position opened without one.

Prop-Firm Equity Guard - daily and max drawdown protection (FTMO-style) Prop-Firm Equity Guard - daily and max drawdown protection (FTMO-style)

Strict risk management utility for prop-firm challenges. Automatically monitors your entire account to prevent daily and max drawdown failures. It acts as a safety buffer against spread spikes and revenge trading by instantly closing all positions and pending orders before your evaluation is terminated.

Custom Simple Moving Average Custom Simple Moving Average

Una media mobile adattiva a due stadi (media di base + livellamento secondario) che cambia colore in base alla pendenza e segna con delle frecce i punti di incrocio tra prezzo e media.

Smart Loss Exit — early exit for losing positions (ATR adverse excursion, time in trade, EMA invalidation, RSI, money cap) with a CSV journal Smart Loss Exit — early exit for losing positions (ATR adverse excursion, time in trade, EMA invalidation, RSI, money cap) with a CSV journal

Closes losing positions early, before the full stop-loss, when a rule says the trade is not coming back: adverse move beyond N x ATR, too long in loss, EMA trend flipped, RSI against the position, or a money cap. Never touches a position in profit. Observe-only mode journals what would be closed without closing anything. Every exit is written to CSV with the rule, the age and the maximum adverse excursion, so the rules can be tuned from data.