Parametri dell'Expert Advisor (Inputs)
Il nostro EA offre diversi parametri esterni che puoi modificare per controllarne il comportamento:
Parametri Generali
| Parametro | Tipo | Descrizione |
| MagicNumber | int | Un identificatore unico per le operazioni dell'EA. |
| InitialLot | double | La dimensione del lotto iniziale per il primo trade in una serie. |
| AllowBuy | bool | Consente all'EA di aprire operazioni di acquisto (iniziali e Martingale). |
| AllowSell | bool | Consente all'EA di aprire operazioni di vendita (iniziali e Martingale). |
| TakeProfit | int | Un Take Profit fisso in punti/pips utilizzato per ordini pendenti (non per esecuzione di mercato). |
| FindHighLowBackBars | int | Numero di barre precedenti da considerare per determinare il massimo e il minimo per il posizionamento degli ordini pendenti iniziali. |
| ResetAfterBars | int | Numero di barre dopo le quali gli ordini pendenti iniziali verranno eliminati e rivalutati (se non è aperta alcuna posizione). |
Strategia Martingale
| Parametro | Tipo | Descrizione |
| ReverseMartingale | bool | Se vero, le successive operazioni Martingale saranno nella direzione opposta all'ultima operazione della serie (tipicamente un approccio anti-Martingale o di copertura). Attualmente, se ReverseMartingale è falso, si apre nella stessa direzione. |
| LotMultiplier | double | Il fattore per cui la dimensione del lotto viene moltiplicata per il prossimo trade nella serie in perdita (es. 2.0 significa raddoppiare il lotto). |
| SecureProfitMartingaleTarget | double | Il profitto totale flottante (in valuta del conto) al quale l'intera serie di operazioni aperte verrà chiusa. |
| DistanceMartingalePips | int | La distanza (in pips) che il prezzo deve muoversi contro il prezzo di apertura dell'ultima operazione prima di aprire una nuova operazione Martingale. |
| MaxTradesInSeries | int | Il numero massimo di operazioni consentite in una singola serie Martingale. |
Strategia Temporale
| Parametro | Tipo | Descrizione |
| AllowMonday... AllowFriday | bool | Flag per abilitare o disabilitare il trading in specifici giorni della settimana. |
| ForbiddenDates | string | Un elenco separato da virgole di date (formato AAAA.MM.GG) in cui il trading è vietato. |
Panoramica delle Funzioni Fondamentali
OnInit() (Inizializzazione)
Imposta il MagicNumber dell'EA, la modalità margine e la deviazione. Reimposta lo stato di Martingale delle variabili (s_currentLot, s_totalTradesInSeries, ecc.) ai loro valori iniziali, preparando per un nuovo inizio.
OnDeinit() (Deinizializzazione)
Una funzione semplice per la pulizia, che stampa un messaggio quando l'EA viene fermato o rimosso.
IsTradingDateAllowed() e IsTradingDayAllowed() (Filtri di Trading)
Queste funzioni controllano il giorno e la data attuali rispetto agli input definiti dall'utente (AllowMonday a AllowFriday e ForbiddenDates) per determinare se il trading è permesso.
OpenTradeLogic(ENUM_ORDER_TYPE type, string tradeComment) (Esecuzione di Mercato)
Questa funzione gestisce l'apertura di nuove posizioni di mercato (Buy o Sell).
-
Valida e normalizza la dimensione del lotto rispetto al minimo, massimo e passo del broker.
-
Controlla la margine libera sufficiente utilizzando CheckMargin().
-
Esegue il trade senza un Take Profit o Stop Loss fisso (tp_calculated è 0).
-
Aggiorna le variabili globali dello stato di Martingale: s_currentLot, s_lastOpenPrice, s_seriesType, e s_totalTradesInSeries.
CloseAllPositions()
Itera attraverso tutte le posizioni aperte attualmente e chiude quelle aperte da questo EA (corrispondenti al MagicNumber).
PendingOrders(ENUM_ORDER_TYPE type, double price, double lotSize, string comment) (Posizionamento Ordine Pendenti)
Questa funzione posiziona ordini di Buy Limit o Sell Limit:
-
Valida la dimensione del lotto e controlla la sufficienza di margine.
-
Valida il prezzo di ingresso rispetto alla distanza minima del broker (SYMBOL_TRADE_STOPS_LEVEL).
-
Calcola un Take Profit fisso (tp) basato sull'input TakeProfit.
-
Invia la richiesta di trade. Nota: La funzione UpdateHighLowAndOrders chiama questa per posizionare gli ordini Buy Limit e Sell Limit iniziali.
UpdateHighLowAndOrders() (Logica di Ingresso Iniziale)
Questo è il meccanismo di ingresso iniziale quando non ci sono posizioni aperte:
-
Guarda indietro per FindHighLowBackBars per trovare il Massimo Massimo e il Minimo Minimo.
-
Calcola priceSellLimit (Massimo Massimo + 1 tick) e priceBuyLimit (Minimo Minimo - 1 tick).
-
Controlla se esistono ordini Buy Limit e Sell Limit con il MagicNumber dell'EA.
-
Posiziona un ordine Sell Limit appena sopra il recente massimo massimo e un ordine Buy Limit appena sotto il recente minimo minimo, ciascuno utilizzando l'InitialLot.
OnTick() (Logica Principale)
Il cuore della logica di esecuzione dell'EA:
-
Controllo del Tempo: Previne calcoli ridondanti sullo stesso tick.
-
Controllo di Filtro: Se il trading non è consentito per giorno/data, elimina tutti gli ordini pendenti.
-
Controllo degli Obiettivi di Profitto (Uscita dalla Serie): Se eaHasOpenPositions è vero E il profitto totale flottante è ≥ SecureProfitMartingaleTarget, chiama CloseAllPositions() e reimposta tutte le variabili di stato di Martingale per iniziare una nuova serie.
-
Posizionamento Ordine Iniziale: Se !eaHasOpenPositions E il trading è consentito, reimposta lo stato di Martingale e controlla se è formata una nuova barra.
-
Se è formata una nuova barra, controlla se barsCount è ≥ ResetAfterBars. Se sì, elimina gli ordini pendenti e chiama UpdateHighLowAndOrders() per posizionare nuovi ordini iniziali. Se no, chiama solo UpdateHighLowAndOrders().
-
-
Logica dei Passi di Martingale: Se eaHasOpenPositions è vero E s_totalTradesInSeries è < MaxTradesInSeries:
-
Controlla se il profitto totale flottante è negativo E il prezzo si è mosso contro l'ultima operazione aperta di almeno DistanceMartingalePips.
-
Se entrambe le condizioni sono soddisfatte, calcola il nextLot moltiplicando s_currentLot per LotMultiplier.
-
Determina la direzione dell'ordine da aprire (nella stessa direzione della serie o inversa, a seconda di ReverseMartingale).
-
Chiama OpenTradeLogic() per aprire la nuova posizione moltiplicata, continuando la serie Martingale.
-
Riepilogo della Strategia
Il
Post correlati
- MQL5 Wizard: Creare Trading Signals con Morning/Evening Stars e MFI per MetaTrader 5
- MQL5 Wizard: Crea Trading Signals con 3 Corvi Neri/3 Soldati Bianchi e RSI
- Utilizzare MQL5 Wizard per generare segnali di trading: Hammer e Hanging Man con CCI
- MQL5 Wizard: Strategia di Trading con Dark Cloud Cover/Piercing Line e RSI
- MQL5 Wizard: Crea Expert Advisor per segnali di trading basati su Dark Cloud Cover e Piercing Line con CCI