
Indicatori e Sistemi di Trading di William Blau in MQL5. Parte 1: Indicatori
Il trading tecnico può essere sfruttato solo se sono disponibili buoni strumenti.
Gli strumenti di un buon trader sono l'esperienza, il giudizio e una gerarchia matematica fornita da un buon programma per computer di trading.
William Blau
Introduzione
La prima parte dell'articolo "Indicatori e Sistemi di Trading in MQL5 di William Blau. Parte 1: Indicatori " è una descrizione di indicatori e oscillatori, descritta da William Blau nel libro "Momentum, Direction, and Divergence".
Gli indicatori e gli oscillatori, descritti in questo articolo, sono presentati come codici sorgente in linguaggio MQL5 e allegati nel file di archivio "Blau_Indicators_MQL5_en.zip".
L'idea chiave dell'analisi di William Blau
L'analisi tecnica di William Blau si compone di quattro fasi:
- Utilizzando i dati delle serie di prezzi (barre q) l'indicatore viene calcolato e tracciato sul grafico. L'indicatore non riflette l'andamento generale del movimento dei prezzi e non consente di determinare i punti di inversione di tendenza.
- L'indicatore viene smussato più volte utilizzando il metodo EMA: la prima volta (con il periodo r), la seconda volta (con il periodo s) e la terza volta (con il periodo u); viene tracciato un indicatore smussato. Un indicatore smussato in modo abbastanza accurato e riproduce le fluttuazioni dei prezzi con un ritardo minimo. Permette di determinare l'andamento del movimento dei prezzi e dei punti di inversione ed elimina il rumore del prezzo.
- L'indicatore smussato viene normalizzato, viene tracciato un indicatore normalizzato e smussato. La normalizzazione consente di interpretare il valore dell'indicatore come gli stati di ipercomprato o ipervenduto del mercato.
- Un indicatore normalizzato e smussato viene smussato una volta con il metodo EMA (periodo ul); viene costruito un oscillatore: vengono aggiunti l'istogramma dell'indicatore e la linea del segnale, i livelli di ipercomprato e ipervenduto del mercato. L'oscillatore ci consente di distinguere gli stati di ipercomprato/ipervenduto del mercato, i punti di riverenza e la fine di un trend.
Indicatori
L'articolo descrive i seguenti gruppi di indicatori:
- Indicatori, basati sul Momentum:
- Momentum (Blau_Mtm.mq5)
- Il True Strength Index (Blau_TSI.mq5)
- Ergodic Oscillator (Blau_Ergodic.mq5)
- Indicatori, basati su Stochastic:
- Stochastic (Blau_TStoch.mq5)
- Stochastics Index (Blau_TStochI.mq5)
- Stochastic Oscillator (Blau_TS_Stochastic.mq5)
- Indicatori, basati sul Momentum Stocastico:
- Stochastic Momentum (Blau_SM.mq5)
- Stochastic Momentum Indicator (Blau_SMI.mq5)
- Stochastic Momentum Oscillator (Blau_SM_Stochastic.mq5)
- Indicatori, basati su una Deviazione Media dalle tendenze del mercato:
- Mean Deviation Index Indicator (Blau_MDI.mq5)
- Ergodic MDI-oscillator (Blau_Ergodic_MDI.mq5)
- Indicatori basati sulla convergenza/divergenza della Media Mobile:
- MACD indicator (Blau_MACD.mq5)
- Ergodic MACD-oscillator (Blau_Ergodic_MACD.mq5)
- Indicatori, basati sul Candlestick Momentum:
- Candlestick Momentum (Blau_CMtm.mq5)
- L'indice Candlestick Momentum (Blau_CMI.mq5)
- Candlestick Index Indicator (Blau_CSI.mq5)
- Ergodic CMI-Oscillator (Blau_Ergodic_CMI.mq5)
- Ergodic CSI-Oscillator (Blau_Ergodic_CSI.mq5)
- Indicatori, basati su un Momentum composito alto-basso:
- Indicatore della chiusura virtuale (Blau_HLM.mq5)
- Directional Trend Index Indicator (Blau_DTI.mq5)
- Ergodic DTI Oscillator (Blau_Ergodic_DTI.mq5)
Per ciascun gruppo di indicatori vengono presentati i seguenti elementi:
- Indice dell’indicatore smussato;
- L'indice dell'indicatore normalizzato e smussato;
- L'oscillatore, basato sull'indice dell'indice normalizzato smussato.
La sezione True Strength Index contiene:
- Un'analisi dettagliata dell'approccio di William Blau sotto l'aspetto dell'analisi tecnica del grafico dei prezzi;
- Una descrizione dettagliata dell'algoritmo e del codice di ciascun indicatore dei gruppi di indicatori basati su Momentum.
Come metodo di smoothing William Blau utilizza ils (EMA) della media mobile esponenzialmente smussata. La Media Mobile Esponenziale viene calcolata aggiungendo al valore precedente della Media Mobile, una certa percentuale del prezzo corrente.
Quando si utilizza l'EMA, gli ultimi prezzi hanno un peso maggiore.
La funzione di calcolo dell'EMA:
EMA(k,n) = EMA(k-1,n) + 2/(n+1) * (price(k) - EMA(k-1,n)) = price(k) * 2/(n+1) + EMA(k-1,n) * (1 - 2/(n+1))
dove:
- EMA(k,n) - media mobile esponenzialmente smussata del periodo n per il momento del periodo k;
- price(k) - il prezzo al momento del periodo k.
La descrizione dei quattro tipi di medie mobili e dei metodi del loro utilizzo nell'analisi tecnica (vedi anche iMA)si trova nella "Guida di MetaTrader 5" ("Analytics/TechnicalIndicators/Trend Indicators/Moving Average").
La Libreria delle Funzioni
La libreria di funzioni per il calcolo delle medie mobili si trova nel "MovingAverages.mqh". Ci occupiamo di ExponentialMAOnBuffer(), che riempie il buffer dell'array di output[] con i valori EMA del prezzo dell'array di input[]. Tuttavia, l'implementazione di ExponentialMAOnBuffer() presentata in "MovingAverages.mqh" ha lo svantaggio che non funziona con il periodo n = 1.
Vedi nel codice sorgente:
if(period<=1 || rates_total-begin<period) return(0);
Tuttavia, William Blau nel suo libro usa il periodo di smoothing n = 1 come assenza di smoothing.
Pertanto, il codice della funzione ExponentialMAOnBuffer() ha subito alcune modifiche:
if(period<1 || rates_total-begin<period) return(0);
e otteniamo l'ExponentialMAOnBufferWB(). Il codice di questa funzione si trova nel file "WilliamBlau.mqh".
Il file "WilliamBlau.mqh" ha anche le seguenti funzioni:
- La funzione PriceName() restituisce il tipo di prezzo come stringa:
string PriceName( const int applied_price // price type )
- La funzione CalculatePriceBuffer() calcola la matrice dei prezzi di questo tipo di prezzo:
int CalculatePriceBuffer( const int applied_price, // price type const int rates_total, // rates total const int prev_calculated, // bars, processed at the last call const double &Open[], // Open[] const double &High[], // High[] const double &Low[], // Low[] const double &Close[], // Close[] double &Price[] // calculated prices array )
Il tipo di prezzo applicato e il timeframe del grafico dei prezzi
William Blau considera i prezzi di chiusura del timeframe Giornaliero. Gli indicatori, sviluppati in questo articolo, consentono di scegliere il tipo di prezzo (vedi costanti di prezzo) il timeframe del grafico dei prezzi dipende dal timeframe dell'indicatore (vedi timeframe del grafico).
1. Il True Strength Index
Gli indicatori considerati (vedi allegato):
- Blau_Mtm.mq5 - Indicatore del tasso (Q-period Momentum; q-period Momentum smussato);
- Blau_TSI.mq5 - True strengths Index (q-period Momentum normalizzato e smussato);
- Blau_Ergodic.mq5 - Oscillatore ergodico (basato sul True Strength Index).
1.1. Momentum
La descrizione dell'indicatore tecnico integrato Momentum, e il suo utilizzo nell'analisi tecnica può essere trovata nella sezione "Analytics / Indicatori tecnici / Oscillatori / Momentum" (vedi anche iMomentum ). In contrasto con il Momentum standard (iMomentum) il Momentum di William Blau calcola il Momentum come la variazione assoluta del prezzo.
Un esempio dell'implementazione MQL5 del True Strength Indicator (TSI) di William Blau è presentato nell'articolo "MQL5: Crea il Tuo Indicatore”.
1.1.1. Analisi tecnica utilizzando l'indicatore Momentum
L'oggetto dell'analisi tecnica è il grafico dei prezzi dello strumento finanziario. Ogni elemento del grafico è una barra dei prezzi. La barra dei prezzi ha le seguenti caratteristiche: tempo di apertura, prezzo di apertura, prezzo massimo, prezzo minimo, prezzo di chiusura, volumi di trading e altro. La barra dei prezzi è formata e riflette il comportamento dei prezzi durante uno specifico e discreto periodo di tempo (timeframe del grafico).
Il compito dell'analisi tecnica del grafico dei prezzi è determinare l'attuale tendenza del movimento dei prezzi, rivelare i picchi e i bassi dei prezzi e prevedere la direzione della variazione dei prezzi nel prossimo periodo di tempo. La complessità di questo, è che il prezzo, pur muovendosi entro i limiti della sua tendenza di base, fa fluttuazioni multidirezionali creando un cosiddetto rumore di prezzo.
Quello che William Blau ha proposto. La prima differenza: il Momentum. William Blau ha calcolato il Momentum come relativo alla variazione di prezzo [chiusura] per ogni [giorno] periodo di tempo; e ha creato l'indicatore Momentum. Da un punto di vista matematico la funzione Momentum è la prima derivata del prezzo.
Fig. 1.1. Indicatore di Momentum (q-period Momentum)
Il Momentum visualizza le fluttuazioni dei prezzi del periodo di un giorno mostra la velocità (entità) e la direzione delle variazioni di prezzo in questo periodo, ma non riflette l'andamento generale del movimento dei prezzi e non determina i punti di inversione di tendenza.
La seconda differenza è lo smoothing. La media mobile del Momentum (la somma cumulativa delle fluttuazioni giornaliere dei prezzi) riproduce quasi esattamente sia le variazioni principali che locali dei prezzi della curva. La Fig. 1.2 (a) nelle sottofinestre I, II presenta il Momentum smussato (medie mobili con periodi 20 e 300, rispettivamente).
Più alto è il periodo della Media Mobile, più accuratamente il Momentum levigato approssima (riproduce) le fluttuazioni della curva dei prezzi. Da un punto di vista matematico la funzione di smussare il Momentum è la funzione integrale del momentum, o la funzione ripristinata del prezzo.
Fig. 1.2 (a). Indicatore di momentum (momentum q-period smussato)
Fig. 1.2 (b). Indicatore di momentum (momentum q-period smussato)
In Fig. 1.2 (a), nella finestra principale, sono presentati gli indicatori smussati dall'EMA (con periodi di 5, 20, 100). Un leggero aumento del periodo della media mobile porta a un ritardo e la media mobile diventa praticamente incapace di riprodurre le fluttuazioni della curva dei prezzi.
La terza differenza è il resmoothing. Il primo smoothing del Momentum definisce l'andamento principale del movimento dei prezzi, così come i punti di inversione, ma non elimina il rumore. Per eliminare il rumore dei prezzi è necessario un re-smoothing con un piccolo periodo della media mobile.
Fig. 1.2 (b), nella sottofinestra I presenta l'indicatore Momentum smussato (media mobile con periodo 20), le sottofinestre II e III presentano il Momentum doppio e triplo smussato (periodi di media mobile di 5, 3). Una levigatura ripetuta elimina il rumore del prezzo, ma aggiunge un leggero spostamento della curva (un ritardo).
La quarta differenza: la differenza in un segnale di tendenze mutevoli. Lo smoothing del Momentum con un piccolo periodo di media può portare a una divergenza del Momentum smussato con l'andamento della curva dei prezzi.
In Fig. 1.2 (a), la discrepanza è osservata nella sottofinestra I, e in Fig. 1.2 (b) - nelle sottofinestre I, II, III (la direzione delle variazioni di prezzo diverge dalla direzione del cambiamento nel Momentum smussato). Tali differenze spesso indicano un cambiamento di tendenza. Da un punto di vista matematico la divergenza è una funzione del periodo di smoothing.
L'affidabilità dell'interpretazione di queste differenze come segnale di cambiamento delle tendenze può essere migliorata se consideriamo la divergenza solo per le aree di ipercomprato o ipervenduto (vedi п. 1.2.1).
1.1.2. Definizione del Momentum
Il Momentum è una variazione di prezzo relativa.
Il segno del Momentum mostra la direzione della variazione del prezzo: un Momentum positivo - il prezzo è aumentato nel periodo, un negativo - il prezzo è diminuito nel corso del periodo. Il magnitudo del Momentum - è la velocità relativa della variazione di prezzo (primo derivato del prezzo).
Fig. 1.3. Definizione del Momentum
Formula del Momentum:
mtm(price) = price - price[1]
dove:
- prezzo - prezzo [chiusura] del periodo corrente;
- prezzo [1] - prezzo di [chiusura] del periodo precedente.
William Blau esamina il momentum come la differenza tra il prezzo di [chiusura] del periodo corrente e il prezzo di [chiusura] del periodo precedente. William Blau, nel suo calcolo di un singolo periodo momentum, utilizza i prezzi di due periodi (il periodo corrente e il periodo precedente).
Introduciamo nella formula per il calcolo del momento un indicatore di periodo, q - è il numero di periodi di tempo coinvolti nel calcolo (Di William Blau q = 2).
Formula del Momentum del periodo q:
mtm(price,q) = price - price[q-1]
dove:
- q - numero di barre, utilizzato nel calcolo della quantità di moto;
- prezzo - prezzo [chiusura] del periodo corrente;
- prezzo [q-1] - prezzo di [chiusura] (q-1) periodi fa.
Nella formula risultante, il nostro Momentum a due periodi corrisponde al relativo periodo Momentum di William Blau.
Formula di un momentum q-period smussato:
Mtm(price,q,r,s,u) = EMA(EMA(EMA( mtm(price,q) ,r),s),u)
dove:
- prezzo - prezzo di [chiusura] - la base di prezzo del grafico dei prezzi;
- q - numero di barre, utilizzato nel calcolo del Momentum;
- mtm(price,q)=price-price[q-1] - q-period Momentum;
- EMA (mtm (prezzo, q), r) - il primo smoothing - l'EMA(r), applicato al Momentum q-period;
- EMA (EMA(..., r),s) - il secondo smoothing- l'EMA(e), applicato al risultato del 1o smoothing;
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing - l'EMA(u), applicato al risultato del 2o smoothing.
1.1.3. Mtm(price,q,r,s,u) - indicatore del tasso (momentum). Specifiche
- Nome del File: Blau_Mtm.mq5
- Il nome: Momentum (q-period Momentum; q-period Momentum smussato) di William Blau.
- Parametri di Input:
- q - il periodo per il quale viene calcolato il Momentum (default q = 2);
- r -period dell'EMA 1-st, applicato al Momentum (default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modifiche del rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, lo smoothing EMA non viene utilizzato. Ad esempio, se imposti Mtm (prezzo, 2,20,5,1), otteniamo un momentum doppio smussato, ma se imposti Mtm (prezzo, 2,1,1,1), otteniamo un momentum non smussato;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
1.2. Il True Strengths Index
1.2.1. Analisi tecnica utilizzando il True Strength Index
Continua: Vedere l'inizio nella Sezione 1.1.1.
Il quinto: normalizzazione. Portare attraverso la normalizzazione dei valori del Momentum smussato su una singola scala (mappatura all'intervallo [-1, +1]), ci consente di determinare gli stati di ipercomprato o ipervenduto del mercato. Moltiplicazione ripetuta dei valoridel momento levigato normalizzato un fattore di 100 converte le serie numeriche nell'intervallo percentuale (mappando all'intervallo [-100, 100]).
Fig. 1.4. Momentum Smussato Normalizzato
Una discrepanza come segnale di tendenze mutevoli può essere considerata affidabile se il momentum normalizzato è nello stato di ipercomprato o ipervenduto.
1.2.2. La definizione del True Strength Index
Il True Strength Index (True Strength Index, TSI) - è un indicatore del Momentum normalizzato (Momentum normalizzato q-period). Portare i valori del Momentum smussato ad una singola scala (mappatura all'intervallo [-1, +1]) è fornito con la normalizzazione di ogni valore del Momentum smussato (la somma cumulativa delle fluttuazioni di prezzo del q-period smussato) per il valore del Momentum smussato, preso in valore assoluto.
La moltiplicazione per un coefficiente di 100 modifica l'intervallo del display in [-100, +100] (percentuale). La normalizzazione consente di interpretare il valore della STI come un livello di ipercomprato (positivo) o ipervenduto (negativo).
La formula del True Strength Index:
100 * EMA(EMA(EMA( mtm(price,q) ,r),s),u) 100 * Mtm(price,q,r,s,u) TSI(price,q,r,s,u) = –––––––––––––––––––––––––------–––––––––– = ––––––––––––––––------––––––––––––––– EMA(EMA(EMA( |mtm(price,q)| ,r),s),u) EMA(EMA(EMA( |mtm(price,q)| ,r),s),u)
if EMA(EMA(EMA(|mtm(price,q)|,r),s),u)=0, then TSI(price,q,r,s,u)=0
dove:
- prezzo - prezzo di [chiusura] - la base di prezzo del grafico dei prezzi;
- q - periodo del Momentum;
- mtm(price,q)=price-price[q-1] - q-period momentum;
- | Mtm (prezzo, q) | - il valore assoluto del Momentum q-period;
- Mtm (prezzo, q, r, s, u) - q-period Momentum smussato tre volte
- EMA (..., r) - il primo smoothing - l'EMA del periodo r, applicato a:
1) Momentum q-period;
2) valore assoluto del Momentum q-period; - EMA (EMA(..., r),s) - il secondo smoothing- l'EMA(e), applicato al risultato del 1o smoothing;
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing - EMA(u), applicato al risultato del 2o smoothing.
1.2.3. TSI(price,q,r,s,u) - il True Strength Index. Specifiche
- Nome del File: Blau_TSI.mq5
- Il nome: Il True Strength Index (q-period relative Momentum normalizzato smussato ) di William Blau.
- Parametri di Input:
- q - il periodo per il quale viene calcolato il momento (default q = 2);
- r -period dell'EMA 1-st, applicato al Momentum (default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- (facoltativo) a due livelli (il valore predefinito è -25 e +25) - aggiungere/rimuovere un livello; modificare il valore, la descrizione del livello, modificare lo stile di rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita -100) e superiore (per impostazione predefinita 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, nel corrispondente periodo EMA, lo smoothing non verrà eseguito;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
1.3. Oscillatore ergodico
1.3.1. Analisi tecnica con l'oscillatore ergodico
Continua: Vedi l'inizio in Sec. 1.1.1, 1.2.1.
Sesto: le aree di un mercato ipercomprato e ipervenduto. Intervallo unitario [-1, +1] o un intervallo percentuale [-100.100], entro il quale si verificano cambiamenti nei valori del momentum normalizzato smussato, consente di definire le aree di mercato ipercomprato o ipervenduto.
La classe di indici di analisi tecnica, che caratterizzano lo stato di ipercomprato o ipervenduto del mercato, è chiamata oscillatore. Per ogni oscillatore, i livelli sono determinati, all'approccio a cui vengono ricevuti i segnali di un mercato ipercomprato o ipervenduto. Gli oscillatori sono inefficaci sui mercati di tendenza, in quanto il mercato può trovarsi in condizioni di ipercomprato / ipervenduto per un periodo arbitrariamente lungo.
Settimo: Linea di Segnale. Per ottenere un segnale sulla fine di una tendenza e una tendenza di inversione di un movimento di prezzo, viene utilizzata una linea di segnale. Il segnale da acquistare viene ricevuto quando la linea principale attraversa la linea del segnale dal basso verso l'alto. Il segnale da vendere viene ricevuto quando la linea principale attraversa la linea del segnale dall'alto verso il basso. Nel caso in cui ci sia una linea principale - questa è un ergodico (true strength index), quindi una re-smoothing dell'ergodico forma una linea di segnale. La procedura di ri-levigatura è uguale all'ultimo processo di smoothing ergodico.
Ottavo: l'andamento del movimento dei prezzi. La tendenza del movimento dei prezzi è verso l'alto (tendenza al rialzo), quando la linea principale (ergodica) passa sopra la linea del segnale. La tendenza del movimento dei prezzi è verso il basso (tendenza al ribasso), quando la linea principale (ergodica) passa sotto la linea del segnale.
Fig. 1.5. Oscillatore Ergodico
1.3.2. Definizione dell'Oscillatore Ergodico
Ergodic(price,q,r,s,u) = TSI(price,q,r,s,u)
SignalLine(price,q,r,s,u,ul) = EMA( Ergodic(price,q,r,s,u) ,ul)
dove:
- Ergodic() - ergodico - True Strength Index STI(price,q,r,s,u);
- Il SignalLine() -una linea di segnale - l'EMA(ul), applicato all'ergodico;
- ul - un periodo EMA di una linea di segnale - secondo William Blau, il valore ul deve essere uguale al periodo dell'ultimo significativo (>1) dell'ergodico EMA. Ad esempio, se si utilizza un doppi smoothing Ergodic (prezzo, q, r, s, u) = Ergodic (prezzo, 2,20,5,1), quindi da William Blau ul = s = 5.
1.3.3. Ergodico (prezzo, q,r,s,u,ul) - oscillatore ergodico. Specifiche
- Nome del File: Blau_Ergodic.mq5
- Nome: Oscillatore Ergodico (basato su un vero indice di forza) di William Blau.
- Parametri di Input:
- grafico #0 - Ergodico (il true strength index):
- q - il periodo per il quale viene calcolato il momento (default q = 2);
- r -period dell'EMA 1-st, applicato al Momentum (default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- plot del grafico #1 - la linea del segnale:
- ul - punto linea di segnale EMA, viene applicato all'ergodico (di default ul = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering di ciascun grafico : il colore, lo spessore, lo stile della linea (la scheda "Colori");
- due livelli (per impostazione predefinita -25 e +25) - aggiungi / rimuovi un livello, cambia il valore, la descrizione del livello, cambia lo stile di rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiori (per impostazione predefinita -100) e superiori (per impostazione predefinita 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, lo smoothing EMA non viene utilizzato;
- ul>0. Se ul = 1, allora la Linea del Segnale e le linee Ergodiche sono le stesse;
- la dimensione minima dell'array di prezzi = (q-1 + r + s + u + ul-4 +1).
1.4. Il Codice (descrizione dettagliata)
1.4.1. "Blau_Mtm.mq5" - indicator Mtm(price,q,r,s,u) - momentum
Il codice dell'indicatore Mtm (price,q,r,s,u):
//+------------------------------------------------------------------+ //| Blau_Mtm.mq5 | //| Copyright 2011, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2011, MetaQuotes Software Corp." // copyright #property link "https://www.mql5.com" // url #property description "q-period Momentum (William Blau)" // description #include <WilliamBlau.mqh> // include file (terminal_data_folder\MQL5\Include) //--- indicator settings #property indicator_separate_window // indicator in a separate window #property indicator_buffers 5 // number of buffers used #property indicator_plots 1 // number of plots //--- main graphic plot #0 #property indicator_label1 "Mtm" // graphic plot label #0 #property indicator_type1 DRAW_LINE // draw as a line #property indicator_color1 Blue // color #property indicator_style1 STYLE_SOLID // line style - solid line #property indicator_width1 1 // line width //--- input parameters input int q=2; // q - period of Momentum input int r=20; // r - 1st EMA, applied to momentum input int s=5; // s - 2nd EMA, applied to the 1st EMA input int u=3; // u - 3rd EMA, applied to the 2nd EMA input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; // AppliedPrice - price type //--- dynamic arrays double MainBuffer[]; // u-period 3rd EMA (for graphic plot #0) double PriceBuffer[]; // price array double MtmBuffer[]; // q-period Momentum double EMA_MtmBuffer[]; // r-period 1st EMA double DEMA_MtmBuffer[]; // s-period 2nd EMA //--- global variables int begin1, begin2, begin3, begin4; // data starting indexes int rates_total_min; // total rates min //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers // plot buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // u-period 3rd EMA // buffers for intermediate calculations SetIndexBuffer(1,PriceBuffer,INDICATOR_CALCULATIONS); // price buffer SetIndexBuffer(2,MtmBuffer,INDICATOR_CALCULATIONS); // q-period Momentum SetIndexBuffer(3,EMA_MtmBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA SetIndexBuffer(4,DEMA_MtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA /* //--- graphic plot #0 (Main) PlotIndexSetString(0,PLOT_LABEL,"Mtm"); // label PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE); // drawing type as a line PlotIndexSetInteger(0,PLOT_LINE_COLOR,Blue); // line color PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); // line style PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1); // line width */ //--- precision IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //--- begin1=q-1; // - MtmBuffer[] begin2=begin1+r-1; // or =(q-1)+(r-1) - EMA_MtmBuffer[] begin3=begin2+s-1; // or =(q-1)+(r-1)+(s-1) - DEMA_MtmBuffer[] begin4=begin3+u-1; // or =(q-1)+(r-1)+(s-1)+(u-1) - MainBuffer[] // rates_total_min=begin4+1; // minimal size //--- starting index for plot #0 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4); //--- short indicator name string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u); IndicatorSetString(INDICATOR_SHORTNAME,"Blau_Mtm("+shortname+")"); //--- OnInit done return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // rates total const int prev_calculated, // bars, calculated at previous call const datetime &Time[], // Time const double &Open[], // Open const double &High[], // High const double &Low[], // Low const double &Close[], // Close const long &TickVolume[], // Tick Volume const long &Volume[], // Real Volume const int &Spread[] // Spread ) { int i,pos; //--- check rates if(rates_total<rates_total_min) return(0); //--- calc PriceBuffer[] CalculatePriceBuffer( AppliedPrice, // applied price rates_total, // rates total prev_calculated, // bars, calculated at previous call Open,High,Low,Close, // Open[], High[], Low[], Close[] arrays PriceBuffer // price buffer ); //--- calculation of q-period Momentum if(prev_calculated==0) // at first call { pos=begin1; // calc all values starting from begin1 for(i=0;i<pos;i++) // pos values MtmBuffer[i]=0.0; // zero values } else pos=prev_calculated-1; // overwise recalc only last value // calculate MtmBuffer[] for(i=pos;i<rates_total;i++) MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)]; //--- EMA smoothing // r-period 1st EMA ExponentialMAOnBufferWB( rates_total, // rates total prev_calculated, // bars, calculated at previous call begin1, // starting index r, // smoothing period MtmBuffer, // input array EMA_MtmBuffer // output array ); // s-period 2nd EMA ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer); // u-period 3rd EMA (for plot #0) ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,MainBuffer); //--- OnCalculate done. Return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Consideriamo il codice in dettaglio.
1.4.1.1. Impostazioni indicatore Mtm (prezzo,q,r,s,u)
Letteratura
Cosa leggere sulle impostazioni dell'indicatore nel MQL5 Reference:
- Sezione "Indicatori personalizzati".
- La relazione tra le proprietà dell'indicatore e le funzioni corrispondenti (vedere "Indicatori Personalizzati").
- Proprietà dei programmi (proprietà #) (vedere "Nozioni di Base sulla Lingua/Preprocessore").
- Stili di rendering (proprietà del plotting grafico) (vedere la sezione "Costanti standard, enumerazioni e strutture /costanti indicatore").
- Proprietà degli indicatori personalizzati (vedere la sezione "Costanti standard, enumerazioni e strutture / costanti di indicatore").
Copyright. Descrizione dell'indicatore
#property copyright "Copyright 2011, MetaQuotes Software Corp." // copyright #property link "https://www.mql5.com" // url #property description "q-period Momentum (William Blau)" // description
Impostazioni solo tramite la direttiva del preprocessore #property. Il сopyright (parametri copyright e link), versione (la versionedel parametro ) e una descrizione del programma mql5 (descrizionedel parametro ) sono visualizzati nelle "Proprietà" della finestra dell'indicatore (la scheda "Proprietà", casella "Aggiuntivo").
Includi file
#include <WilliamBlau.mqh> // include file (terminal_data_folder\MQL5\Include)
Il preprocessore sostituisce la riga #Include <WilliamBlau.mqh> con il contenuto del file "WilliamBlau.mqh". Le parentesi angolari indicano che il file "WilliamBlau.mqh" verrà prelevato dalla cartella dei dati del terminale. Per ulteriori informazioni, vedere Inclusione di file.
Sul contenuto del file "WilliamBlau.mqh" vedi l'introduzione.
Impostazioni dell'indicatore (in generale)
L'indicatore personalizzato - è pochi plot di grafici. Il grafico dell'indicatore può essere visualizzato nella finestra principale del grafico dei prezzi o in una finestra separata. Ogni grafico ha un determinato metodo di disegno, colore, stile e spessore.
I dati per il rendering del grafico sono presi dai buffer degli indicatori (ogni grafico corrisponde da uno a cinque buffer di indicatori). Utilizziamo un array di indicatori come buffer di indicatori.
Per impostare l'indicatore, è necessario (vedi Fig. 1.6):
- Specificare la finestra per la visualizzazione degli indicatori.
- Specificate il numero di grafici.
- Non ci sono limiti per il numero di buffer di indicatori.
- Dichiarazione degli array di indicatori.
- Impostare un collegamento: array di indicatori -> buffer di indicatori -> plot del grafico.
- Descrivere le proprietà di ogni grafico.
- Specificare la precisione di visualizzazione dei valori dell'indicatore.
- Specificare per ogni costruzione grafica, il numero di barre iniziali senza il rendering del plotting grafico.
- Impostare i livelli orizzontali e descrivere le proprietà di ciascun livello orizzontale (non presente).
- Impostare le restrizioni di scala per la finestra dell'indicatore separata (non presente.)
- Specificare il nome breve dell'indicatore.
Fig. 1.6. Indicatore di Momentum Mtm (prezzo, q, r, s, u)
Le impostazioni dell'indicatore vengono eseguite:
- a) attraverso la direttiva #property sui preprocessori,
- b) o utilizzando le Funzioni Speciali.
Per avere più informazioni su questo vedi Collegamento tra Proprietà Indicatore e Funzioni Corrispondenti
La differenza nei metodi di impostazione dell'indicatore è che le impostazioni attraverso la direttiva #property sono disponibili prima che l'indicatore sia allegato al grafico dei prezzi, mentre le impostazioni attraverso funzioni speciali sono disponibili dopo che l'indicatore è stato allegato al grafico dei prezzi. La configurazione delle impostazioni viene eseguita dalla finestra "Proprietà" dell'indicatore.
Le impostazioni: una finestra per la visualizzazione dell'indicatore (1)
#property indicator_separate_window // indicator in a separate window
La configurazione è obbligatoria ed è possibile solo attraverso la direttiva del preprocessore #property. Ci sono due opzioni di visualizzazione degli indicatori:
- Nella finestra principale del grafico dei prezzi - indicator_chart_window;
- In una finestra separata - indicator_separate_window.
Impostazioni: Numero di buffer (3) e plot di grafici (2)
#property indicator_buffers 5 // number of buffers used #property indicator_plots 1 // number of plots
La configurazione è obbligatoria ed è possibile solo attraverso la direttiva #property preprocessore. Il numero di buffer di indicatori (parametro indicator_buffers) e il numero di grafici (parametro indicator_plots) non è limitato.
Impostazioni: Array di Indicatori (4)
//--- dynamic arrays double MainBuffer[]; // u-period 3rd EMA (for graphic plot #0) double PriceBuffer[]; // price array double MtmBuffer[]; // q-period Momentum double EMA_MtmBuffer[]; // r-period 1st EMA double DEMA_MtmBuffer[]; // s-period 2nd EMA
Gli array degli indicatori sono dichiarate a livello globale come unidimensionali matrici dinamiche di tipo doppio.
Impostazioni: Impostazione del collegamento (5) tra gli array di indicatori, i buffer di indicatori e i grafici.
// graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // u-period 3rd EMA // buffers for intermediate calculations SetIndexBuffer(1,PriceBuffer,INDICATOR_CALCULATIONS); // price buffer SetIndexBuffer(2,MtmBuffer,INDICATOR_CALCULATIONS); // q-period Momentum SetIndexBuffer(3,EMA_MtmBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA SetIndexBuffer(4,DEMA_MtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA
Il codice è scritto nella funzione OnInit() dell’handler eventi Init().
Il collegamento del buffer dell'indicatore con l’array unidimensionale corrispondente viene impostato con la funzione SetIndexBuffer():
bool SetIndexBuffer( int index, // index of the indicator buffer (starts from 0) double buffer[], // dynamic array ENUM_INDEXBUFFER_TYPE data_type // type of data, stored in the indicator array );
Il buffer dell'indicatore è un array dinamic o unidimensionale di doppio tipo, la cui dimensione è controllata dal terminale client, in modo che corrisponda sempre al numero di barre su cui viene calcolato l'indicatore. L'indicizzazione delle riserve di indicatori inizia da 0.
Un buffer di indicatori può memorizzare tre tipi di dati: INDICATOR_DATA ,INDICATOR_COLOR_INDEX, INDICATOR_CALCULATIONS. Ogni grafico, a seconda del metodo di visualizzazione, può essere corrisposto da uno a cinque buffer indicatore: da uno a quattro valori del buffer dell'indicatore (tipo di dati INDICATOR_DATA) e un buffer di colore (tipo di dati INDICATOR_COLOR_INDEX.)
I buffer di indicatori con i dati di tipo INDICATOR_CALCULATIONS sono progettati per calcoli intermedi. Dopo l'associazione, l'array di indicatori avrà un'indicizzazione proprio come negli array convenzionali (vedere di seguito nella Sezione 1.4.1.2).
Impostazioni: Proprietà dei plot grafici (6)
Per la configurazione di ogni set di grafici, vengono specificati i seguenti elementi:
- Etichetta;
- Tipo di disegno (vedere tutti i 18 tipi nell'enumerazione ENUM_DRAW_TYPE);
- Colore della riga
- Stile riga (vedere i possibili stili enumerati in ENUM_LINE_STYLE);
- Larghezza della riga
Esistono due modi possibili per configurare:
1) Attraverso la direttiva preprocessore #property (implementata in questo modo):
//--- graphic plot #0 (Main) #property indicator_label1 "Mtm" // label of graphic plot #0 #property indicator_type1 DRAW_LINE // Drawing type: DRAW_LINE - line #property indicator_color1 Blue // Line color - Blue #property indicator_style1 STYLE_SOLID // Line style: STYLE_SOLID - solid line #property indicator_width1 1 // Line width
2) Utilizzando un gruppo di funzioni delle impostazioni delle proprietà del plot grafico PlotIndexSetDouble(), PlotIndexSetInteger(), PlotIndexSetString():
//--- graphic plot #0 (Main) PlotIndexSetString(0,PLOT_LABEL,"Mtm"); // label PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE); // drawing type as a line PlotIndexSetInteger(0,PLOT_LINE_COLOR,Blue); // line color PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); // line style PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1); // line width
Il codice viene scritto nella funzione OnInit() dell’handler degli eventi Init. Specifica della funzione PlotIndexSet *():
bool PlotIndexSetDouble|Integer|String( int plot_index, // index of the graphic plot int prop_id, // identifier of the property of the graphic plot double|int,char,bool,color|string prop_value // new value of the property );
Per perfezionare la visualizzazione del tipo di grafico selezionato, utilizziamo gli ID proprietà del plotting grafico, elencati nell'enumerazione ENUM_PLOT_PROPERTY.
L'indicizzazione dei grafici inizia da 0. Per quanto riguarda la preferibilità della configurazione tramite una direttiva #property vedi sopra nella sezione "Preferenze Indicatore". Alcune proprietà dei grafici (il colore, lo stile, la larghezza della linea) sono disponibili per la modifica dalla finestra "Proprietà" (la scheda "Colori") dell'indicatore.
Impostazioni: La precisione della visualizzazione dei valori dell'indicatore (7)
//--- precision IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
Il codice viene scritto nella funzione OnInit() dell’handler degli eventiInit. La specifica della funzione di configurazione delle impostazioni dell'indicatore IndicatorSet * ():
bool IndicatorSetDouble|Integer|String( int prop_id, // ID of indicator property double|int,color|string prop_value // new value of a property );
Identificatori di proprietà indicatori sono elencati nell'enumerazione ENUM_CUSTOMIND_PROPERTY.
La precisione della visualizzazione dei valori dell'indicatore è data solo dalla funzione IndicatorSetInteger(), l'ID delle proprietà dell'indicatore INDICATOR_DIGITS, e l’enumerazione ENUM_CUSTOMIND_PROPERTY_INTEGER.
In un esempio in cui i valoridei buffer dell'indicatore, che hanno lo scopo di renderizzare, sotto il display: accanto al nome breve dell'indicatore, in un messaggio pop-up, quando il puntatore del mouse è posizionato sopra la linea dell'indicatore - verrà arrotondato a _Digits - numero di cifre dopo il punto decimale nel prezzo dello strumento, a cui è collegato l'indicatore.
Impostazioni: Numero di barre iniziali senza il rendering (8)
I dati per il rendering del Momentum q-period di William Blau si formano in quattro fasi:
Fase 1. Sulla base dei dati dell’array dei prezzi PriceBuffer[], viene calcolato il Momentum (il periodo q). I valori del periodo q Momentum sono collocati nell’array MtmBuffer[]. Poiché l'indicizzazione dell’array dei prezzi inizia da 0, anche i dati significativi nell'array dei prezzi iniziano dall'indice 0, quindi i dati significativi nell'array MtmBuffer[] iniziano con l'indice (q-1).
Fase 2. I dati significativi nell'array MtmBuffer[] sono smussati (periodo di smoothing r). I valori del periodo q smussato Momentum sono collocati nell’array EMA_MtmBuffer[]. Poiché l'indicizzazione dell'array MtmBuffer[] inizia da 0, i dati significativi nell'array MtmBuffer[] iniziano con l'indice (q-1), quindi i dati significativi nell'array EMA_MtmBuffer[] iniziano con l'indice (q-1) + (r-1).
La 3 ° e 4 ° fase. Considerazioni simili sono date per determinare da quale barra iniziano i dati significativi nell’array DEMA_MtmBuffer[] (periodo di smoothing s) e nell'array MainBuffer[] (periodo di smoothing u). Vedi Fig. 1.7.
Fig. 1.7. I dati significativi dell'indicatore Mtm (price,q,r,s,u)
A livello globale le variabili sono dichiarate:
//--- global variables int begin1, begin2, begin3, begin4; // data starting indexes
I valori delle variabili - è l'indice della barra, da cui iniziano i dati significativi, nel corrispondente array di indicatori variabili. I valori delle variabili sono calcolati nella funzione OnInit() dell’handler di eventi Init, e verranno utilizzati nella funzione OnCalculate() dell’handler di eventi Calculate.
//--- begin1=q-1; // - MtmBuffer[] begin2=begin1+r-1; // or =(q-1)+(r-1) - EMA_MtmBuffer[] begin3=begin2+s-1; // or =(q-1)+(r-1)+(s-1) - DEMA_MtmBuffer[] begin4=begin3+u-1; // or =(q-1)+(r-1)+(s-1)+(u-1) - MainBuffer[] // rates_total_min=begin4+1; // minimal size //--- starting index for plot #0 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4);
Il numero di barre iniziali senza la visualizzazione al grafico viene specificato utilizzando la funzione PlotIndexSetInteger(), l'identificatore della proprietà dell'indicatore PLOT_DRAW_BEGIN enumerazioni ENUM_PLOT_PROPERTY_INTEGER.
Configurazione: Nome breve dell'indicatore (11)
//--- short indicator name string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u); IndicatorSetString(INDICATOR_SHORTNAME,"Blau_Mtm("+shortname+")");
Il codice viene scritto nella funzione OnInit() dell’handler degli eventi Init. Il nome breve dell'indicatore viene specificato solo utilizzando la funzione IndicatorSetString(),identificatore delle proprietà dell'indicatore INDICATOR_SHORTNAME (ENUM_CUSTOMIND_PROPERTY_STRING enumeration). La funzione PriceName () restituisce il nome del tipo di prezzo, a seconda del valore del parametro di input AppliedPrice. Il codice della funzione PriceName () si trova nel file "WilliamBlau.mqh" (vedi Introduzione).
Parametri di Input
//--- input parameters input int q=2; // q - period of Momentum input int r=20; // r - 1st EMA, applied to momentum input int s=5; // s - 2nd EMA, applied to the 1st EMA input int u=3; // u - 3rd EMA, applied to the 2nd EMA input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; // AppliedPrice - price type
Per ulteriori informazioni, vedere variabili di input. I parametri di input sono disponibili per la modifica dalla finestra "Proprietà" (la scheda "Input") dell'indicatore.
1.4.1.2. Il calcolo dell'indicatore Mtm (prezzo,q,r,s,u)
Calcolo: L'algoritmo
L'algoritmo per il calcolo dell'indicatore Mtm(prezzo,q,r,s,u):
- Controlla se ci sono dati sufficienti per calcolare l'indicatore.
- Il calcolo dell'array dei prezzi in base al tipo di prezzo specificato - formazione dell'array PriceBuffer[]
- La determinazione della barra dell'indice, da cui iniziare/continuare il calcolo del Momentum q-period.
- Il calcolo del momento del periodo q - il riempimento dell'array MtmBuffer[].
- Il primo smoothing con il metodo EMA (periodo r) - il riempimento dell'array EMA_MtmBuffer[].
- Il secondo smoothing con il metodo EMA (periodo s) - il riempimento dell’array DEMA_MtmBuffer[].
- Il terzo smoothing con il metodo EMA (periodo u) - il riempimento dell'array MainBuffer[] - il calcolo dei valori per il rendering del plot grafico #0.
Calcolo: La funzione OnCalculate()
Il calcolo dei valori degli indicatori viene eseguito nella funzione OnCalculate()dell’handler di eventi Calculate. Usiamo la seconda forma di chiamata alla funzione OnCalculate().
int OnCalculate( const int rates_total, // rates total const int prev_calculated, // bars, calculated at the previous call const datetime &Time[], // Time const double &Open[], // Open const double &High[], // High const double &Low[], // Low const double &Close[], // Close const long &TickVolume[], // Tick Volume const long &Volume[], // Real Volume const int &Spread[] // Spread ) { //--- //--- OnCalculate done. Return value of prev_calculated for next call return(rates_total); }
L'argomento rates_total è il numero di barre del grafico dei prezzi che vengono renderizzate e sono disponibili all'indicatore per l'elaborazione. Il prev_calculated - è il numero di barre del grafico dei prezzi che sono state elaborate dall'indicatore al momento dell'inizio della chiamata alla funzione corrente OnCalculate().
La funzione OnCalculate() restituisce il numero di barre del grafico dei prezzi che sono state elaborate dall'indicatore al momento della fine della chiamata corrente. Questa funzione restituisce il parametro OnCalculate() e deve essere costruita in modo tale che alla prima chiamata vengano elaborate tutte le barre non elaborate del grafico dei prezzi.
Cioè, se alla prima chiamata della funzione OnCalculate(), il parametro prev_calculated è uguale a 0, quindi alla seconda chiamata, il parametro prev_calculated è uguale a rates_totalo rates_total +1, e a partire dalla seconda chiamata, la funzione OnCalculate() gestisce (conta) solo l'ultima barra. Per ulteriori chiarimenti con un esempio, vedere qui.
I buffer degli indicatori e gli array Time[], Open[], High[], Low[], Close[], TickVolume[], Volume[] e Spread[] hanno una direzione predefinita di indicizzazione da sinistra a destra, dall'inizio alla fine dell'array, dai dati più vecchi a quelli più recenti. L'indice del primo elemento è uguale a 0. La dimensione del buffer dell'indicatore è controllata dal terminale client, in modo che corrisponda sempre al numero di barre su cui viene calcolato l'indicatore.
Calcolo: Verificare se ci sono dati sufficienti per calcolare l'indicatore (1)
//--- check rates if(rates_total<rates_total_min) return(0);
La variabile globale rates_total_min è la dimensione minima delle timeserie di input dell'indicatore, calcolata nella funzione OnInit() dell’handler di eventiInit.
rates_total_min=begin4+1; // minimum size of the input timeseries of the indicator
Calcolo: I prezzi degli array PriceBuffer[] (2)
//--- calculation of the prices array PriceBuffer[] CalculatePriceBuffer( AppliedPrice, // price type rates_total, // size of the input timeseries prev_calculated, // bars, processed on the previous call Open,High,Low,Close, // Open[], High[], Low[], Close[] PriceBuffer // calculate the prices array );
Per riempire l’array dei prezzi PriceBuffer[], viene utilizzata la funzione CalculatePriceBuffer(). Il codice della funzione CalculatePriceBuffer() si trova nel file "WilliamBlau.mqh" (vedi introduzione). Il tipo di prezzo è specificato nel parametro di input AppliedPrice.
Calcolo: La definizione dell'indice a barre, da cui iniziare/continuare il calcolo del Momentum q-period (3)
La variabile locale pos è l'indice della barra, da cui l'indicatore verrà calcolato sulla chiamata corrente della funzione OnCalculate(). Combiniamo il calcolo della variabile pos con la fase di preparazione dell'array MtmBuffer[] al calcolo (la fase di azzeramento degli elementi insignificanti dell'array MtmBuffer[]).
Calcolo: q-period Momentum (4)
//--- calculation of q-period Momentum if(prev_calculated==0) // at first call { pos=begin1; // calc all values starting from begin1 for(i=0;i<pos;i++) // pos values MtmBuffer[i]=0.0; // zero values } else pos=prev_calculated-1; // overwise recalc only last value // calculate MtmBuffer[] for(i=pos;i<rates_total;i++) MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)];
Il Momentum q-period è calcolato come differenza tra il periodo corrente PriceBuffer[i] e il prezzo (q-1) dei periodi precedenti PriceBuffer[i-(q-1)].
Calcolo: smoothing con il metodo EMA (5-7)
//--- EMA smoothing // r-period 1st EMA ExponentialMAOnBufferWB( rates_total, // rates total prev_calculated, // bars, calculated at previous call begin1, // starting index r, // smoothing period MtmBuffer, // input array EMA_MtmBuffer // output array ); // s-period 2nd EMA ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer); // u-period 3rd EMA (for plot #0) ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,MainBuffer);
La funzione ExponentialMAOnBuffer() è descritta nell'introduzione. Sull'esempio del calcolo del periodo r in movimento 1st EMA: la funzione ExponentialMAOnBuffer() riempie l'array di output EMA_MtmBuffer[] con i valori dell’EMA (r) dell'array di input MtmBuffer[]; con dati insignificanti fino all'indice (inizio1-1) inclusi, sono riempiti con valori zero.
1.4.2. "Blau_TSI.mq5" - indicatore STI(prezzo,q,r,s,u) - il true strength index
Il codice dell'indicatore STI (prezzo,q,r,s,u) (è costruito sulla base di modifiche e aggiunte al codice "Blau_Mtm.mq5"):
//+------------------------------------------------------------------+ //| Blau_TSI.mq5 | //| Copyright 2011, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2011, MetaQuotes Software Corp." // copyright #property link "https://www.mql5.com" // URL #property description "True Strength Index (William Blau)" // description #include <WilliamBlau.mqh> // include file (terminal_data_folder\MQL5\Include) //--- indicator settings #property indicator_separate_window // indicator in a separate window #property indicator_buffers 10 // number of buffers used #property indicator_plots 1 // graphic plots //--- horizontal levels #property indicator_level1 -25 // level #0 (vertical) #property indicator_level2 25 // level #1 (vertical) #property indicator_levelcolor Silver // level color #property indicator_levelstyle STYLE_DOT // level style #property indicator_levelwidth 1 // level width //--- indicator min/max #property indicator_minimum -100 // minimum #property indicator_maximum 100 // maximum //--- graphic plot #0 (Main) #property indicator_label1 "TSI" // label for graphic plot #0 #property indicator_type1 DRAW_LINE // draw as a line #property indicator_color1 Blue // line color #property indicator_style1 STYLE_SOLID // line style #property indicator_width1 1 // line width //--- input parameters input int q=2; // q - period of Momentum input int r=20; // r - 1st EMA, applied to Momentum input int s=5; // s - 2nd EMA, applied to the 1st smoothing input int u=3; // u - 3rd EMA, applied to the 2nd smoothing input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; // AppliedPrice - price type //--- dynamic arrays double MainBuffer[]; // TSI (graphic plot #0) double PriceBuffer[]; // price array double MtmBuffer[]; // q-period Momentum double EMA_MtmBuffer[]; // r-period 1st EMA double DEMA_MtmBuffer[]; // s-period 2nd EMA double TEMA_MtmBuffer[]; // u-period 3rd EMA double AbsMtmBuffer[]; // q-period Momentum (absolute value) double EMA_AbsMtmBuffer[]; // r-period 1st EMA (absolute value) double DEMA_AbsMtmBuffer[]; // s-period 2nd EMA (absolute value) double TEMA_AbsMtmBuffer[]; // u-period 3rd EMA (absolute value) //--- global variables int begin1, begin2, begin3, begin4; // starting index int rates_total_min; // rates total min //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // TSI // intermediate buffers; (not used for plot) SetIndexBuffer(1,PriceBuffer,INDICATOR_CALCULATIONS); // price array SetIndexBuffer(2,MtmBuffer,INDICATOR_CALCULATIONS); // q-period Momentum SetIndexBuffer(3,EMA_MtmBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA SetIndexBuffer(4,DEMA_MtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA SetIndexBuffer(5,TEMA_MtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA SetIndexBuffer(6,AbsMtmBuffer,INDICATOR_CALCULATIONS); // q-period моментум (absolute value) SetIndexBuffer(7,EMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA (absolute value) SetIndexBuffer(8,DEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (absolute value) SetIndexBuffer(9,TEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (absolute value) /* //--- graphic plot #0 (Main) PlotIndexSetString(0,PLOT_LABEL,"TSI"); // label of graphic plot #0 PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE); // draw as a line PlotIndexSetInteger(0,PLOT_LINE_COLOR,Blue); // line color PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); // line style PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1); // line width */ //--- precision IndicatorSetInteger(INDICATOR_DIGITS,2); /* //--- horizontal levels IndicatorSetInteger(INDICATOR_LEVELS,2); // number of levels IndicatorSetDouble(INDICATOR_LEVELVALUE,0,-25); // level #0 IndicatorSetDouble(INDICATOR_LEVELVALUE,1,25); // level #1 IndicatorSetInteger(INDICATOR_LEVELCOLOR,Silver); // level color IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DOT); // level style IndicatorSetInteger(INDICATOR_LEVELWIDTH,1); // level width IndicatorSetString(INDICATOR_LEVELTEXT,0,"Oversold"); // level 0 description "Oversold" IndicatorSetString(INDICATOR_LEVELTEXT,1,"Overbought"); // level 1 description "Overbought" //--- indicator scale IndicatorSetDouble(INDICATOR_MINIMUM,-100); // minimum IndicatorSetDouble(INDICATOR_MAXIMUM,100); // maximum */ //--- begin1=q-1; // - MtmBuffer[], AbsMtmBuffer[] begin2=begin1+r-1; // or =(q-1)+(r-1) - EMA_...[] begin3=begin2+s-1; // or =(q-1)+(r-1)+(s-1) - DEMA_...[] begin4=begin3+u-1; // or =(q-1)+(r-1)+(s-1)+(u-1) - TEMA_...[], MainBuffer[] // rates_total_min=begin4+1; // rates total min //--- starting index for plot #0 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4); //--- short indicator name string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u); IndicatorSetString(INDICATOR_SHORTNAME,"Blau_TSI("+shortname+")"); //--- OnInit done return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // rates total const int prev_calculated, // bars, calculated at previous call const datetime &Time[], // Time const double &Open[], // Open const double &High[], // High const double &Low[], // Low const double &Close[], // Close const long &TickVolume[], // Tick Volume const long &Volume[], // Real Volume const int &Spread[] // Spread ) { int i,pos; double value1,value2; //--- check rates if(rates_total<rates_total_min) return(0); //--- calc PriceBuffer[] CalculatePriceBuffer( AppliedPrice, // price type rates_total, // rates total prev_calculated, // bars, calculated at previous tick Open,High,Low,Close, // Open[], High[], Low[], Close[] PriceBuffer // price buffer ); //--- calculation of mtm and |mtm| if(prev_calculated==0) // at first call { pos=begin1; // calc all values starting from begin1 for(i=0;i<pos;i++) // pos { MtmBuffer[i]=0.0; // zero values AbsMtmBuffer[i]=0.0; // } } else pos=prev_calculated-1; // overwise calc only last bar // calculate MtmBuffer[] and AbsMtmBuffer[] for(i=pos;i<rates_total;i++) { MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)]; AbsMtmBuffer[i]=MathAbs(MtmBuffer[i]); } //--- EMA smoothing // r-period 1st EMA ExponentialMAOnBufferWB( rates_total, // rates total prev_calculated, // bars, calculated at previous call begin1, // starting index r, // smoothing period MtmBuffer, // input array EMA_MtmBuffer // output array ); ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,AbsMtmBuffer,EMA_AbsMtmBuffer); // s-period 2nd EMA ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer); ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_AbsMtmBuffer,DEMA_AbsMtmBuffer); // u-period 3rd EMA ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,TEMA_MtmBuffer); ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_AbsMtmBuffer,TEMA_AbsMtmBuffer); //--- TSI calculation (graphic plot #0) if(prev_calculated==0) // at first call { pos=begin4; // calc all values starting from begin4 for(i=0;i<pos;i++) // MainBuffer[i]=0.0; // zero values } else pos=prev_calculated-1; // overwise calc only last bar // calculation of MainBuffer[] for(i=pos;i<rates_total;i++) { value1=100*TEMA_MtmBuffer[i]; value2=TEMA_AbsMtmBuffer[i]; MainBuffer[i]=(value2>0)?value1/value2:0; } //--- OnCalculate done. Return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Consideriamo nel dettaglio solo le modifiche e le aggiunte al codice "Blau_Mtm.mq5".
1.4.2.1. Le configurazioni dell'indicatore STI (prezzo,q,r s,u) (modifiche e aggiunte al codice "Blau_Mtm.mq5")
Impostazioni dell'indicatore (in generale)
Le configurazioni della STI indicatore (prezzo,q,r,s,u) differiscono dalle configurazioni dell'indicatore Mtm(prezzo,q,r,s,u) (cfr. fig. 1.8):
- Specificare la finestra per la visualizzazione degli indicatori (nessuna modifica)
- Specificare il numero di strutture grafiche (nessuna modifica)
- Specificare il numero di buffer di indicatori (il numero di buffer è aumentato.)
- Dichiarazione degli array di indicatori(aggiunte agli array).
- Assegnare gli array/buffer/plot: l'indicatore array -> indicatore buffer -> plot grafico(ristrutturazione.)
- Descrivere le proprietà di ogni grafico(l'etichetta è stata modificata)
- Specificare l'accuratezza della visualizzazione dei valori dell'indicatore (precisione modificata)
- Specificare, per ogni grafico, il numero di barre iniziali senza mostrarle sul plot grafico (nessuna modifica)
- Impostare i livelli orizzontali e descrivere le proprietà di ogni livello orizzontale (nuovo)
- Impostare i limiti per la scala della finestra dell'indicatore separato (nuovo)
- Specificare il nome breve dell'indicatore (nome modificato.)
Fig. 1.8. Indicatore STI (prezzo,q,r,s,u) True Strength Index
Configurazioni (modifiche)
Nel codice "Blau_Mtm.mq5" vengono apportate le seguenti piccole modifiche.
1. La breve descrizione del programma mql5 è cambiata:
#property description "True Strength Index (William Blau)" // description
2. (nella configurazione 6) Il numero di grafici non è aumentato, il metodo di disegno (DRAW_LINE - linea), il colore della riga (blu), lo stile della riga (STYLE_SOLID - riga continua) e la larghezza della riga (1) sono rimasti invariati, ma l'etichetta per il grafico #0 è cambiata:
#property indicator_label1 "TSI" // label for graphic plot #0
3. (nella configurazione 7) La precisione della visualizzazione dei valori dell'indicatore viene modificata:
IndicatorSetInteger(INDICATOR_DIGITS,2);
4. (nella configurazione 11) il nome breve dell'indicatore viene modificato:
IndicatorSetString(INDICATOR_SHORTNAME,"Blau_TSI("+shortname+")");
Configurazioni: livelli orizzontali (9)
Per configurare i livelli orizzontali, è necessario specificare quanto segue per ogni livello:
- Valore sull'asse verticale;
- Descrizione del livello (facoltativo). I livelli orizzontali hanno un unico stile di rendering:
- Colore per la visualizzazione della linea;
- Stile linea (vedere i possibili stili enumerati in ENUM_LINE_STYLE);
- Spessore della riga.
Esistono due modi possibili per configurare:
1) Utilizzo della direttiva preprocessore #property (Implementato in questo modo).
//--- horizontal levels #property indicator_level1 -25 // level #0 (vertical) #property indicator_level2 25 // level #1 (vertical) #property indicator_levelcolor Silver // level color #property indicator_levelstyle STYLE_DOT // level style #property indicator_levelwidth 1 // level width
2) Utilizzando il gruppo delle funzioni IndicatorSet *():
//--- horizontal levels IndicatorSetInteger(INDICATOR_LEVELS,2); // number of levels IndicatorSetDouble(INDICATOR_LEVELVALUE,0,-25); // level #0 IndicatorSetDouble(INDICATOR_LEVELVALUE,1,25); // level #1 IndicatorSetInteger(INDICATOR_LEVELCOLOR,Silver); // level color IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DOT); // level style IndicatorSetInteger(INDICATOR_LEVELWIDTH,1); // level width IndicatorSetString(INDICATOR_LEVELTEXT,0,"Oversold"); // level 0 description "Oversold" IndicatorSetString(INDICATOR_LEVELTEXT,1,"Overbought"); // level 1 description "Overbought"
Il codice viene scritto nella funzione OnInit() dell’handler degli eventi Init. L'indicizzazione dei livelli orizzontali parte da 0. Per perfezionare la visualizzazione del livello orizzontale, vengono utilizzati gli identificatori delle proprietà dell'indice INDICATOR_LEVEL*, elencati nell'enumerazione ENUM_CUSTOMIND_PROPERTY.
La descrizione di ogni livello viene impostata solo utilizzando la funzione IndicatorSetString(), l'identificatore della proprietà dell'indicatore INDICATOR_LEVELTEXT (enumerazione ENUM_CUSTOMIND_PROPERTY_STRING ). La descrizione del livello è posizionata direttamente sopra il livello, a sinistra.
È possibile aggiungere/rimuovere livelli orizzontali, modificare i valori, la descrizione di ciascun livello e lo stile di rendering del livello dalla finestra "Proprietà" (la scheda "Livelli") dell'indicatore.
Configurazioni: Limiti della scala della finestra dell'indicatore separata (10)
Esistono due modi possibili per configurare:
1) Utilizzo della direttiva preprocessore #property (Implementato in questo modo).
//--- indicator min/max #property indicator_minimum -100 // minimum #property indicator_maximum 100 // maximum
2) Utilizzando la funzione IndicatorSetDouble(), gli identificatori delle proprietà degli indicatori INDICATOR_MINIMUM e INDICATOR_MAXIMUM (enumerazione ENUM_CUSTOMIND_PROPERTY_DOUBLE ).
//--- indicator scale IndicatorSetDouble(INDICATOR_MINIMUM,-100); // minimum IndicatorSetDouble(INDICATOR_MAXIMUM,100); // maximum
Il codice viene scritto nella funzione OnInit() dell’handler degli eventi Init. I limiti inferiore e superiore della scala di una finestra di indicatore separata sono disponibili per la modifica dalla finestra "Proprietà" (la scheda "Scala") dell'indicatore.
Configurazioni (modifiche): I buffer dell’indicatore (3-5)
Le modifiche nella configurazione "indicator array -> indicator buffer -> graphic plot":
1. (nella configurazione 3) Il numero di buffer è aumentato:
#property indicator_buffers 10 // the number of buffers for the calculation of the indicator
2. (nella configurazione 4) Aggiunti array di indicatori necessari per calcolare il valore assoluto del momentum del periodo q:
double AbsMtmBuffer[]; // q-period Momentum (absolute value) double EMA_AbsMtmBuffer[]; // r-period 1st EMA (absolute value) double DEMA_AbsMtmBuffer[]; // s-period 2nd EMA (absolute value) double TEMA_AbsMtmBuffer[]; // u-period 3rd EMA (absolute value)
lo scopo dell'array MainBuffer[] viene modificato:
double MainBuffer[]; // TSI (graphic plot #0) double TEMA_MtmBuffer[]; // u-period 3rd EMA
3. (nella configurazione 5) La connessione di "indicator array -> indicator buffer -> graphic plot" viene modificata:
// graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // TSI // intermediate buffers; (not used for plot) SetIndexBuffer(1,PriceBuffer,INDICATOR_CALCULATIONS); // price array SetIndexBuffer(2,MtmBuffer,INDICATOR_CALCULATIONS); // q-period Momentum SetIndexBuffer(3,EMA_MtmBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA SetIndexBuffer(4,DEMA_MtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA SetIndexBuffer(5,TEMA_MtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA SetIndexBuffer(6,AbsMtmBuffer,INDICATOR_CALCULATIONS); // q-period моментум (absolute value) SetIndexBuffer(7,EMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA (absolute value) SetIndexBuffer(8,DEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (absolute value) SetIndexBuffer(9,TEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (absolute value)
1.4.2.2. Il calcolo dell'indicatore STI (prezzo,q,r,s,u) (modifiche e aggiunte al codice "Blau_Mtm.mq5")
Calcolo: L'algoritmo
L'algoritmo per il calcolo dell'indicatore STI (prezzo,q,r,s,u):
- Controlla se ci sono dati sufficienti per calcolare l'indicatore.
- Il calcolo dell'array di prezzi in base al tipo di prezzo specificato - formazione dell'array PriceBuffer[].
- La determinazione della barra dell'indice, da cui iniziare/continuare il calcolo del Momentum q-period.
- Il calcolo del momentum del periodo q e il suo valore assoluto - il riempimento degli array MtmBuffer[] e AbsMtmBuffer[].
- Il primo smoothing con il metodo EMA (periodo r) - il riempimento di EMA_MtmBuffer [] e EMA_AbsMtmBuffer [] array.
- Il secondo smoothing con il metodo EMA (periodo s) - il riempimento di DEMA_MtmBuffer [] e DEMA_AbsMtmBuffer [] array.
- Il terzo metodo di smoothing con il metodo EMA (periodo u) - il riempimento di TEMA_MtmBuffer [] e TEMA_AbsMtmBuffer [] array.
- La determinazione della barra dell'indice, da cui iniziare/continuare il calcolo del true strength index.
- Il calcolo del vero indice di resistenza - il riempimento dell'array MainBuffer[] - il calcolo dei valori per il plot grafico #0.
L'essenza dei cambiamenti nell'algoritmo (brevemente):
- a) (vedi paragrafo 4-7) parallelamente al calcolo del momento del periodo q (gruppo di array * MtmtBuffer[]) viene eseguito il calcolo del valore assoluto del Momentum q-period (*AbsMtmBuffer[] gruppo di array);
- b) (cfr. sezione 8-9) è aggiunto il calcolo della STI.
Calcolo: il q-period Momentum il suo valore assoluto (3-7)
//--- calculation of mtm and |mtm| if(prev_calculated==0) // at first call { pos=begin1; // calc all values starting from begin1 for(i=0;i<pos;i++) // pos { MtmBuffer[i]=0.0; // zero values AbsMtmBuffer[i]=0.0; // } } else pos=prev_calculated-1; // overwise calc only last bar // calculate MtmBuffer[] and AbsMtmBuffer[] for(i=pos;i<rates_total;i++) { MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)]; AbsMtmBuffer[i]=MathAbs(MtmBuffer[i]); } //--- EMA smoothing // r-period 1st EMA ExponentialMAOnBufferWB( rates_total, // rates total prev_calculated, // bars, calculated at previous call begin1, // starting index r, // smoothing period MtmBuffer, // input array EMA_MtmBuffer // output array ); ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,AbsMtmBuffer,EMA_AbsMtmBuffer); // s-period 2nd EMA ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer); ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_AbsMtmBuffer,DEMA_AbsMtmBuffer); // u-period 3rd EMA ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,TEMA_MtmBuffer); ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_AbsMtmBuffer,TEMA_AbsMtmBuffer);
Calcolo: Il True Strength Index (8-9)
//--- TSI calculation (graphic plot #0) if(prev_calculated==0) // at first call { pos=begin4; // calc all values starting from begin4 for(i=0;i<pos;i++) // MainBuffer[i]=0.0; // zero values } else pos=prev_calculated-1; // overwise calc only last bar // calculation of MainBuffer[] for(i=pos;i<rates_total;i++) { value1=100*TEMA_MtmBuffer[i]; value2=TEMA_AbsMtmBuffer[i]; MainBuffer[i]=(value2>0)?value1/value2:0; }
1.4.3. "Blau_Ergodic.mq5" - Ergodic(price,q,r,s,u,ul) - Ergodic Oscillator
Il codice dell'indicatore Ergodic (price,q,r,s,u,ul) si basa sulle modifiche del codice di "Blau_TSI.mq5":
//+------------------------------------------------------------------+ //| Blau_Ergodic.mq5 | //| Copyright 2011, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2011, MetaQuotes Software Corp." // copyright #property link "https://www.mql5.com" // URL #property description "Ergodic Oscillator (William Blau)" // description #include <WilliamBlau.mqh> // include file (terminal_data_folder\MQL5\Include) //--- indicator settings #property indicator_separate_window // indicator in a separate window #property indicator_buffers 11 // number of buffers #property indicator_plots 2 // indicator plots //--- horizontal levels #property indicator_level1 -25 // level #0 #property indicator_level2 25 // level #1 #property indicator_levelcolor Silver // level color #property indicator_levelstyle STYLE_DOT // level style #property indicator_levelwidth 1 // level width //--- min/max #property indicator_minimum -100 // minimum #property indicator_maximum 100 // maximum //--- graphic plot #0 (Main) #property indicator_label1 "Ergodic" // graphic plot #0 #property indicator_type1 DRAW_HISTOGRAM // draw as a histogram #property indicator_color1 Silver // histogram color #property indicator_style1 STYLE_SOLID // line style #property indicator_width1 2 // line width //--- graphic plot #1 (Signal Line) #property indicator_label2 "Signal" // graphic plot #1 #property indicator_type2 DRAW_LINE // draw as a line #property indicator_color2 Red // line color #property indicator_style2 STYLE_SOLID // line style #property indicator_width2 1 // line width //--- input parameters input int q=2; // q - period of Momentum input int r=20; // r - 1st EMA, applied to Momentum input int s=5; // s - 2nd EMA, applied to the 1st smoothing input int u=3; // u - 3rd EMA, applied to the 2nd smoothing input int ul=3; // ul- period of a Signal Line input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; // AppliedPrice - price type //--- dynamic arrays double MainBuffer[]; // Ergodic (graphic plot #0) double SignalBuffer[]; // Signal line: ul-period EMA of Ergodic (graphic plot #1) double PriceBuffer[]; // price array double MtmBuffer[]; // q-period Momentum double EMA_MtmBuffer[]; // r-period of the 1st EMA double DEMA_MtmBuffer[]; // s-period of the 2nd EMA double TEMA_MtmBuffer[]; // u-period of the 3rd EMA double AbsMtmBuffer[]; // q-period Momentum (absolute value) double EMA_AbsMtmBuffer[]; // r-period of the 1st EMA (absolute value) double DEMA_AbsMtmBuffer[]; // s-period of the 2nd EMA (absolute value) double TEMA_AbsMtmBuffer[]; // u-period of the 3rd EMA (absolute value) //--- global variables int begin1, begin2, begin3, begin4, begin5; // starting indexes int rates_total_min; // rates total min //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // Ergodic // graphic plot #1 SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA); // signal line: ul-period EMA of Ergodic // buffers for intermediate calculations SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS); // price array SetIndexBuffer(3,MtmBuffer,INDICATOR_CALCULATIONS); // q-period моментум SetIndexBuffer(4,EMA_MtmBuffer,INDICATOR_CALCULATIONS); // r-period of the 1st EMA SetIndexBuffer(5,DEMA_MtmBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA SetIndexBuffer(6,TEMA_MtmBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA SetIndexBuffer(7,AbsMtmBuffer,INDICATOR_CALCULATIONS); // q-period Momentum (absolute value) SetIndexBuffer(8,EMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // r-period of the 1st EMA (absolute value) SetIndexBuffer(9,DEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA (absolute value) SetIndexBuffer(10,TEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA (absolute value) /* //--- graphic plot #0 (Main) PlotIndexSetString(0,PLOT_LABEL,"Ergodic"); // label of graphic plot #0 PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_HISTOGRAM); // draw as a histogram PlotIndexSetInteger(0,PLOT_LINE_COLOR,Silver); // line color PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); // line style PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2); // line width //--- graphic plot #1 (Signal Line) PlotIndexSetString(1,PLOT_LABEL,"Signal"); // label of graphic plot #1 PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE); // draw as a line PlotIndexSetInteger(1,PLOT_LINE_COLOR,Red); // line color PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID); // line style PlotIndexSetInteger(1,PLOT_LINE_WIDTH,1); // line width */ //--- precision IndicatorSetInteger(INDICATOR_DIGITS,2); /* //--- horizontal levels IndicatorSetInteger(INDICATOR_LEVELS,2); // number of indicator levels IndicatorSetDouble(INDICATOR_LEVELVALUE,0,-25); // level #0 IndicatorSetDouble(INDICATOR_LEVELVALUE,1,25); // level #1 IndicatorSetInteger(INDICATOR_LEVELCOLOR,Silver); // level color IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DOT); // level style IndicatorSetInteger(INDICATOR_LEVELWIDTH,1); // level width IndicatorSetString(INDICATOR_LEVELTEXT,0,"Oversold"); // level #0 "Oversold" IndicatorSetString(INDICATOR_LEVELTEXT,1,"Overbought"); // level #1 "Overbought" //--- min/max values IndicatorSetDouble(INDICATOR_MINIMUM,-100); // min IndicatorSetDouble(INDICATOR_MAXIMUM,100); // max */ //--- begin1=q-1; // - MtmBuffer[], AbsMtmBuffer[] begin2=begin1+r-1; // or =(q-1)+(r-1) - EMA_...[] begin3=begin2+s-1; // or =(q-1)+(r-1)+(s-1) - DEMA_...[] begin4=begin3+u-1; // or =(q-1)+(r-1)+(s-1)+(u-1) - TEMA_...[], MainBuffer[] begin5=begin4+ul-1; // or =(q-1)+(r-1)+(s-1)+(u-1)+(ul-1) - SignalBuffer[] // rates_total_min=begin5+1; // rates total min //--- starting bar index for plot #0 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4); //--- starting bar index for plot #1 PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,begin5); //--- short indicator name string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u)+","+string(ul); IndicatorSetString(INDICATOR_SHORTNAME,"Blau_Ergodic("+shortname+")"); //--- OnInit done return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // rates total const int prev_calculated, // bars, calculated at previous call const datetime &Time[], // Time const double &Open[], // Open const double &High[], // High const double &Low[], // Low const double &Close[], // Close const long &TickVolume[], // Tick Volume const long &Volume[], // Real Volume const int &Spread[] // Spread ) { int i,pos; double value1,value2; //--- rates total if(rates_total<rates_total_min) return(0); //--- calculation of PriceBuffer[] CalculatePriceBuffer( AppliedPrice, // price type rates_total, // rates total prev_calculated, // bars, calculated at the previous call Open,High,Low,Close, // Open[], High[], Low[], Close[] PriceBuffer // price array ); //--- calculation of mtm and |mtm| if(prev_calculated==0) // at first call { pos=begin1; // starting from begin1 for(i=0;i<pos;i++) // pos { MtmBuffer[i]=0.0; // zero values AbsMtmBuffer[i]=0.0; // } } else pos=prev_calculated-1; // overwise calc only last bar // calculate MtmBuffer[] and AbsMtmBuffer[] for(i=pos;i<rates_total;i++) { MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)]; AbsMtmBuffer[i]=MathAbs(MtmBuffer[i]); } //--- EMA smoothing // r-period of the 1st EMA ExponentialMAOnBufferWB( rates_total, // rates total prev_calculated, // bars, calculated at previous call begin1, // starting index r, // smoothing period MtmBuffer, // input array EMA_MtmBuffer // output array ); ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,AbsMtmBuffer,EMA_AbsMtmBuffer); // s-period of 2nd EMA ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer); ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_AbsMtmBuffer,DEMA_AbsMtmBuffer); // u-period 3rd EMA ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,TEMA_MtmBuffer); ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_AbsMtmBuffer,TEMA_AbsMtmBuffer); //--- calculation of Ergodic (graphic plot #0) if(prev_calculated==0) // at first call { pos=begin4; // starting from begin4 for(i=0;i<pos;i++) // pos MainBuffer[i]=0.0; // zero values } else pos=prev_calculated-1; // overwise calculate only last bar // calculation of MainBuffer[] for(i=pos;i<rates_total;i++) { value1=100*TEMA_MtmBuffer[i]; value2=TEMA_AbsMtmBuffer[i]; MainBuffer[i]=(value2>0)?value1/value2:0; } //--- calculation of Signal Line (graphic plot #1) ExponentialMAOnBufferWB(rates_total,prev_calculated,begin4,ul,MainBuffer,SignalBuffer); //--- OnCalculate done. Return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Consideriamo nel dettaglio solo le modifiche e le aggiunte al codice "Blau_TSI.mq5".
1.4.3.1. Configurazioni dell'indicatore Ergodic (prezzo,q,r,s,u,ul) (modifiche e aggiunte al codice "Blau_TSI.mq5")
Impostazioni dell'indicatore (in generale)
Le configurazioni dell'indicatore Ergodic (prezzo,q,r,s,u,ul) differiscono dalle configurazioni della STI indicatore (prezzo,q,r,s,u) (Cfr. fig. 1.9):
- Specificare la finestra per la visualizzazione degli indicatori (nessuna modifica)
- Specificare il numero di grafici (viene aggiunto un grafico)
- Specificare il numero di buffer indicatori (il numero di buffer è aumentato)
- Dichiarazione degli array di indicatori (aggiunte all’array)
- Impostare una relazione: l’array di indicatori -> indicatore buffer -> plot grafico (ristrutturazione.)
- Descrivi le proprietà di ogni plot grafico (proprietà modificate, viene aggiunto un grafico).
- Specificare la precisione di visualizzazione dei valori dell'indicatore (nessuna modifica.)
- Specificare per ogni struttura grafica il numero di barre iniziali senza la visualizzazione al plot grafico (aggiunto un plot grafico.)
- Impostare i livelli orizzontali e descrivere le proprietà di ciascun livello orizzontale (nessuna modifica).
- Impostare il limite della scala separata della finestra dell'indicatore (nessuna modifica).
- Specificare il nome breve dell'indicatore (nome modificato.)
Fig. 1.9. Indicatore ergodico (prezzo,q,r,s,u,ul)
Configurazioni (modifiche)
Il codice "Blau_TSI.mq5" è stato modificato nei seguenti modi.
1. La breve descrizione del programma mql5 è cambiata:
#property description "Ergodic Oscillator (William Blau)" // description
2. È stato aggiunto un parametro di input:
input int ul=3; // ul- period of a Signal Line
3. (nella configurazione 11) viene apportata una modifica al nome breve dell'indicatore:
//--- short indicator name string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u)+","+string(ul); IndicatorSetString(INDICATOR_SHORTNAME,"Blau_Ergodic("+shortname+")");
Configurazioni (modifiche): Plot grafici (2, 6)
1. (nella configurazione 2) Aggiunto un altro grafico (Signal Line):
#property indicator_plots 2 // indicator plots
2. (nella configurazione 6) a) Modificate le proprietà del primo grafico #0 "Ergodic".
In precedenza, come modo per visualizzare la linea, usavamo (l’identificatore DRAW_LINE), ora usiamo un istogramma dalla linea zero (DRAW_HISTOGRAM dell'enumerazione ENUM_DRAW_TYPE)
Modificato il colore per la visualizzazione delle righe e della larghezza delle righe:
//--- graphic plot #0 (Main) #property indicator_label1 "Ergodic" // graphic plot #0 #property indicator_type1 DRAW_HISTOGRAM // draw as a histogram #property indicator_color1 Silver // histogram color #property indicator_style1 STYLE_SOLID // line style #property indicator_width1 2 // line width
b) Aggiunto un grafico #1 "Signal" (Signal Line):
//--- graphic plot #1 (Signal Line) #property indicator_label2 "Signal" // graphic plot #1 #property indicator_type2 DRAW_LINE // draw as a line #property indicator_color2 Red // line color #property indicator_style2 STYLE_SOLID // line style #property indicator_width2 1 // line width
Configurazioni (modifiche): I buffer dell’indicatore (3-5)
Le modifiche nella configurazione "indicator array -> indicator buffer -> struttura grafica":
1. (nella configurazione 3) Il numero di buffer è aumentato:
#property indicator_buffers 11 // number of buffers
2. (nella configurazione 4) Aggiunto un array di indicatori, necessario per calcolare e rendere i valori della linea di segnale:
double SignalBuffer[]; // Signal line: ul-period EMA of Ergodic (graphic plot #1)
3. (nella configurazione 5) La relazione "indicator array -> indicator buffer -> graphical structure" viene modificata:
//--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // Ergodic // graphic plot #1 SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA); // signal line: ul-period EMA of Ergodic // buffers for intermediate calculations SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS); // price array SetIndexBuffer(3,MtmBuffer,INDICATOR_CALCULATIONS); // q-period моментум SetIndexBuffer(4,EMA_MtmBuffer,INDICATOR_CALCULATIONS); // r-period of the 1st EMA SetIndexBuffer(5,DEMA_MtmBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA SetIndexBuffer(6,TEMA_MtmBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA SetIndexBuffer(7,AbsMtmBuffer,INDICATOR_CALCULATIONS); // q-period Momentum (absolute value) SetIndexBuffer(8,EMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // r-period of the 1st EMA (absolute value) SetIndexBuffer(9,DEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA (absolute value) SetIndexBuffer(10,TEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA (absolute value)
Impostazioni: Numero di barre iniziali senza il rendering (8)
- Il numero di barre iniziali senza il rendering della trama grafica #0 "Ergodic" non è cambiato. Il metodo di calcolo è stabilito nella Sezione 1.4.1.1.
- I metodi di calcolo del numero di barre iniziali senza il rendering del plot grafico #1 "Segnale" sono gli stessi. L'array SignalBuffer[] è il risultato dello smoothing dei dati significativi dell'array MainBuffer[] (il periodo di smoothing ul).
Poiché l'indicizzazione dell'array MainBuffer[] inizia da 0 e i dati significativi nell'array MainBuffer[] iniziano con l'indice (q-1)+(r-1)+(s-1)+(u-1), i dati significativi nell'array SignalBuffer[] iniziano con l'indice (q-1)+(r-1)+(s-1)+(u-1)+(ul-1).
La variabile globale begin5 viene dichiarata:
int begin1, begin2, begin3, begin4, begin5; // starting indexes
Calcolo (completo, vedere anche paragrafo 1.4.1.1):
//--- begin1=q-1; // - MtmBuffer[], AbsMtmBuffer[] begin2=begin1+r-1; // or =(q-1)+(r-1) - EMA_...[] begin3=begin2+s-1; // or =(q-1)+(r-1)+(s-1) - DEMA_...[] begin4=begin3+u-1; // or =(q-1)+(r-1)+(s-1)+(u-1) - TEMA_...[], MainBuffer[] begin5=begin4+ul-1; // or =(q-1)+(r-1)+(s-1)+(u-1)+(ul-1) - SignalBuffer[] // rates_total_min=begin5+1; // rates total min //--- starting bar index for plot #0 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4); //--- starting bar index for plot #1 PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,begin5);
1.4.3.2. Il calcolo dell'indicatore ergodico (prezzo,q,r,s,u,ul) (modifiche e aggiunte al codice "Blau_TSI.mq5")
Calcolo: L'algoritmo
L'algoritmo per il calcolo dell'indicatore Ergodic (prezzo,q,r,s,ul):
- Controlla se ci sono dati sufficienti per calcolare l'indicatore.
- Il calcolo dell'array di prezzi in base al tipo di prezzo specificato - riempimento dell'array PriceBuffer[].
- La determinazione della barra dell'indice, da cui iniziare/continuare il calcolo del Momentum q-period.
- Il calcolo del momento del periodo q e il suo valore assoluto - il riempimento di array MtmBuffer[] e AbsMtmBuffer[].
- Il primo smoothing con il metodo EMA (periodo r) - il riempimento di EMA_MtmBuffer [] e EMA_AbsMtmBuffer [] array.
- Il secondo smoothing con il metodo EMA (periodo s) - il riempimento di DEMA_MtmBuffer [] e DEMA_AbsMtmBuffer [] array.
- Il terzo metodo di smoothing con il metodo EMA (periodo u) - il riempimento di TEMA_MtmBuffer [] e TEMA_AbsMtmBuffer [] array.
- La determinazione della barra dell'indice, da cui iniziare/continuare il calcolo del True Strength Index.
- Il calcolo dell'Ergodico (True Strength Index) - il riempimento dell'array MainBuffer[] - il calcolo dei valori per il rendering del plot grafico #0.
- Il calcolo della linea del segnale - lo smoothing dell'Ergodico con il metodo EMA (periodo ul) - il riempimento dell'array SignalBuffer[] - il calcolo dei valori per il rendering del grafico #1.
L'essenza delle modifiche nell'algoritmo (brevemente) a) (vedi sezione 1) il requisito per la dimensione minima della serie di tempi di input dell'indicatore è cambiato; b) (vedi paragrafo 10) il calcolo della Linea di Segnale è cambiato.
Calcolo (modifica): Verificare se ci sono dati sufficienti per calcolare l'indicatore (1)
Non ci sono cambiamenti nell'algoritmo:
//--- rates total if(rates_total<rates_total_min) return(0);
I valori della variabile globale rates_total_min è stato calcolato (la dimensione minima della setta di tempi di input dell'indicatore; calcolata nella funzione OnInit() all'evento di inizializzazione):
rates_total_min=begin5+1; // the minimum size of the input timeseries of the indicator
Calcolo: linea di segnale (10)
//--- calculation of Signal Line (graphic plot #1)
ExponentialMAOnBufferWB(rates_total,prev_calculated,begin4,ul,MainBuffer,SignalBuffer);
2. Momentum Stocastico
Gli indicatori considerati (vedi allegato) sono divisi in due gruppi.
I. Indicatori, basati sullo Stocastico:
- Blau_TStoch.mq5 - Stocastico (q-period Stochastic; q-period Stochastic smussato);
- Blau_TStochI.mq5 - Indice Stocastico (Stocastico q-periodo normalizzato smussato);
- Blau_TS_Stochastic.mq5 - Oscillatore stocastico TS (basato sull'indice dello Stocastico).
II. Indicatori, basati sul Momentum Stocastico:
- Blau_SM.mq5 - Momentum Stocastico (Q-period Stochastic Momentum; q-period Stochastic Momentum smussato);
- Blau_SMI.mq5 - Stochastic Momentum Index (Momentum q-period normalizzato smussato);
- Blau_SM_Stochastic.mq5 - Oscillatore stocastico SM (basato sull'indice Stocastico Momentum).
2.1. Indicatori basati sullo Stocastico
La "Guida per l'utente al terminale client MetaTrader", nella sezione Analysis/Technical Indicators/Oscillators/Stochastic Oscillator" fornisce una descrizione del terminale client integrato MetaTrader 5 degli indicatori tecnici dell'oscillatore stocastico e delle modalità del suo utilizzo nell'analisi tecnica (vedi anche iStochastic.)
2.1.1. Oscillatore Stocastico di George Lane
Stocastico, oscilliatore stocastico (Stochastic, Stochastic Oscillator) - è un indicatore, che mostra il prezzo, in relazione alla fluttuazione del prezzo per i precedenti periodi q. L'autore e divulgatore dell'indicatore è George Lane.
Distinguere:
- Stocastico Veloce, a volte chiamato %K;
- Stocastico Lento (Linea di Segnale), a volte chiamato %D.
La formula di Stochastic di GeorgeLane:
price - LL(q)
%K = 100 * -------------
HH(q) - LL(q)
%D = SMA(%k, ul)
dove:
- % K - Stocastico Veloce;
- % D - Stocastico Lento (Linea del Segnale);
- prezzo - prezzo [chiusura] del periodo corrente;
- q - il numero di periodi di tempo del grafico dei prezzi utilizzato nel calcolo dello Stocastico;
- HH (q) - il valore massimo per i precedenti periodi q dei prezzi più alti per il periodo q;
- LL (q) - il valore minimo per i precedenti periodi q del prezzo più basso per il periodo q;
- SMA (% K, ul) - la media mobile semplice di ordine ul, applicata allo stocastico veloce (% K).
Secondo l'interpretazione di George Lane, l'idea di base è che durante la tendenza di un aumento dei prezzi (tendenza al rialzo), il prezzo tende a fermarsi, vicino ai massimi precedenti. Con la tendenza alla diminuzione dei prezzi (tendenza al ribasso), il prezzo tende a fermarsi, vicino ai minimi precedenti.
2.1.2. L'Oscillatore Stocastico di William Blau
Fig. 2.1. Gli indicatori di William Blau, basati sullo Stocastico
2.1.2.1. Stocastico
Stocastico - è la distanza dal prezzo [chiusura] del periodo corrente al punto più basso della gamma di fluttuazioni dei prezzi, per i precedenti periodi q. Il valore dello stocastico q-period mostradi quanto il prezzo viene spostato, rispetto al punto più basso dell'intervallo q-period delle fluttuazioni dei prezzi. I valori del periodo q Stocastico sono positivi o uguali a zero.
Fig. 2.2. Definizione dello Stocastico
La formula dello Stocastico del periodo q:
stoch(price,q) = price - LL(q)
dove:
- prezzo - prezzo [chiusura] del periodo corrente;
- q - il numero di periodi di tempo del grafico dei prezzi, coinvolti nel calcolo dello stocastico;
- LL (q) - il valore minimo, per i periodi q precedenti, del prezzo più basso per il periodo q.
La formula dello Stocastico q-period smussato:
TStoch(price,q,r,s,u) = EMA(EMA(EMA( stoch(price,q) ,r),s),u)
dove:
- prezzo - prezzo di [chiusura] - la base di prezzo del grafico dei prezzi;
- q - le barre numeriche, utilizzate nel calcolo dello Stocastico;
- stoch(price,q)=price-LL(q) - Stocastico q-period;
- EMA (stoch (prezzo,q),r) - primo smoothing - EMA del periodo r, applicata allo stocastico del periodo q;
- EMA (EMA(..., r),s) - il secondo smoothing - EMA del periodo s, applicata al risultato del 1° smoothing;
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing - EMA del periodo u, applicato al risultato del 2 ° smoothing.
TStoch(price,q,r,s,u) - Stocastico. Specifiche
- Nome del File: Blau_TStoch.mq5
- Nome: Indicatore Stocastico (q-periodo stocastico; q-periodo levigato stocastico), secondo William Blau.
- Parametri di Input:
- q - periodo, per il quale viene calcolato lo stocastico (per impostazione predefinita q = 5);
- r -periodo della 1a EMA, applicata allo Stocastico (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modifiche del rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, lo smoothing EMA non viene utilizzato;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
2.1.2.2. L’Indice Stocastico
L'indicatore dell'Indice Stocastico è lo stocastico normalizzato del periodo q smussato.
I valoridello stocastico del q-periodo smussato sono mappati in un formato percentuale (l'intervallo [0, 100]). Ogni valore dello stocastico q-period smussato è normalizzato dal valore della fascia di prezzo q-period. La normalizzazione permette di interpretare il valore dello stocastico q-period normalizzato smussato come il grado degli stati di ipercomprato/ipervenduto del mercato.
La formula dell'Indice Stocastico:
100 * EMA(EMA(EMA( price-LL(q) ,r),s),u) 100 * TStoch(price,q,r,s,u) TStochI(price,q,r,s,u) = ---------------------------------------- = ---------------------------------- EMA(EMA(EMA( HH(q)-LL(q) ,r),s),u) EMA(EMA(EMA( HH(q)-LL(q) ,r),s),u)
if EMA(EMA(EMA(HH(q)-LL(q),r),s),u)=0, then TStochI(price,q,r,s,u)=0
dove:
- prezzo - prezzo di [chiusura] - la base di prezzo del grafico dei prezzi;
- q - le barre numeriche, utilizzate nel calcolo dello Stocastico;
- LL (q) - il valore minimo del prezzo più basso per il periodo q;
- HH (q) - il valore massimo del prezzo più alto per il periodo q;
- stoch(q)=price-LL(q) - q-period Stochastic;
- TStoch(price,q,r,s,u) - q-period stocastico smussato tre volte;
- HH(q)-LL(q) - Fascia di Prezzo q-period;
- EMA (..., r) - il primo smoothing - l'EMA(r), applicato a:
- Stocastico del periodo q;
- alla Fascia di Prezzo del periodo q;
- EMA (EMA(..., r),s) - il secondo smoothing- l'EMA(e), applicato al risultato del 1o smoothing;
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing - EMA(u), applicato al risultato del 2o smoothing.
TStochI(price,q,r,s,u) - Indice Stocastico. Specifiche
- Nome del File: Blau_TStochI.mq5
- Nome: Indice Stocastico (stocastico q-period normalizzato smussato), secondo William Blau.
- Parametri di Input:
- q - periodo, per il quale viene calcolato lo stocastico (per impostazione predefinita q = 5);
- r -periodo della 1a EMA, applicata allo Stocastico (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering del plot grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- (opzionale) Due livelli (per impostazione predefinita 40 e 60) - aggiungere/rimuovere un livello; modificare il valore e la descrizione del livello, modificare lo stile del rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita 0) e superiore (per impostazione predefinita 100) della scala della finestra dell'indicatore separata (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, nel corrispondente periodo EMA, lo smoothing non verrà eseguito;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
2.1.2.3. Oscillatore Stocastico
La definizione dell'Oscillatore Stocastico:
TS_Stochastic(price,q,r,s,u) = TStochI(price,q,r,s,u)
SignalLine(price,q,r,s,u,ul) = EMA( TS_Stochastic(price,q,r,s,u) ,ul)
dove:
- TS_Stochastic() - Stocastico Veloce, %k - Indice Stocastico TStochI(price,q,r,s,u);
- SignalLine() - Slow Stochastic (Signal Line),% d - EMA del periodo ul, applicato allo Stocastico Veloce (% k);
- ul - linea di segnale EMA periodo - secondo William Blau, il valore ul deve essere uguale al periodo dell'ultimo significativo (> 1) EMA veloce stocastico.
TS_Stochastic(price,q,r,s,u,ul) - Oscillatore Stocastico. Specifiche
- Nome del File: Blau_TS_Stochastic.mq5
- Nome: Oscillatore Stocastico (basato sull'Indice Stocastico), secondo William Blau.
- Parametri di Input:
- plot grafico #0 - Stocastico veloce (indice stocastico),% k:
- q - periodo, per il quale viene calcolato lo Stocastico (per impostazione predefinita q = 5);
- r -period del 1° EMA, applicato allo Stocastico (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- plot grafico #1 - Slow Stochastic (Signal Line),% d:
- ul - periodo EMA Signal Line, applicato allo Stocastico Veloce (di default ul = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering di ogni plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- due livelli (per impostazione predefinita 40 e 60) - aggiungi/rimuovi un livello; modificare il valore e la descrizione del livello; cambiare lo stile del rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita 0) e superiore (per impostazione predefinita 100) della scala della finestra dell'indicatore separata (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, lo smoothing EMA non viene utilizzato;
- ul>0. Se ul = 1, allora le linee Slow Stochastic (Signal line) e Fast Stochastic sono le stesse;
- la dimensione minima dell'array di prezzi = (q-1 + r + s + u + ul-4 +1).
2.1.2.4. Continuità
L'Oscillatore Stocastico di William Blau include l'Oscillatore Stocastico di George Lane. Affinché il TS_Stochastic (William Blau) corrisponda all'Oscillatore Stocastico standard (George Lane), implementato in MetaTrader 5, è necessario specificare quanto segue:
TS_Stochastic( price=Close, q=KPeriod, r=1, s=1, u=1, ul=DPeriod )
Stochastic( KPeriod=q, DPeriod=ul, Slowing=1, price="Low/High", method="Exponential" )
Fig. 2.3. William Blau Stochastic Oscillator contiene l'Oscillatore Stocastico di George Lane
2.1.2.5. Il codice dell'Oscillatore Stocastico
Sull'esempio dell'indicatore TS_Stochastic (prezzo,q,r,s,u,ul):
1) La relazione tra gli array di indicatori, i buffer di indicatori e i plot grafici:
//--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // fast Stochastic // graphic plot #1 SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA); // slow Stochastic: ul-period EMA of the fast Stochastic // buffers, used for intermediate calculations SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS); // price array SetIndexBuffer(3,LLBuffer,INDICATOR_CALCULATIONS); // min value (q bars) SetIndexBuffer(4,HHBuffer,INDICATOR_CALCULATIONS); // max value (q bars) SetIndexBuffer(5,StochBuffer,INDICATOR_CALCULATIONS); // q-period Stochastic SetIndexBuffer(6,EMA_StochBuffer,INDICATOR_CALCULATIONS); // r-period of the 1st EMA SetIndexBuffer(7,DEMA_StochBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA SetIndexBuffer(8,TEMA_StochBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA SetIndexBuffer(9,HHLLBuffer,INDICATOR_CALCULATIONS); // q-period price range SetIndexBuffer(10,EMA_HHLLBuffer,INDICATOR_CALCULATIONS); // r-period of the 1st EMA (price range) SetIndexBuffer(11,DEMA_HHLLBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA (price range) SetIndexBuffer(12,TEMA_HHLLBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA (price range)
2) L'algoritmo di calcolo per lo Stocastico q-period e il q-period Fascia di Prezzo:
// calculation of StochBuffer[], HHLLBuffer[], LLBuffer[], HHBuffer[] for(i=pos;i<rates_total;i++) { // LLBuffer[] - search for the minimal price (q bars) // HHBuffer[] - search for the maximal price (q bars) min=1000000.0; max=-1000000.0; for(k=i-(q-1);k<=i;k++) { if(min>Low[k]) min=Low[k]; if(max<High[k]) max=High[k]; } LLBuffer[i]=min; HHBuffer[i]=max; // StochBuffer[] - q-period Stochastic StochBuffer[i]=PriceBuffer[i]-LLBuffer[i]; // HHLLBuffer[] - q-period price range HHLLBuffer[i]=HHBuffer[i]-LLBuffer[i]; }
2.2. Indicatori, basati sul Momentum Stocastico
Fig. 2.4. Gli indicatori di William Blau, basati sul Momentum Stocastico
2.2.1. Momentum Stocastico
Il Momentum Stocastico (Stochastic Momentum, SM) - è la distanza dal prezzo del periodo corrente alla metà della fascia di prezzo nei precedenti periodi q. Il valore del Momentum Stocastico del periodo q mostra la posizione del prezzo nella fascia di prezzo.
Il segno del momentum stocastico q-period mostra la posizione del prezzo, rispetto alla metà della fascia di prezzo q-period: un Momentum Stocastico positivo - il prezzo è sopra il punto medio, un negativo - il prezzo è al di sotto del punto medio.
Fig. 2.5. La definizione del Momentum Stocastico
La formula del Momentum Stocastico del periodo q:
sm(price,q) = price - 1/2 * [LL(q) + HH(q)]
dove:
- prezzo - prezzo [chiusura] del periodo corrente;
- q - il numero di barre, utilizzato nel calcolo del Momentum Stocastic;
- LL (q) - il valore minimo del prezzo più basso per il periodo q;
- HH (q) - il valore massimo dei prezzi più alti per il periodo q;
- 1/2* [LL(q)+HH (q)] - la metà della fascia di prezzo del periodo q.
La formula dello Stocastico Momentum q-period smussato:
SM(price,q,r,s,u) = EMA(EMA(EMA( sm(price,q) ,r),s),u)
dove:
- prezzo - prezzo di [chiusura] - la base di prezzo del grafico dei prezzi;
- q - il numero di barre, utilizzato nel calcolo del Momentum Stocastico;
- sm(price,q)=price-1/2*[LL(q)+HH(q)] - il q-period Momentum Stocastico;
- EMA (sm(price,q),r) - il primo smoothing - l'EMA(r), applicato al Momentum Stocastico q-period;
- EMA (EMA(..., r),s) - il secondo smoothing- l'EMA(e), applicato al risultato del 1° smoothing;
- EMA(EMA(EMA(sm(q),r),s),u) - il terzo smoothing - l'EMA(u), applicata al risultato del 2° smoothing.
2.2.1.2. SM(price,q,r,s,u) - Momentum Stocastico. Specifiche
- Nome del File: Blau_SM.mq5
- Nome: Stochastic Momentum Indicator (q-period stochastic momentum, q-period stochastic momentum smussato), secondo William Blau.
- Parametri di Input:
- q - il periodo in base al quale viene calcolato il momentum stocastico (per impostazione predefinita q = 5);
- r - periodo dell'EMA 1-st, applicato al Momentum Stocastico (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modifiche del rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, lo smoothing EMA non viene utilizzato;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
2.2.2. L’Indice del Momentum Stocastico
Lo Stochastic Momentum Index (SMI) - è un indicatore di un tasso stocastico normalizzato (momentum stocastico normalizzato del periodo q smussato). I valoridel momento stocastico levigato del periodo q è dato nel formato percentuale (intervallo di visualizzazione [-100, 100]).
Ogni valore dello Stocastico Momentum q-period smussato è normalizzato dal valore della metà dell'intervallo q-period delle fluttuazioni dei prezzi. La normalizzazione consente di interpretare il valore di SMI come un grado di un livello di ipercomprato (valore positivo) o di un livello di ipervenduto (negativo) del mercato.
La formula dell'Indice di Momentum Stocastico:
100 * EMA(EMA(EMA( price-1/2*[LL(q)+HH(q)] ,r),s),u) 100 * SM(price,q,r,s,u) SMI(price,q,r,s,u) = ---------------------------------------------------- = ---------------------------------------- EMA(EMA(EMA( 1/2*[HH(q)-LL(q)] ,r),s),u) EMA(EMA(EMA( 1/2*[HH(q)-LL(q)] ,r),s),u)
if EMA(EMA(EMA(1/2*[HH(q)-LL(q)],r),s),u)=0, then SMI(price,q,r,s,u)=0
dove:
- prezzo - prezzo di [chiusura] - la base di prezzo del grafico dei prezzi;
- LL (q) - il valore minimo del prezzo più basso per il periodo q;
- HH (q) - il valore massimo dei prezzi più alti per il periodo q;
- sm(price,q)=price-1/2*[LL(q)+HH(q)] - il q-period Momentum Stocastico;
- SM(price,q,r,s,u) - q-period Stochastic Momentum smussato tre volte;
- HH(q)-LL(q) - fascia di prezzo q-period;
- 1/2* [LL (q)+HH(q)] - la metà della fascia di prezzo del periodo q;
- 1/2*[HH(q)-LL(q)] - metà del periodo q della fascia di prezzo;
- EMA (..., r) - il primo smoothing - EMA(r), applicato a:
1) il Momentum Stocastico del periodo q
2) metà della Fascia di Prezzo del periodo q; - EMA (EMA(..., r),s) - il secondo smoothing - EMA(s), applicata al risultato del 1° smoothing;
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing - EMA(u), applicato al risultato del 2o smoothing.
2.2.2.2. SMI(price,q,r,s,u) - Indice Stocastico Momentum. Specifiche
- Nome del File: Blau_SMI.mq5
- Nome: Stochastic Momentum Index (q-period Stochastic Momentum smussato) secondo William Blau.
- Parametri di Input:
- q - il periodo in base al quale viene calcolato il Momentum Stocastico (per impostazione predefinita q = 5);
- r - periodo di 1-st EMA, applicato al Momentum Stocastico (di default r = 20);
- s - periodo della 2a EMA, applicata ai risultati del 1° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato ai risultati del 2 ° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- (opzionale) Due livelli (per impostazione predefinita -40 e +40) - aggiungere/rimuovere un livello; modificare il valore e la descrizione del livello, modificare lo stile del rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita -100) e superiore (per impostazione predefinita 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, nel corrispondente periodo EMA, lo smoothing non verrà eseguito;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
2.2.3. L’Oscillatore Stocastico
La definizione dell'Oscillatore Stocastico:SM_Stochastic(price,q,r,s,u) = SMI(price,q,r,s,u)
SignalLine(price,q,r,s,u,ul) = EMA( SM_Stochastic(price,q,r,s,u) ,ul)
dove:
- SM_Stochastic() - Stochastic Momentum Index SMI(price,q,r,s,u);
- SignalLine() - Signal Line - EMA del periodo, ul, applicato all’Indice del Momentum Stocastico;
- ul - linea di segnale EMA a periodo - secondo William Blau, il valore ul deve essere uguale al periodo dell'ultimo indice EMA significativo (>1) del tasso stocastico.
2.2.3.1. SM_Stochastic(price,q,r,s,u,ul) - Oscillatore Stocastico. Specifiche
- Nome del File: Blau_SM_Stochastic.mq5
- Il nome: Oscillatore Stocastico (basato sul Momentum Stocastico), secondo William Blau.
- Parametri di Input:
- grafico #0 - l’Indice Stocastico del Momentum:
- q - il periodo in base al quale viene calcolato il momentum stocastico (per impostazione predefinita q = 5);
- r - periodo della 1a EMA, applicato al Momentum stocastico (di default r = 20);
- s - periodo della 2a EMA, applicato al risultato del 1° smoothing (di default s = 5);
- u - periodo del 3a EMA, applicato al risultato del 2° smoothing (per impostazione predefinita, u = 3);
- plot grafico #1 - la linea del segnale:
- ul - linea di segnale EMA a periodo, per quanto riguarda l'indice del tasso stocastico (di default ul = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering di ogni plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- due livelli (per impostazione predefinita -40 e +40) - aggiungi/rimuovi un livello; modificare il valore e la descrizione del livello, modificare lo stile di rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita -100) e superiore (per impostazione predefinita 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, nel corrispondente periodo EMA, lo smoothing non verrà eseguito;
- ul>0. Se ul = 1, allora la linea del segnale coincide con l'indice del tasso stocastico;
- la dimensione minima dell'array di prezzi = (q-1 + r + s + u + ul-4 +1).
2.2.4. Il codice dell'Oscillatore Stocastico
Il SM_Stochastic (prezzo, q, r, s, u, ul):
1) La relazione tra gli array di indicatori, i buffer di indicatori e i plot grafici:
//--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // Stochastic Momentum Index // graphic plot #1 SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA); // Signal Line: ul-period EMA of Stochastic Momentum Index // buffers for intermediate calculations (not used for plotting) SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS); // price array SetIndexBuffer(3,LLBuffer,INDICATOR_CALCULATIONS); // minimal price value (q bars) SetIndexBuffer(4,HHBuffer,INDICATOR_CALCULATIONS); // maximal price value (q bars) SetIndexBuffer(5,SMBuffer,INDICATOR_CALCULATIONS); // q-period Stochastic Momentum SetIndexBuffer(6,EMA_SMBuffer,INDICATOR_CALCULATIONS); // r-period of the 1st EMA SetIndexBuffer(7,DEMA_SMBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA SetIndexBuffer(8,TEMA_SMBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA SetIndexBuffer(9,HalfHHLLBuffer,INDICATOR_CALCULATIONS); // half of price range (q bars) SetIndexBuffer(10,EMA_HalfHHLLBuffer,INDICATOR_CALCULATIONS); // r-period of the 1st EMA (half of price range) SetIndexBuffer(11,DEMA_HalfHHLLBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA (half of price range) SetIndexBuffer(12,TEMA_HalfHHLLBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA (half of price range)
2) L'algoritmo di calcolo del Momentum Stocastico q-period e metà della fascia di prezzo q-period:
//--- calculation of q-period Stochastic Momentum and half of price range (q bars) if(prev_calculated==0) // at first call { pos=begin1; // starting from 0 for(i=0;i<pos;i++) // pos values { SMBuffer[i]=0.0; // zero values HalfHHLLBuffer[i]=0.0; // LLBuffer[i]=0.0; // HHBuffer[i]=0.0; // } } else pos=prev_calculated-1; // overwise calculate only last value // calculation of SMBuffer[], HalfHHLLBuffer[], LLBuffer[], HHBuffer[] for(i=pos;i<rates_total;i++) { // calculation of LLBuffer[] - search for the minimal price (q bars) // calculation of HHBuffer[] - search for the maximal price (q bars) min=1000000.0; max=-1000000.0; for(k=i-(q-1);k<=i;k++) { if(min>Low[k]) min=Low[k]; if(max<High[k]) max=High[k]; } LLBuffer[i]=min; HHBuffer[i]=max; // calculation of SMBuffer[] - q-period Stochastic Momentum SMBuffer[i]=PriceBuffer[i]-0.5*(LLBuffer[i]+HHBuffer[i]); // calculation of HalfHHLLBuffer[] - half of price range (q bars) HalfHHLLBuffer[i]=0.5*(HHBuffer[i]-LLBuffer[i]); }
3. L'indicatore di deviazione dalla tendenza
Gli indicatori considerati (vedi allegato) sono divisi in due gruppi.
I. Indicatori, basati su una deviazione dalla tendenza del mercato.
- Blau_MDI.mq5- Un indicatore di una deviazione media dal trend (deviazione media, deviazione media mobile);
- Blau_Ergodic_MDI.mq5- Oscillatore MDI ergodico (basato sulla deviazione media).
II. Indicatori, basati sulle Medie Mobili Convergenza/Divergenza.
- Blau_MACD.mq5- Convergenza/Divergenza delle Medie Mobili (MACD; MACD smussato);
- Blau_Ergodic_MACD.mq5- Ergodic MACD-Oscillator (basato sull'indicatore MACD).
3.1. Indicatori, basati sulla deviazione dalle tendenze del mercato
Fig. 3.1. Gli indicatori di William Blau si basano su una deviazione dalle tendenze del mercato
3.1.1. L'Indicatore di Deviazione Media
La deviazione media dal trend è la distanza tra il prezzo e l'EMA (media mobile esponenziale smussata) del periodo r, applicata al prezzo.
L'andamento dello sviluppo del mercato: l'EMA(r), applicato al prezzo viene utilizzato per determinare la tendenza al rialzo (aumento esponenziale), o la tendenza al ribasso (diminuzione esponenziale) dei prezzi.
La media mobile attenua la curva dei prezzi, ma un leggero aumento del periodo della media mobile porta a un ritardo, che è chiaramente visibile nei punti di inversione dei prezzi (vedi inoltre 1.1.1, Fig. 1.2). Il valore della deviazione media dal trend mostra la distanza dall'EMA(r), applicata al prezzo.
Il segno della deviazione media dal trend mostra la posizione del prezzo, rispetto all'EMA(r) applicata al prezzo: una deviazione positiva dal trend - il prezzo è superiore all'esponente, negativo - il prezzo è inferiore all'esponente.
La formula per la deviazione media dalla tendenza:
md(price,r) = price - EMA(price,r)
dove:
- prezzo - prezzo del periodo corrente;
- EMA (prezzo,r) - l'andamento del mercato - EMA del periodo r, applicato al prezzo.
Vedere nella "Guida per l'utente al terminale client MetaTrader", nella sezione "Anatyics/Technical Indicators/Trend Indicators":
Un indice simile è usato da Alexander Elder nei suoi indicatori Bears Power e Bulls Power. Vedere nella "Guida per l'utente al terminale client MetaTrader" nella sezione "Analisi/Indicatori tecnici/Oscillatori":
L'indicatore della deviazione media dalla tendenza (Mean Deviation Index, MDI) - è una deviazione media smussata dalla tendenza del mercato.
La formula dell'indicatore della deviazione media dalla tendenza:
MDI(price,r,s,u) = EMA(EMA( md(price,r) ,s),u) = EMA(EMA( price-EMA(price,r) ,s),u)
dove:
- prezzo - prezzo di [chiusura] - la base di prezzo del grafico dei prezzi;
- EMA (prezzo, r) - l'andamento del mercato - il primo smoothing dell'EMA(r), applicato al prezzo;
- md (prezzo,r) = prezzo-EMA (prezzo,r) - la deviazione media dalla tendenza - la deviazione del prezzo dall'EMA(r), applicata al prezzo;
- EMA (md (prezzo, r), s) - il secondo smoothing - l'EMA (s), applicato alla deviazione media dalla tendenza;
- EMA (EMA (md(price,r),s),u) - il terzo smoothing - l'EMA(u), applicato al risultato del secondo smoothing.
3.1.1.3. MDI(price,r,s,u) - Indice di Deviazione Media. Specifiche
- Nome del File: Blau_MDI.mq5
- Nome: L'indicatore della deviazione media dal mercato (deviazione media; una deviazione media smussata), secondo William Blau.
- Parametri di Input:
- r - periodo della 1a EMA, applicato al prezzo (di default r=20);
- s - periodo della 2a EMA, applicato alla deviazione media (per impostazione predefinita, s = 5);
- u - periodo del 3a EMA, applicato al risultato del 2° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modifiche del rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori").
- Limitazioni:
- r>1;
- s>0, u>0. Se s o u sono pari a 1, lo smoothing EMA non viene utilizzato;
- la dimensione minima dell’array dei prezzi = (r+s+u-3+1).
3.1.2. Ergodic MDI-oscillator
Definizione dell'oscillatore MDI Ergodic:Ergodic_MDI(price,r,s,u) = MDI(price,r,s,u)
SignalLine(price,r,s,u,ul) = EMA( Ergodic_MDI(price,r,s,u) ,ul)
dove:
- Ergodic_MDI() - Ergodic - Indice di Deviazione Media MDI(price,r,s,u);
- La SignalLine() - una linea di Segnale - EMA del periodo ul, applicata all'Ergodico;
- ul - un periodo EMA di una linea di segnale - secondo William Blau, il valore ul deve essere uguale al periodo dell'ultimo significativo (>1) dell'EMA ergodica.
3.1.2.2. Ergodic_MDI(price,r,s,u,ul) - oscillatore MDI Ergodico. Specifiche
- Nome del File: Blau_Ergodic_MDI.mq5
- Nome: L'oscillatore MDI Ergodico (basato sull'indice di deviazione media), secondo William Blau.
- Parametri di Input:
- grafico #0 - Ergodico (l'indicatore della deviazione media dalla tendenza):
- r - periodo della 1a EMA, applicato al prezzo (per impostazione predefinita r=20);
- s - periodo del 2a EMA, applicata al risultato del 1° smoothing (per impostazione predefinita, s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- plot grafico #1 - Linea di Segnale:
- ul - linea di segnale EMA periodo, applicata all'Ergodico (di default ul = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- cambia lo stile del rendering di ogni struttura grafica - il colore, la larghezza, lo stile della linea (la scheda "Colori").
- Limitazioni:
- r>1;
- s>0, u>0. Se s o u sono pari a 1, lo smoothing EMA non viene utilizzato;
- ul>0. Se ul = 1, allora la linea del segnale e le linee ergodiche sono le stesse;
- la dimensione minima dell’array dei prezzi = (r+s+u+ul-4+1).
3.1.3. Il codice dell'oscillatore Ergodico
Ad esempio, consideriamo l'indicatore Ergodic_MDI (prezzo, r, s, u, ul):
1) La relazione tra gli array di indicatori, i buffer di indicatori e i plot grafici:
//--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // ergodic: u-period 3rd EMA // graphic plot #1 SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA); // signal line: ul-period EMA of Ergodic // buffers for intermediate calculations; not used for plotting SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS); // price array SetIndexBuffer(3,EMA_PriceBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA (price) SetIndexBuffer(4,MDBuffer,INDICATOR_CALCULATIONS); // среднее отклонение SetIndexBuffer(5,DEMA_MDBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA
2) L'algoritmo per il calcolo della deviazione media:
//--- calculation of the mean deviation if(prev_calculated==0) // at first call { pos=begin2; // starting from 0 for(i=0;i<pos;i++) // pos data MDBuffer[i]=0.0; // zero values } else pos=prev_calculated-1; // overwise calculate only last bar // r-period 1st EMA: calculation of EMA_PriceBuffer[] ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,PriceBuffer,EMA_PriceBuffer); // calculation of MDBuffer[] for(i=pos;i<rates_total;i++) MDBuffer[i]=PriceBuffer[i]-EMA_PriceBuffer[i];
3.2. Indicatori basati sulla Convergenza/Divergenza della Media Mobile
Fig. 3.2. Gli indicatori di William Blau si basano sulla Convergenza/Divergenza delle Medie Mobili
3.2.1. L'indicatore della Convergenza/Divergenza delle Medie Mobili
La Convergenza/Divergenza della Media Mobile (Moving Average Convergence/Divergence, MACD) - è la differenza tra due medie mobili esponenzialmente levigate: l'EMA veloce (s) l'EMA lento (r), applicato al prezzo.
Il segno MACD mostra laposizione degli EMA veloci, rispetto all'EMA(r) lenta: un MACD positivo - EMA(s) è sopra l'EMA(r), un MACD negativo - EMA(s) è sotto EMA(r). Variazione del MACD del valore assoluto: un aumento| MACD| indica la discrepanza tra le medie mobili, una diminuzione| MACD| indica una convergenza delle medie mobili.
La formula della Convergenza/Divergenza della Media Mobile:
macd(price,r,s) = EMA(price,s) - EMA(price,r)
s < r
dove:
- prezzo - prezzo [chiusura] del periodo corrente;
- EMA(price,r) - EMA(r) Lenta, applicata al prezzo;
- EMA(price,s) - EMA(s) Veloce(i), applicata al prezzo.
L'indicatore MACD mostra la relazione tra le medie esponenziali veloci e lente (convergenza/divergenza attenuata delle medie mobili).
La formula dell'indicatore MACD:
MACD(price,r,s,u) = EMA( macd(price,r,s) ,u) = EMA( EMA(price,s)-EMA(price,r) ,u)
s < r
dove:
- prezzo - prezzo di [chiusura] - il prezzo del grafico dei prezzi;
- EMA(price,r) - il primo smoothing - la lenta esponenziale dell'EMA(r), applicato al prezzo;
- EMA (prezzo, s) - il secondo smoothing - la veloce EMA (s), s, applicato al prezzo;
- macd(r,s)=EMA(price,s)-EMA (price,r) - il MACD;
- EMA(macd (r,s),u) - il terzo smoothing - l'EMA(u), applicato al MACD: un’EMA veloce (price,s) e un’EMA lenta (price,r).
3.2.1.1. MACD(price,r,s,u) - l'indicatore di Convergenza/Divergenza della Media Mobile. Specifiche
- Nome del File: Blau_MACD.mq5
- Nome: L'indicatore MACD (MACD; MACD levigato), secondo William Blau.
- Parametri di Input:
- r - periodo del 1 ° EMA (lento), applicata al prezzo (di default r = 20);
- s - periodo della 2 ° EMA (veloce), applicata al prezzo (di default s = 5)
- u - periodo della 3° EMA, applicata alle medie mobili convergenza/divergenza (di default u = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- modifiche del rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori").
- Limitazioni:
- r>1, s>1;
- s <r (limite dai requisiti della teoria, non è controllato a livello di programma);
- u>0. se u = 1, lo smoothing non viene eseguito;
- la dimensione minima dell’array dei prezzi = ([max(r,s)]+u-2+1).
3.2.2. Oscillatore MACD Ergodico:
La definizione dell'oscillatore MACD Ergodico:Ergodic_MACD(price,r,s,u) = MACD(price,r,s,u)
SignalLine(price,r,s,u,ul) = EMA( Ergodic_MACD(price,r,s,u) ,ul)
dove:
- Ergodic_MACD () - Ergodico - è un indicatore di convergenza/divergenza delle medie mobili MACD(price,r,s,u);
- La SignalLine() - una Linea di Segnale - un’EMA(ul), applicata all'ergodico;
- ul - un periodo EMA di una linea di segnale - secondo William Blau, il valore ul deve essere uguale al periodo dell'ultimo significativo (>1) dell'ergodico EMA.
La "Guida per l'utente al terminale client MetaTrader", nella sezione "Analytics/Technical Indicators/Oscillators/MACD" di title descrive l'indicatore tecnico Convergenza/Divergenza delle medie mobili (MACD), integrato nel terminale client MetaTrader 5, e come utilizzarlo nell'analisi tecnica (vedi anche iMACD.)
In contrasto con il MACD standard, William Blau utilizza la media mobile esponenzialmente levigata (nel MACD standard viene utilizzata la media mobile semplice).
3.2.2.1. Ergodic_MACD(price,r,s,u,ul) - Oscillatore MACD Ergodic. Specifiche
- Nome del File: Blau_Ergodic_MACD.mq5
- Nome: Oscillatore MACD Ergodico (basato sull'indicatore di convergenza/divergenza delle medie mobili), secondo William Blau.
- Parametri di Input:
- grafico #0 - Ergodico (le medie mobili convergenza/divergenza):
- r - periodo del 1 ° EMA (lento), applicata al prezzo (di default r = 20);
- s - periodo del 2 ° EMA (veloce) applicata al prezzo (di default s = 5)
- u - periodo della 3° EMA, applicata alle medie mobili convergenza/divergenza (di default u = 3);
- plot grafico #1 - la Linea del Segnale:
- ul - punto linea di segnale EMA, viene applicato all'ergodico (di default ul = 3);
- AppliedPrice - tipo di prezzo (default AppliedPrice=PRICE_CLOSE).
- Inoltre:
- visualizzato in una finestra separata;
- cambia lo stile del rendering di ogni struttura grafica - il colore, la larghezza, lo stile della linea (la scheda "Colori").
- Limitazioni:
- r>1, s>1;
- s <r (limite dai requisiti della teoria, non è controllato a livello di programma);
- u>0. se u = 1, lo smoothing non viene eseguito;
- ul>0. Se ul = 1, allora la linea del segnale coincide con l'ergodico;
- la dimensione minima dell’array dei prezzi =([max(r,s)]+u+ul-3+1).
3.2.3. Il codice dell'Oscillatore MACD Ergodico
Ad esempio, consideriamo l'indicatore Ergodic_MACD (prezzo, r, s, u, ul):
1) Il collegamento tra l’array di indicatori, i buffer di indicatori e i plot grafici:
//--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // Ergodic: u-period 3rd EMA // graphic plot #1 SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA); // Signal Line: ul-period EMA, applied to Ergodic // buffers for intermediate calculations SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS); // price array SetIndexBuffer(3,EMA1_PriceBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA (slow), applied to price SetIndexBuffer(4,EMA2_PriceBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (fast), applied to price SetIndexBuffer(5,MACDBuffer,INDICATOR_CALCULATIONS); // moving averages convergence/divergence
2) L'algoritmo di convergenza/divergenza delle medie mobili:
//--- calculation of moving average convergence/divergence if(prev_calculated==0) // at first call { pos=begin2; // for(i=0;i<pos;i++) // pos MACDBuffer[i]=0.0; // zero values } else pos=prev_calculated-1; // overwise calculate only last value // r-period 1st EMA: calculation of EMA1_PriceBuffer[] ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,PriceBuffer,EMA1_PriceBuffer); // s-period 2nd EMA: calculation of EMA2_PriceBuffer[] ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,s,PriceBuffer,EMA2_PriceBuffer); // calculation of MACDBuffer[] for(i=pos;i<rates_total;i++) MACDBuffer[i]=EMA2_PriceBuffer[i]-EMA1_PriceBuffer[i];
3.3. Addizione
Nel calcolare l'oscillatore MDI Ergodico e l'oscillatore MACD, secondo William Blau, la normalizzazione non viene utilizzata (per riferimento vedi pp. 1.2.1, 1.3.1). Pertanto, l'ergodico MDI-Oscillator e il MACD-Oscillator non possono essere utilizzati per interpretare il grado di ipercomprato ipervenduto del mercato.
Ad esempio, le raccomandazioni per l'utilizzo dell'indicatore MACD segnalano dalla "Guida dell'Utente al Terminale Client MetaTrader" della "Analytics/Technical Indicators/Oscillators/MACD":
Il MACD è utile anche come un indicatore di ipercomprato/ipervenduto. Quando la media mobile di breve periodo si allontana notevolmente dalla media mobile più lunga (cioè, il MACD sale), è probabile che il prezzo degli strumenti finanziari usati è sovra-esteso e tornerà presto a livelli più realistici.
in questo caso, dal punto di vista dell'analisi tecnica.
4. Candlestick Momentum
Gli indicatori considerati (vedi allegato) sono divisi in due gruppi.
- Blau_CMtm.mq5- è l'indicatore Candlestick Momentum (momentum del q-period candlestick; q-period Candlestick Momentum smussato);
- Gli indici (q-period Candlestick Momentum normalizzato e smussato):
- Blau_CMI.mq5- il Candlestick Momentum Index (normalizzazione per il valore assoluto del q-period Candlestick Momentum);
- Blau_CSI.mq5- il Candlestick Index (normalizzato dalla lunghezza q-period Candlestick);
- L'oscillatore ergodico del modello a candele
- Blau_Ergodic_CMI.mq5- l'Oscillatore CMI Ergodico (basato sul Candlestick Momentum Index);
- Blau_Ergodic_CSI.mq5- l'Oscillatore CMI Ergodico (basato sul Candlestick Index).
Fig. 4.1. Indicatori di William Blau, basati sul Candlestick Momentum (normalizzato dal valore assoluto del Candlestick Momentum q-period)
Fig. 4.2. Indicatori di William Blau, basati sul Candlestick Momentum (normalizzato dalla lunghezza del Candlestick q-period)
4.1. Il Momentum Candlestick
4.1.1. La definizione del Candlestick Momentum
Il Momentum (vedi p. 1.1) - è la differenza tra il prezzo corrente (di solito, il prezzo di chiusura di oggi) e il prezzo precedente (di solito il prezzo di chiusura di ieri). Il momentum può riflettere la variazione di prezzo in qualsiasi periodo di tempo del grafico dei prezzi.
Il Candlestick Momentum (secondo William Blau) - è la differenza tra il prezzo di chiusura e il prezzo di apertura, nello stesso periodo (all'interno di una candela). Il segno del Candlestick Momentum mostra la direzione del cambiamento di prezzo: un Candlestick Momentum positivo - il prezzo è aumentato nel periodo, un negativo - il prezzo è diminuito nel corso del periodo.
La formula del Candlestick Momentum:
cmtm = close - open
dove:
- chiudi - il prezzo di chiusura del periodo [corrente] del (modello a candele);
- open - il prezzo di apertura del periodo [corrente] del (modello a candele).
Dal punto di vista dell'universalità, estendiamo la definizione del candlestick momentum:
- Il Candlestick Momentum può riflettere la variazione di prezzo per qualsiasi periodo di tempo del grafico dei prezzi;
- La base di prezzo (il prezzo di chiusura, il prezzo di apertura) può essere arbitraria.
Fig. 4.3. La definizione del Candlestick q-period
La formula del q-period Candlestick Momentum:
cmtm(price1,price2,q) = price1 - price2[q-1]
dove:
- q - è il numero di barre del grafico dei prezzi, utilizzato nel calcolo del Candlestick Momentum;
- prezzo1 - prezzo [chiusura] alla fine del periodo q;
- prezzo2[q-1] - prezzo[apertura] all'inizio del periodo q.
La formula del q-period Candlestick Momentum smussato:
CMtm(price1,price2,q,r,s,u) = EMA(EMA(EMA( cmtm(price1,price2,q) ,r),s),u)
dove:
- q - il numero di barre del grafico dei prezzi, utilizzato nel calcolo del periodo q di Candlestick Momentum;
- prezzo1 - prezzo [chiusura] alla fine del periodo q;
- prezzo2 - prezzo[apertura] all'inizio del periodo q;
- cmtm(price1,price2,q)=price1-price2[q-1] - q-period Candlestick Momentum;
- EMA (cmtm (prezzo1, prezzo2, q), r) - il primo smoothing - EMA(r), applicato al q-period Candlestick Momentum;
- EMA (EMA(..., r),s) - il secondo smoothing - EMA(s), applicata al risultato del 1° smoothing;
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing - EMA(u), applicato al risultato del 2o smoothing.
- Nome del File: Blau_CMtm.mq5
- Nome: L'indicatore Candlestick Momentum (q-period Candlestick Momentum smussato), secondo William Blau.
- Parametri di Input:
- q - il periodo di Candlestick Momentum (di default q = 1);
- r - periodo del 1° EMA, applicato al q-period Candlestick Momentum (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice1 - tipo di prezzo [chiusura] (di default AppliedPrice=PRICE_CLOSE);
- AppliedPrice2 - tipo di prezzo [apertura] (di default AppliedPrice=PRICE_OPEN).
- Inoltre:
- visualizzato in una finestra separata;
- modifiche del rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, lo smoothing EMA non viene utilizzato;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
4.2. Momentum normalizzato del Candlestick
4.2.1. Candlestick Momentum Index
Il Candlestick Momentum Index (CMI) - è il periodo q normalizzato Candlestick Momentum.
I valori del momentum smussato del candlestick del periodo q sono dati in percentuale (intervallo di mappatura [-100, 100]). Ogni valore del momentum smussato del Candlestick q-period è normalizzato dal valore del q-period Candlestick Momentum, preso nel valore assoluto. La normalizzazione consente di interpretare il valore CMI come un grado di ipercomprato (valore positivo) o ipervenduto (valore negativo).
La formula per il Candlestick Momentum Index:
100 * EMA(EMA(EMA( cmtm(price1,pric2,q) ,r),s),u) 100 * CMtm(price1,pric2,q,r,s,u) CMI(price1,price2,q,r,s,u) = –––––––––––-------------––––––––-–––––––––––––––– = –––––––––––––––-------------–––-––––––––––––– EMA(EMA(EMA( |cmtm(price1,pric2,q)| ,r),s),u) EMA(EMA(EMA( |cmtm(price1,pric2,q)| ,r),s),u)
if EMA(EMA(EMA(|cmtm(price1,pric2,q)|,r),s),u)=0, then CMI(price1,price2,q,r,s,u)=0
dove:
- q - il numero di periodi di tempo del grafico dei prezzi, coinvolti nel calcolo del momento del periodo q della candela;
- prezzo1 - prezzo [chiusura] alla fine del periodo q;
- prezzo2 - prezzo[apertura] all'inizio del periodo q;
- cmtm(price1,pric2,q)=price1-pric2[q-1], - q-period Candlestick Momentum;
- |cmtm(price1,pric2,q)| - valore assoluto del q-period Candlestick Momentum;
- CMtm (prezzo,q,r,s,u) - q-period Candlestick Momentum smussato tre volte;
- EMA (..., r) - primo smoothing - l'EMA(r), applicata a:
1) il q-period Candlestick Momentum
2) il valore assoluto del Candlestick Momentum q-period; - EMA (EMA(..., r),s) - il secondo smoothing- l'EMA(e), applicato al risultato del 1° smoothing;
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing - l'EMA (u), applicata al risultato del 2° smoothing.
4.2.1.1. CMI(price1,price2,q,r,s,u) - Candlestick Momentum Index. Specifiche
- Nome del File: Blau_CMI.mq5
- Nome: q-period Candlestick Momentum Index (q-period Candlestick Momentum normalizzato smussato; normalizzazione per il valore assoluto del q-period Candlestick Momentum), secondo William Blau.
- Parametri di Input:
- q - il periodo del Candlestick Momentum ( q = 1);
- r - periodo del 1° EMA, applicato al q-period Candlestick Momentum (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice1 - tipo di prezzo [chiusura] (di default AppliedPrice=PRICE_CLOSE);
- AppliedPrice2 - tipo di prezzo [apertura] (di default AppliedPrice=PRICE_OPEN).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- (facoltativo) a due livelli (il valore predefinito è -25 e +25) - aggiungere/rimuovere un livello; modificare il valore, la descrizione del livello, modificare lo stile di rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita -100) e superiore (per impostazione predefinita 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, nel corrispondente periodo EMA, lo smoothing non verrà eseguito;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
4.2.2. The Candlestick Index
IlCandlestick index (CSI) - è un indicatore del Candlestick Momentum q-period normalizzato(q-period Candlestick Momentum normalizzato smussato). I valori del momento candlestick del periodo q levigato sono dati come percentuale della scala (intervallo di mappatura [-100, 100]).
Ogni valore del Candlestick Momentum q-period smussato è normalizzato dal valore della fascia di prezzo q-period (o dalla lunghezza della candlestick q-period). La normalizzazione consente di interpretare il valore di CSI come un grado di ipercomprato (valore positivo) o livello di mercato ipervenduto (valore negativo).
La formula del Candlestick Index:
100 * EMA(EMA(EMA( cmtm(price1,pric2,q) ,r),s),u) 100 * CMtm(price1,pric2,q,r,s,u) CSI(price1,price2,q,r,s,u) = –––––––––––––––––––-–––-------------––––––––––––– = ––––––––––––––––--––-––––––––––––– EMA(EMA(EMA( HH(q)-LL(q) ,r),s),u) EMA(EMA(EMA( HH(q)-LL(q) ,r),s),u)
if EMA(EMA(EMA(HH(q)-LL(q),r),s),u)=0, then CSI(price1,price2,q,r,s,u)=0
dove:
- q - il numero di barre del grafico dei prezzi, utilizzato nel calcolo del q-period Candlestick Momentum;
- prezzo1 - prezzo [chiusura] alla fine del periodo q;
- prezzo2 - prezzo[apertura] all'inizio del periodo q;
- cmtm(price1,pric2,q)=price1-price2[q-1] - q-period Candlestick Momentum;
- LL (q) - il valore minimo del prezzo più basso per il periodo q;
- HH(q) - il valore massimo del prezzo più alto per il periodo q
- HH(q)-LL(q) - fascia di prezzo q-period (la lunghezza della modello a candele q-period);
- CMtm (price1,pric2,q,r,s,u) - q-period Candlestick Momentum smussato tre volte;
- EMA (..., r) - il primo smoothing - l'EMA(r), applicato a:
1) il q-period Candlestick Momentum,
2) la fascia di prezzo q-period (o la lunghezza della candela q-period); - EMA (EMA(..., r),s) - il secondo smoothing- l'EMA(e), applicato al risultato del 1° smoothing;
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing - l'EMA(u), applicato al risultato del 2o smoothing.
4.2.2.1. CSI(price1,price2,q,r,s,u) - Candlestick Index. Specifiche
- Nome del File: Blau_CSI.mq5
- Nome: q-period Candlestick Index ( q-period Candlestick Momentum normalizzato smussato; normalizzazione per la lunghezza del q-period candlestick), secondo William Blau.
- Parametri di Input:
- q - il periodo per il quale viene calcolato il Momentum Candlestick q-period (di default q = 1);
- r - periodo della 1a EMA, applicato al momentum della candela q-period (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- AppliedPrice1 - tipo di prezzo [chiusura] (di default AppliedPrice=PRICE_CLOSE);
- AppliedPrice2 - tipo di prezzo [apertura] (di default AppliedPrice=PRICE_OPEN).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- (facoltativo) a due livelli (il valore predefinito è -25 e +25) - aggiungere/rimuovere un livello; modificare il valore, la descrizione del livello, modificare lo stile di rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita -100) e superiore (per impostazione predefinita 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, lo smoothing EMA non viene utilizzato;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
4.3. Gli Oscillatori Ergodici del Modello a Candele
4.3.1. L'oscillatore CMI Ergodico
La definizione dell'oscillatore CMI Ergodico:Ergodic_CMI(price1,pric2,q,r,s,u) = CMI(price1,pric2,q,r,s,u)
SignalLine(price1,pric2,q,r,s,u,ul) = EMA( Ergodic_CMI(price1,pric2,q,r,s,u) ,ul)
dove:
- Ergodic_CMI() - Ergodic - Candlestick Momentum Index CMI(price1,price2,q,r,s,u);
- La SignalLine() - una Linea di Segnali - EMA(ul), applicata all'Ergodico;
- ul - un periodo EMA di una linea di segnale - secondo William Blau, il valore ul deve essere uguale al periodo dell'ultimo significativo (>1) dell'ergodico EMA.
Ergodic_CMI(price1,pric2,q,r,s,u,ul) - oscillatore CMI ergodico. Specifiche
- Nome del File: Blau_Ergodic_CMI.mq5
- Nome: Ergodic CMI-Oscillator (basato sul Candlestick Momentum Index), secondo William Blau.
- Parametri di Input:
- plot grafico #0 - Ergodico (Candlestick Momentum Index):
- q - il periodo di Candlestick Momentum (di default q = 1);
- r - periodo del 1° EMA, applicato al q-period Candlestick Momentum (di default r = 20);
- s - periodo della 2a EMA, applicato al risultato del 1° smoothing (di default s = 5);
- u - periodo del 3a EMA, applicato al risultato del 2° smoothing (per impostazione predefinita, u = 3);
- plot grafico #1 - la Linea del Segnale:
- ul - periodo di Linea di Segnale, applicato all'Ergodico (di default ul = 3);
- AppliedPrice1 - tipo di prezzo [chiusura] (di default AppliedPrice=PRICE_CLOSE);
- AppliedPrice2 - tipo di prezzo [apertura] (di default AppliedPrice=PRICE_OPEN).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering di ogni plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- due livelli (per impostazione predefinita -25 e +25) - aggiungi / rimuovi un livello, cambia il valore, la descrizione del livello, cambia lo stile di rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita -100) e superiore (per impostazione predefinita 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, nel corrispondente periodo EMA, lo smoothing non verrà eseguito;
- ul>0. Se ul = 1, allora la linea del segnale coincide con l'ergodico;
- la dimensione minima dell'array di prezzi = (q-1 + r + s + u + ul-4 +1).
Il codice dell'oscillatore CMI Ergodico
Ad esempio, consideriamo l'indicatore Ergodic_CMI (price1,price2,r,s,u,ul):
1) La relazione tra gli array di indicatori, i buffer di indicatori e i plot grafici:
//--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // Ergodic // graphic plot #1 SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA); // Signal Line: EMA(ul), applied to Ergodic // buffers for intermediate calculations SetIndexBuffer(2,Price1Buffer,INDICATOR_CALCULATIONS); // price array [close] SetIndexBuffer(3,Price2Buffer,INDICATOR_CALCULATIONS); // price array [open] SetIndexBuffer(4,CMtmBuffer,INDICATOR_CALCULATIONS); // q-period Candlestick Momentum SetIndexBuffer(5,EMA_CMtmBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA SetIndexBuffer(6,DEMA_CMtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA SetIndexBuffer(7,TEMA_CMtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA SetIndexBuffer(8,AbsCMtmBuffer,INDICATOR_CALCULATIONS); // q-period Candlestick Momentum (absolute value) SetIndexBuffer(9,EMA_AbsCMtmBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA (absolute value) SetIndexBuffer(10,DEMA_AbsCMtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (absolute value) SetIndexBuffer(11,TEMA_AbsCMtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (absolute value)
2) Algoritmo di calcolo cmtm e |cmtm|:
//--- calculation of Price1Buffer[] and Price2Buffer[] CalculatePriceBuffer( AppliedPrice1, // applied price [close] rates_total, // rates total prev_calculated, // number of bars, calculated at previous call Open,High,Low,Close, // Open[], High[], Low[], Close[] Price1Buffer // target array ); CalculatePriceBuffer(AppliedPrice2,rates_total,prev_calculated,Open,High,Low,Close,Price2Buffer); //--- calculation of cmtm and |cmtm| if(prev_calculated==0) // at first call { pos=begin1; // for(i=0;i<pos;i++) // { CMtmBuffer[i]=0.0; // zero values AbsCMtmBuffer[i]=0.0; // } } else pos=prev_calculated-1; // overwise calculate only last value // calculation of CMtmBuffer[] and AbsCMtmBuffer[] for(i=pos;i<rates_total;i++) { CMtmBuffer[i]=Price1Buffer[i]-Price2Buffer[i-(q-1)]; AbsCMtmBuffer[i]=MathAbs(CMtmBuffer[i]); }
4.3.2. L'oscillatore CSI Ergodico
L'oscillatore CSI Ergodico è definito come segue:
Ergodic_CSI(price1,pric2,q,r,s,u) = CSI(price1,pric2,q,r,s,u)
SignalLine(price1,pric2,q,r,s,u,ul) = EMA( Ergodic_CSI(price1,pric2,q,r,s,u) ,ul)
dove:
- Ergodic_CSI() - Ergodic - Indice Candlestick CSI(price1,price2,q,r,s,u);
- La SignalLine() - una Linea di Segnale - l'EMA(u)l, applicata all'Ergodico;
- ul - un periodo EMA di una linea di segnale - secondo William Blau, il valore ul deve essere uguale al periodo dell'ultimo significativo (>1) dell’EMA ergodica.
4.3.2.1. Ergodic_CSI(price1,pric2,q,r,s,u,ul) - oscillatore CSI Ergodico. Specifiche
- Nome del File: Blau_Ergodic_CSI.mq5
- Nome: Ergodic CSI-Oscillator (basato sul Candlestick Index), secondo William Blau.
- Parametri di Input:
- plot grafico #0 - Ergodico (Candlestick Index):
- q - il periodo per il quale viene calcolato il Momentum Candlestick q-period (di default q = 1);
- r - periodo del 1° EMA, applicato al q-period Candlestick Momentum (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3 ° EMA, applicato al risultato del 2 ° smoothing (per impostazione predefinita, u = 3);
- plot grafico #1 - la Linea del Segnale:
- ul - linea di segnale EMA periodo, viene applicato all'Ergodico (di default ul = 3);
- AppliedPrice1 - tipo di prezzo [chiusura] (di default AppliedPrice=PRICE_CLOSE);
- AppliedPrice2 - tipo di prezzo [apertura] (di default AppliedPrice=PRICE_OPEN).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering di ogni plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- due livelli (per impostazione predefinita -25 e +25) - aggiungi / rimuovi un livello, cambia il valore, la descrizione del livello, cambia lo stile di rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiori (di default -100) e superiori (di default 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, nel corrispondente periodo EMA, lo smoothing non verrà eseguito;
- ul>0. Se ul = 1, allora la linea del segnale coincide con l'ergodico;
- la dimensione minima dell'array di prezzi = (q-1 + r + s + u + ul-4 +1).
4.3.2.2. Il codice dell'oscillatore CSI Ergodico
Sull'esempio dell'indicatore Ergodic_CSI (prezzo1, prezzo2,r,s,u,ul):
1) La relazione tra gli array di indicatori, i buffer di indicatori e i plot grafici:
//--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // Ergodic // graphic plot #1 SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA); // Signal Line: EMA(ul), applied to Ergodic // buffers, used for intermediate calculations SetIndexBuffer(2,Price1Buffer,INDICATOR_CALCULATIONS); // price array [close] SetIndexBuffer(3,Price2Buffer,INDICATOR_CALCULATIONS); // price arrya [open] SetIndexBuffer(4,LLBuffer,INDICATOR_CALCULATIONS); // lowest prices (q bars) SetIndexBuffer(5,HHBuffer,INDICATOR_CALCULATIONS); // highest prices (q bars) SetIndexBuffer(6,CMtmBuffer,INDICATOR_CALCULATIONS); // q-period Candlestick Momentum SetIndexBuffer(7,EMA_CMtmBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA SetIndexBuffer(8,DEMA_CMtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA SetIndexBuffer(9,TEMA_CMtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA SetIndexBuffer(10,HHLLBuffer,INDICATOR_CALCULATIONS); // price range (q bars) SetIndexBuffer(11,EMA_HHLLBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA (price range) SetIndexBuffer(12,DEMA_HHLLBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (price range) SetIndexBuffer(13,TEMA_HHLLBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (price range)
2) L'algoritmo di calcolo per il cmtm e la fascia di prezzo q-period:
//--- calculation of Price1Buffer[] and Price2Buffer[] CalculatePriceBuffer( AppliedPrice1, // price type [close] rates_total, // rates total prev_calculated, // number of bars, calculated at previous call Open,High,Low,Close, // Open[], High[], Low[], Close[] Price1Buffer // target array ); CalculatePriceBuffer(AppliedPrice2,rates_total,prev_calculated,Open,High,Low,Close,Price2Buffer); //--- calculation of cmtm and price range (q bars) if(prev_calculated==0) // at first call { pos=begin1; // for(i=0;i<pos;i++) // { CMtmBuffer[i]=0.0; // zero values HHLLBuffer[i]=0.0; // LLBuffer[i]=0.0; // HHBuffer[i]=0.0; // } } else pos=prev_calculated-1; // overwise calculate only last value // calculation of CMtmBuffer[], HHLLBuffer[], LLBuffer[], HHBuffer[] for(i=pos;i<rates_total;i++) { // CMtmBuffer[] - q-period Candlestick Momentum CMtmBuffer[i]=Price1Buffer[i]-Price2Buffer[i-(q-1)]; // LLBuffer[] - search for the lowest price (q bars) // HHBuffer[] - search for the highest price (q bars) min=1000000.0; max=-1000000.0; for(k=i-(q-1);k<=i;k++) { if(min>Low[k]) min=Low[k]; if(max<High[k]) max=High[k]; } LLBuffer[i]=min; HHBuffer[i]=max; // HHLLBuffer[] - Price Range (q bars) HHLLBuffer[i]=HHBuffer[i]-LLBuffer[i]; }
5. Tendenza Direzionale
Gli indicatori considerati (vedi allegato):
- Blau_HLM.mq5- è un indicatore del Virtual Close (q-period Composite High-Low Momentum; il q-period Composite High-Low Momentum smussato);
- Blau_DTI.mq5 the Directional Trend Index (q-period Composite High-Low Momentum normalizzato smussato);
- Blau_Ergodic_DTI.mq5- l'oscillatore Ergodico DTI (basato sull’Indice di Tendenza Direzionale).
Fig. 5.1. Indicatori dell'Indice di Tendenza Direzionale
5.1. Il Momentum Composito Alto-Basso
5.1.1. Definire lo slancio del trend al rialzo e al ribasso
Una delle definizioni della tendenza. Se i valori dell'aumento massimo dei prezzi, quindi c'è una tendenza al rialzo. Se i valori dei prezzi minimi sono in diminuzione, quindi c'è una tendenza al ribasso.
Un gruppo di indicatori di Momentum, discussi nella Sezione 1, può essere utilizzato per calcolare il momentum per i massimi dei prezzi:
Mtm( price=High, q, r, s, u ) TSI( price=High, q, r, s, u ) Ergodic( price=High, q, r, s, u )
e per i prezzi minimi:
Mtm( price=Low, q, r, s, u ) TSI( price=Low, q, r, s, u ) Ergodic( price=Low, q, r, s, u )
Il Momentum up-trend o High Momentum Up (HMU) è la differenza positiva tra il prezzo massimo del periodo corrente e il prezzo massimo all'inizio della fascia di prezzo q-period. Il valore del momentum q-period del trend al rialzo mostra una velocità relativa di crescita del prezzo massimo per il periodo corrente, rispetto al prezzo massimo all'inizio dell'intervallo q-period delle fluttuazioni dei prezzi.
La formula del momentum q-period del trend al rialzo:
HMU(q) = High - High[q-1], if High - High[q-1] > 0
HMU(q) = 0, if High - High[q-1] <= 0
dove:
- q - è il numero di periodi di tempo del grafico dei prezzi, coinvolti nel calcolo del momentum di tendenza al rialzo;
- Alto - il prezzo massimo per il periodo corrente;
- High[q–1] - prezzo massimo (q-1) periodi fa.
Il momentum di tendenza al ribasso o il Low Momentum Down (LMD) - questa è una differenza positiva tra il prezzo minimo del periodo corrente e il prezzo più basso per l'inizio della gamma di fluttuazioni dei prezzi del periodo q. Il valore del momentum q-period del down-trend mostra la velocità relativa della diminuzione del prezzo minimo del periodo corrente, rispetto al prezzo più basso per l'inizio della fascia di prezzo q-period.
La formula del q-period down-trend Momentum:
LMD(q) = -(Low - Low[q-1]), if Low - Low[q-1] < 0
LMD(q) = 0, if Low - Low[q-1] >= 0
dove:
- q - è il numero di periodi di tempo del grafico dei prezzi, utilizzato nel calcolo del momentum di tendenza al ribasso;
- Basso - il prezzo minimo per il periodo corrente;
- Low[q-1] - il prezzo minimo (q-1) periodi fa.
Un Composite High-Low Momentum (High-Low Momentum, HLM) - è la differenza tra il Momentum q-period del trend al rialzo e il Momentum q-period del trend al ribasso. Il segno del composito High-Low Momentum indica la tendenza delle variazioni dei prezzi: un HLM positivo - una tendenza all'aumento dei prezzi (tendenza al rialzo) e un negativo - la tendenza alla diminuzione dei prezzi (tendenza al ribasso).
Formula:
HLM(q) = HMU(q) - LMD(q)
dove:
- q - il numero di periodi di tempo del grafico dei prezzi, coinvolti nel calcolo dei momentum del trend al rialzo e al ribasso;
- HMU(q) - il momentum della tendenza al rialzo per il periodo q;
- LMD(q) - il momentum del trend al ribasso per il periodo q.
La formula del q-period Composite High-Low Momentum smussato(Virtual Close):
HLM(q,r,s,u) = EMA(EMA(EMA( HLM(q) ,r),s),u) = EMA(EMA(EMA( HMU(q)-HMD(q) ,r),s),u)
dove:
- q - il numero di periodi di tempo del grafico dei prezzi, coinvolti nel calcolo dei momentum del trend al rialzo e al ribasso;
- HMU(q) - il momentum della tendenza al rialzo per il periodo q;
- LMD(q) - il momentum del trend al ribasso per il periodo q;
- HLM(q) = HMU(q)-LMD(q) - il q-period Composite High-Low Momentum;
- EMA (HLM (q), r) - il primo smoothing - l'EMA(r), applicato al q-period Composite High-Low Momentum;
- EMA (EMA(..., r),s) - il secondo smoothing - l'EMA(s), applicata al risultato della 1° smoothing
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing- l'EMA (u), applicato al risultato del 2° smoothing.
La curva del grafico della somma accumulata di momenti complessi per i massimi e i minimi è chiamata chiusura virtuale.
- Nome del File: Blau_HLM.mq5
- Nome: Indicatore del Close virtuale (q-period Composite High-Low Momentum; un q-period Composite High-Low Momentum smussato), secondo William Blau.
- Parametri di Input:
- q - il periodo per il quale viene calcolato l'HLM (di default q = 2);
- r - periodo della 1a EMA, applicata all'HLM (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3° EMA, applicato al risultato del 2° smoothing (di default, u = 3).
- Inoltre:
- visualizzato in una finestra separata;
- modifiche del rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, nel corrispondente periodo EMA, lo smoothing non verrà eseguito;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
5.2. Indice di Tendenza Direzionale
5.2.1. La definizione deIl’Indice di Tendenza Direzionale
L’Indice di Tendenza Direzionale (Directional Trend Index, DTI) - è un indicatore di un Q-period Composite High-Low Momentum normalizzato (HLM normalizzato smussato). I valori dell'HLM levigato sono dati come percentuale della scala (intervallo di visualizzazione [-100, 100]).
Ogni valore dell'HLM smussato è normalizzato dal valore di un HLM smussato, preso come valore assoluto. La normalizzazione consente di interpretare il valore DTI come un grado di ipercomprato (valore positivo) o ipervenduto (valore negativo).
La formula dell'indice di Tendenza Direzionale:
100 * EMA(EMA(EMA( HLM(q) ,r),s),u) 100 * HLM(q,r,s,u) DTI(q,r,s,u) = –––––––––––––––––––––––––---––––––– = ––––––––––––––--––––––––––––––– EMA(EMA(EMA( |HLM(q)| ,r),s),u) EMA(EMA(EMA( |HLM(q)| ,r),s),u)
if EMA(EMA(EMA(|HLM(q)|,r),s),u)=0, then DTI(price,q,r,s,u)=0
dove:
- q - il numero di periodi di tempo del grafico dei prezzi, coinvolti nel calcolo dei momentum del trend al rialzo e al ribasso;
- HLM(q) = HMU(q)-LMD(q) - un momento complesso del periodo q per i massimi e i minimi;
- | HLM(q)| - valore assoluto HLM(q);
- HLM(q,r,s,u) - HLM(q) smussato tre volte;
- EMA(..., r) - il primo smoothing - l'EMA(r), applicato a:
1) all'HLM (q)
2) al valore assoluto dell'HLM (q); - EMA (EMA(..., r),s) - il secondo smoothing- l'EMA(e), applicato al risultato del 1° smoothing;
- EMA (EMA (EMA (..., r), s), u) - il terzo smoothing - l'EMA(u), applicato al risultato del 2o smoothing.
- Nome del File: Blau_DTI.mq5
- Nome: Indice di Tendenza Direzionale (q-period Composite High-Low Momentum normalizzato smussato), secondo William Blau.
- Parametri di Input:
- q - il periodo per il quale viene calcolato l'HLM (di default q = 2);
- r - periodo della 1a EMA, applicata all'HLM (di default r = 20);
- s - periodo del 2 ° EMA, applicato al risultato del 1 ° smoothing (di default s = 5);
- u - periodo del 3° EMA, applicato al risultato del 2° smoothing (di default, u = 3).
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering del plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- (facoltativo) a due livelli (il valore predefinito è -25 e +25) - aggiungere/rimuovere un livello; modificare il valore, la descrizione del livello, modificare lo stile di rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita -100) e superiore (per impostazione predefinita 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, nel corrispondente periodo EMA, lo smoothing non verrà eseguito;
- la dimensione minima dell’array dei prezzi = (q-1 + r + s + u-3 +1).
5.3. L'oscillatore DTI Ergodico
5.3.1. La definizione dell'oscillatore Ergodico DTI
Ergodic_DTI(q,r,s,u) = DTI(q,r,s,u)
SignalLine(q,r,s,u,ul) = EMA( Ergodic_DTI(q,r,s,u) ,ul)
dove:
- Ergodic_DTI() - Ergodico - Indice di Tendenza Direzionale DTI (q,r,s,u);
- La SignalLine() - una Linea di Segnale - una media mobile esponenziale del periodo ul, applicata all'Ergodico;
- ul - un periodo EMA di una linea di segnale - secondo William Blau, il valore ul deve essere uguale al periodo dell'ultimo significativo (>1) dell’EMA ergodica.
- Nome del File: Blau_Ergodic_DTI.mq5
- Nome: Ergodic DTI-Oscillator (basato sul Directional Trend Index) di William Blau.
- Parametri di Input:
- graphic plot #0 - ergodico (indice del trend direzionale):
- q - il periodo per il quale viene calcolato l'HLM (di default q = 2);
- r - periodo della 1a EMA, per quanto riguarda l'HLM (di default r = 20);
- s - periodo della 2a EMA, rispetto ai risultati del primo smoothing (di default s = 5);
- u - periodo della 3a EMA, rispetto al risultato del secondo smoothing (di default, u = 3);
- costruzione grafica # 1 - la linea di segnale:
- ul - punto linea di segnale EMA, viene applicato all'ergodico (di default ul = 3);
- Inoltre:
- visualizzato in una finestra separata;
- modificare lo stile di rendering di ogni plotting grafico - il colore, lo spessore, lo stile della linea (la scheda "Colori");
- due livelli (per impostazione predefinita -25 e +25) - aggiungi / rimuovi un livello, cambia il valore, la descrizione del livello, cambia lo stile di rendering dei livelli (la scheda "Livelli");
- modificare i limiti inferiore (per impostazione predefinita -100) e superiore (per impostazione predefinita 100) della scala della finestra del singolo indicatore (la scheda "Scala").
- Limitazioni:
- q>0;
- r>0, s>0, u>0. Se r, s o u sono uguali a 1, lo smoothing EMA non viene utilizzato;
- ul>0. Se ul = 1, allora la linea del segnale coincide con l'ergodico;
- la dimensione minima dell'array di prezzi = (q-1 + r + s + u + ul-4 +1).
5.4. Il codice dell'oscillatore Ergodico DTI
L'indicatore Ergodic_DTI (q,r,s,u,ul):
1) Il collegamento tra l’array di indicatori, i buffer di indicatori e i plot grafici:
//--- indicator buffers // graphic plot #0 SetIndexBuffer(0,MainBuffer,INDICATOR_DATA); // Ergodic Line // graphic plot #1 SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA); // Signal Line: EMA(ul), applied to Ergodic // buffers, used for intermediate calculations SetIndexBuffer(2,HMUBuffer,INDICATOR_CALCULATIONS); // q-period Up Trend Momentum SetIndexBuffer(3,LMDBuffer,INDICATOR_CALCULATIONS); // q-period Down Trend Momentum SetIndexBuffer(4,HLMBuffer,INDICATOR_CALCULATIONS); // Composite q-period High/Low Momentum SetIndexBuffer(5,EMA_HLMBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA SetIndexBuffer(6,DEMA_HLMBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA SetIndexBuffer(7,TEMA_HLMBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA SetIndexBuffer(8,AbsHLMBuffer,INDICATOR_CALCULATIONS); // Composite q-period High/Low Momentum (absolute values) SetIndexBuffer(9,EMA_AbsHLMBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA (absolute values) SetIndexBuffer(10,DEMA_AbsHLMBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (absolute values) SetIndexBuffer(11,TEMA_AbsHLMBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (absolute values)
2) Algoritmo di calcolo di HLM e |HML|:
//--- calculation of HLM and |HLM| if(prev_calculated==0) // at first call { pos=begin1; // for(i=0;i<pos;i++) // { HLMBuffer[i]=0.0; // zero values AbsHLMBuffer[i]=0.0; // HMUBuffer[i]=0.0; // LMDBuffer[i]=0.0; // } } else pos=prev_calculated-1; // overwise calculate only last value // calculation of HLMBuffer[], AbsHLMBuffer[], HMUBuffer[], LMDBuffer[] for(i=pos;i<rates_total;i++) { HMUBuffer[i]=High[i]-High[i-(q-1)]; HMUBuffer[i]=(HMUBuffer[i]>0)?HMUBuffer[i]:0; LMDBuffer[i]=-1*(Low[i]-Low[i-(q-1)]); LMDBuffer[i]=(LMDBuffer[i]>0)?LMDBuffer[i]:0; HLMBuffer[i]=HMUBuffer[i]-LMDBuffer[i]; AbsHLMBuffer[i]=MathAbs(HLMBuffer[i]); }
Conclusione
La prima parte dell'articolo "indicatori di William Blau Indicators e Sistemi di Trading Systems su MQL5. Parte 1: Indicatori" fornisce una descrizione degli indicatori e degli oscillatori sviluppati in MQL5, dal libro "Momentum, Direction, and Divergence" di William Blau.
L'uso di questi indicatori e oscillatori quando si prendono decisioni di trading sarà descritto nella seconda parte dell'articolo "indicatori di William Blau Indicators e Sistemi di Trading Systems su MQL5. Parte 2: Sistemi di Trading".
I contenuto dell'archivio allegato a questo articolo ("Blau_Indicators_MQL5_en.zip"):
File | Descrizione |
---|---|
File incluso. Posizione: "terminal_data_folder\MQL5\Include" | |
WilliamBlau.mqh | |
Indicatori. Posizione: "terminal_data_folder\MQL5\Indicators" | |
Indicatori, basati sul Momentum | |
Blau_Mtm.mq5 | L'indicatore Momentum (momentum q-period, momentum q-period smussato) |
Blau_TSI.mq5 | Il True Strength Index (Momentum normalizzato del periodo q smussato) |
Blau_Ergodic.mq5 | Oscillatore Ergodico (basato sul true strength index) |
Indicatori, basati sullo Stocastico | |
Blau_TStoch.mq5 | Stocastico (stocastico q-period, q-period stocastico smussato) |
Blau_TStochI.mq5 | Indice stocastico (stocastico q-period normalizzato smussato) |
Blau_TS_Stochastic.mq5 | Oscillatore Stocastico TS (basato sull'Indice Stocastico) |
Indicatori, basati sul Momentum Stocastico | |
Blau_SM.mq5 | Momentum Stocastico (Q-period Stochastic Momentum, q-period Stochastic Momentum smussato) |
Blau_SMI.mq5 | Stochastic Momentum Index ( q-stochastic momentum RSI normalizzato smussato) |
Blau_SM_Stochastic.mq5 | Oscillatore Stocastico SM (basato sull'indice Momentum Stocastico) |
Indicatori, basati su una deviazione dall'andamento del mercato | |
Blau_MDI.mq5 | Indicatore di Deviazione Media (Deviazione Media, Deviazione Media Smussata) |
Blau_Ergodic_MDI.mq5 | Oscillatore MDI Ergodico (basato sull'Indicatore di Deviazione Media) |
Indicatori basati sulla Convergenza/Divergenza della Media Mobile | |
Blau_MACD.mq5 | Indicatore della convergenza/divergenza delle medie mobili (MACD;MACD; MACD smussato) |
Blau_Ergodic_MACD.mq5 | Oscillatore MACD ergodico (basato sull'indicatore MACD) |
Indicatori, basati sul Candlestick Momentum | |
Blau_CMtm.mq5 | Candlestick Momentum Indicator (q-period Candlestick Momentum, q-periodCandlestick Momentum) |
Blau_CMI.mq5 | Candlestick Momentum Index (Candlestick Momentum q-period normalizzato smussato ; normalizzato dal valore assoluto del Candlestick Momentum q-period) |
Blau_CSI.mq5 | Il Candlestick Index (q-period Candlestick normalizzato smussato; normalizzazione per la lunghezza del candlestick q-period) |
Blau_Ergodic_CMI.mq5 | Oscillatore CMI ergodico (basato sul Candlestick Momentum Index) |
Blau_Ergodic_CSI.mq5 | Oscillatore CSI ergodico (basato sul Candlestick Index) |
Indicatori, basati sul Momentum Composite | |
Blau_HLM.mq5 | Indicatore di Chiusura Virtuale (q-period Composite High-Low Momentum; ilq-period Composite High-Low Momentum) |
Blau_DTI.mq5 | Indice di un trend direzionale (q-period Composite High-Low Momentum normalizzato smussato) |
Blau_Ergodic_DTI.mq5 | Oscillatore DTI ergodico (basato sull'Indice di Tendenza Direzionale) |
Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/190





- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso