MQL5 Wizard: Segnali di Trading Basati su Pattern di Candlestick Reversali

Mike 2011.01.20 22:45 15 0 0
Allegato

MQL5 Wizard offre la creazione automatica di Sistemi Trading (vedi MQL5 Wizard: Creare Sistemi Trading senza Programmazione).

La classe CSignalCandles fornisce segnali di trading basati su pattern di candlestick reversali. La strategia è definita "Segnali basati su pattern di candlestick reversali" durante la creazione automatica di un EA in MQL5 Wizard.

L'idea alla base del sistema è identificare i pattern di inversione utilizzando il calcolo della candela composita. I pattern di inversione sono simili ai pattern "Hammer" e "Hanging Man" nell'analisi delle candlestick giapponesi. Tuttavia, utilizza la candela composita invece della singola candela e non richiede un corpo piccolo della candela composita per confermare l'inversione.

Parametri di input:

  • Range - numero massimo di barre utilizzate nel calcolo della candela composita.
  • Minimum - dimensione minima della candela composita (in punti convenzionali).
  • ShadowBig e ShadowSmall - ombre (in unità di candela composita).
  • Limit, StopLoss e TakeProfit - prezzo di apertura, livelli di SL e TP, i valori definiti rispetto al prezzo di chiusura della candela composita (unità di candela composita).
  • Expiration - tempo di scadenza dell'ordine (in barre), utilizzato nel trading con ordini pendenti (Limit!=0.0).

I pattern di candlestick reversali sono determinati nel seguente modo.

Si calcolano i parametri della candela composita partendo dalla barra completata più recente (con indice 1) fino al numero di barre definito dal parametro di input Range. Se la dimensione della candela composita è maggiore del valore specificato dal parametro di input Minimum, si controllano le condizioni di inversione della candela composita analizzando le sue ombre.

La forza dei ribassisti è caratterizzata dalla dimensione dell'ombra superiore della candela composita, mentre la forza dei rialzisti è caratterizzata dalla dimensione dell'ombra inferiore.

  • Per confermare l'inversione del trend ribassista (e l'inizio di quello rialzista), è necessario che la dimensione dell'ombra inferiore (forza dei rialzisti) sia maggiore del valore definito dal parametro di input ShadowBig. La dimensione dell'ombra superiore (forza dei ribassisti) deve essere inferiore al valore definito dal parametro ShadowSmall.
  • Per confermare l'inversione del trend rialzista (e l'inizio di quello ribassista), è necessario che la dimensione dell'ombra superiore (forza dei ribassisti) sia maggiore del valore definito dal parametro ShadowBig. La dimensione dell'ombra inferiore (forza dei rialzisti) deve essere inferiore al valore definito dal parametro ShadowSmall.

Oltre alla strategia di inversione, è possibile utilizzare strategie di breakout specificando un valore negativo del parametro di input Limit (vedi MQL5 Wizard - Segnali di Trading Basati sul Crossover di Due EMA con filtro temporale intraday).

A seconda del valore di Limit, vengono utilizzati tre modi diversi di ingresso nel mercato:

  1. Limit>0. Si entrerà in un movimento di correzione al prezzo, migliore del prezzo di mercato (ordini pendenti Buy Limit o Sell Limit saranno piazzati a seconda del segnale di trading).
  2. Limit<0. Si entrerà nella direzione del movimento di prezzo (ordini pendenti Buy Stop o Sell Stop saranno utilizzati a seconda del segnale di trading).
  3. Limit=0. Si traderà utilizzando i prezzi di mercato.

Questa strategia è implementata nella classe CSignalCandles.

Segnali di trading basati su pattern di candlestick reversali

Figura 1. Segnali di trading basati su pattern di candlestick reversali


Segnali di Trading

I segnali di trading sono implementati nella classe CSignalCandles, dove si trova la funzione Candle() utilizzata per l'analisi:

int  Candle(int ind); // Restituisce il numero positivo/negativo a seconda del tipo di candela composita // il valore restituito è il numero di barre (candlestick) nella candela composita (partendo da ind)

Possono essere utilizzate più candele (bar) nella costruzione della candela composita. Il numero minimo di barre è definito dal parametro Range. In alcuni casi, la candela composita può essere formata con candele inferiori a Range (quando le condizioni di dimensione/ombre sono soddisfatte). La funzione Candle restituisce 0 se la candela composita non può essere formata.


1. Aprire una posizione long

Per aprire una posizione long, è necessaria una candela composita rialzista. La funzione controlla se è formata e restituisce false se la candela composita non è ancora formata o se è ribassista. Altrimenti, calcola la dimensione della candela composita (necessaria per calcolare prezzo, SL e TP) e determina i livelli di prezzo per l'ordine pendente.

Nota che il tipo di ordine pendente (Buy Limit o Buy Stop) dipende dal segno del parametro di input Limit (se Limit=0 o |prezzo-ask|<livello di stop, verrà piazzato un ordine di acquisto di mercato; se Limit>0, verrà piazzato un ordine pendente Buy Limit; se Limit<0, verrà piazzato un ordine pendente Buy Stop).

//+------------------------------------------------------------------+ //| Controlla le condizioni per aprire una posizione long (buy)                    |  //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)   { //--- controlla il fatto della formazione della candela composita rialzista    if(Candle(1)<=0) return(false); //--- ottiene la dimensione della candela composita    double size=m_high_composite-m_low_composite; //--- calcola il prezzo dell'ordine pendente    price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size); //--- calcola il prezzo di Stop Loss    sl   =m_symbol.NormalizePrice(price-m_stop_loss*size); //--- calcola il prezzo di Take Profit    tp   =m_symbol.NormalizePrice(price+m_take_profit*size); //--- imposta il tempo di scadenza dell'ordine    expiration+=m_expiration*PeriodSeconds(m_period); //--- le condizioni sono soddisfatte, restituisce true    return(true);   }

2. Chiudere una posizione long

Se si è formata una candela composita ribassista, la posizione long viene chiusa.

//+------------------------------------------------------------------+ //| Controlla le condizioni per chiudere una posizione long |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseLong(double& price)   { //--- controlla il fatto della formazione della candela composita ribassista    if(Candle(1)>=0) return(false); //---    price=0.0; //--- le condizioni sono soddisfatte, restituisce true    return(true);   }


3. Aprire una posizione short

È necessaria una candela composita ribassista per aprire una posizione short. Se la candela composita non è formata, o non è ribassista, restituisce false. Altrimenti, determiniamo la sua dimensione e calcoliamo i livelli di prezzo per l'ordine pendente

(il tipo di ordine dipende dal segno del parametro di input Limit, vedi "Aprire una posizione long").

//+------------------------------------------------------------------+ //| Controlla le condizioni per aprire una posizione short (sell) |//+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)   { //--- controlla il fatto della formazione della candela composita ribassista    if(Candle(1)>=0) return(false); //--- ottiene la dimensione della candela composita    double size=m_high_composite-m_low_composite; //--- calcola il prezzo dell'ordine pendente    price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size); //--- calcola il prezzo di Stop Loss    sl   =m_symbol.NormalizePrice(price+m_stop_loss*size); //--- calcola il prezzo di Take Profit    tp   =m_symbol.NormalizePrice(price-m_take_profit*size); //--- imposta il tempo di scadenza dell'ordine    expiration+=m_expiration*PeriodSeconds(m_period); //--- le condizioni sono soddisfatte, restituisce true    return(true);   }


4. Chiudere una posizione short

Se si è formata una candela composita rialzista, la posizione short viene chiusa.

//+------------------------------------------------------------------+ //| Controlla le condizioni per chiudere una posizione short |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseShort(double& price)   { //--- controlla il fatto della formazione della candela composita rialzista    if(Candle(1)<=0) return(false); //---    price=0.0; //--- le condizioni sono soddisfatte, restituisce true    return(true);   }

Creare un Expert Advisor utilizzando MQL5 Wizard

Per creare un robot di trading basato sulla strategia, è necessario scegliere le proprietà del segnale come "Segnali basati su pattern di candlestick reversali" nell'opzione "Creazione di Sistemi Trading Pronti" in MQL5 Wizard:

Seleziona segnali basati su pattern di candlestick reversali in MQL5 Wizard

Figura 2. Seleziona "Segnali basati su pattern di candlestick reversali in MQL5 Wizard

Successivamente, dovrai specificare l'algoritmo di trailing stop e il sistema di gestione del denaro e del rischio necessari. Il codice dell'Expert Advisor verrà creato automaticamente, potrai compilarlo e testarlo nel Strategy Tester del terminale client di MetaTrader 5.


Risultati dei Test

Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD M15, periodo di test: 1.1.2010-05.01.2011, Range=3, Minimum=50, ShadowBig=0.5, ShadowSmall=0.2, Limit=0, StopLoss=2.0, TakeProfit=1.0, Expiration=4).

Nella creazione dell'Expert Advisor abbiamo utilizzato un volume fisso (Trading a Lotto Fisso, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato).

Risultati dei Test dell'Expert Advisor con segnali di trading basati su pattern di candlestick reversali

Figura 3. Risultati dei Test dell'Expert Advisor con segnali di trading basati su pattern di candlestick reversali


Allegati: Il file SignalCandles.mqh con la classe CSignalCandles deve essere posizionato nella cartella terminal_data_folder\MQL5\Include\Expert\Signal.

Il file expert_candles.mq5 contiene il codice dell'Expert Advisor, creato utilizzando MQL5 Wizard.


Elenco
Commento 0