- DRAW_NONE
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
Stili Indicatore negli Esempi
Il Terminale Client di MetaTrader 5 comprende 38 indicatori tecnici che possono essere utilizzati in programmi con MQL5 attraverso apposite funzioni. Ma il vantaggio principale del linguaggio MQL5 è la capacità di creare indicatori personalizzati, che possono poi essere utilizzati in Expert Advisor o semplicemente applicati su grafici dei prezzi allo scopo di analisi tecnica.
L'intero set di indicatori può essere derivata da vari stili di disegno base, conosciuti come plotting. Il plotting denota un modo di visualizzazione i dati, che l'indicatore calcola, immagazzina e fornisce a richiesta. Vi sono sette tali tipi di plotting fondamentali:
- Una linea
- Una sezione (segmento)
- Istogramma
- Freccia (simbolo)
- Una zona verniciata (canale riempito)
- Bars
- Candele giapponesi
Ogni plotting richiede da uno a cinque array di tipo double, in cui sono memorizzati i valori degli indicatori. Allo scopo di convenienza, questi array sono associati con i buffer indicatore. Il numero di buffer in un indicatore deve essere dichiarato in anticipo utilizzando le direttive del compilatore, per esempio:
#property indicator_buffers 3 // Numero di buffers
|
Il numero di buffer in dell'indicatore è sempre maggiore o uguale al numero di plots nell'indicatore.
Poiché ogni tipo plotting base può avere variazione di colore o specifiche di costuzione, il numero effettivo di tipi di plotting in MQL5 è 18:
Plotting |
Descrizione |
Valore buffer |
Color buffers |
---|---|---|---|
Non è visivamente mostrato nel grafico, ma i valori del buffer corrispondente possono essere visualizzati nella finestra dei dati |
1 |
- |
|
Una linea viene tracciata sui valori del buffer corrispondente (i valori vuoti nel buffer sono indesiderabili) |
1 |
- |
|
È disegnato come segmenti di linea tra i valori del buffer corrispondente (di solito ha svariati valori vuoti) |
1 |
- |
|
È rappresentato con un istogramma dalla linea zero ai valori del buffer corrispondente (può avere valori vuoti) |
1 |
- |
|
È disegnato come un istogramma basato su due buffer indicatori (può avere valori vuoti) |
2 |
- |
|
Viene disegnato come simboli (possono avere valori vuoti) |
1 |
- |
|
Simile allo stile DRAW_SECTION, ma a differenza di esso, può tracciare segmenti verticali su una barra |
2 |
- |
|
Riempimento colore tra due linee. 2 valori dei buffer corrispondenti sono mostrati nella Finestra Dati |
2 |
- |
|
Viene disegnato come barre. 4 valori dei buffer corrispondenti vengono visualizzati nella Finestra Dati |
4 |
- |
|
Disegnato come Candele giapponesi. 4 valori dei buffer corrispondenti vengono visualizzati nella Finestra Dati |
4 |
- |
|
Una linea per la quale è possibile alternare i colori su diverse barre o cambiare il suo colore in qualsiasi momento |
1 |
1 |
|
Simile allo stile DRAW_SECTION, ma il colore di ogni sezione può essere impostato singolarmente; il colore può anche essere impostato dinamicamente |
1 |
1 |
|
Simile allo stile DRAW_HISTOGRAM, ma ogni striscia può avere un colore diverso, è possibile impostare il colore in modo dinamico |
1 |
1 |
|
Simile allo stile DRAW_HISTOGRAM2, ma ogni striscia può avere un colore diverso, è possibile impostare il colore in modo dinamico |
2 |
1 |
|
Simile allo stile DRAW_ARROW, ma ogni simbolo può avere il suo colore. Il colore può essere modificato dinamicamente |
1 |
1 |
|
Lo stile DRAW_ZIGZAG con le opzioni di colorazione individuale di sezioni e cambiamento dinamico del colore |
2 |
1 |
|
Lo stile DRAW_BARS con le opzioni di colorazione individuale delle barre e cambiamento dinamico del colore |
4 |
1 |
|
Lo stile DRAW_CANDLES con le opzioni di colorazione individuale delle candele e colori dinamici che cambiano |
4 |
1 |
La differenza tra un buffer indicatore ed un array
In ogni indicatore, sul suo livello globale, si dovrebbe dichiarare uno o più array di tipo double, che poi deve essere usato come un buffer utilizzando la funzione dell'indicatore SetIndexBuffer(). Per disegnare i plots indicatore, vengono utilizzati solo i valori dei buffer di indicatore, eventuali altri array non possono essere utilizzati per questo scopo. Inoltre, i valori del buffer vengono visualizzati nella finestra dei dati.
Un buffer indicatore deve essere dinamico e non richiede specificazione della grandezza - la grandezza dell'array utilizzato come buffer indicatore, viene impostato dal sottosistema di esecuzione del terminale, automaticamente
Dopo che l'array è vincolato al buffer indicatore, la direzione di indicizzazione viene impostata di default come negli array ordinari, ma è possibile utilizzare la funzione ArraySetAsSeries() per cambiare il modo di accesso agli elementi di un array. Per impostazione predefinita, il buffer indicatore viene utilizzato per memorizzare i dati utilizzati per la stampa (INDICATOR_DATA).
Se il calcolo dei valori degli indicatori richiede il possesso di calcoli intermedi e memorizza i valori aggiuntivi per ogni barra, allora un tale array può essere dichiarato come un buffer di calcolo durante il binding (INDICATOR_CALCULATIONS). Per i valori intermedi, è anche possibile utilizzare un array regolare, ma in questo caso, il programmatore deve gestire la grandezza dell'array.
Alcuni plots permettono di impostare un colore per ogni barra. Per memorizzare le informazioni sul colore, vengono utilizzati i buffers colore (INDICATOR_COLOR_INDEX). Il colore è di tipo intero color, ma tutti i buffer degli indicatori devono essere di tipo double. I valori di colore e buffers ausiliari (INDICATOR_CALCULATIONS) non possono essere ottenuti usando CopyBuffer().
Il numero di buffers indicatore deve essere specificato utilizzando la direttiva del compilatore #property indicator_buffers numero_di_buffers:
#property indicator_buffers 3 // l'indicatore ha 3 buffers |
Il numero massimo consentito di buffers in un indicatore è 512.
Rilevanza del Buffer Indicatore e Plotting
Ogni plotting è basata su uno o più buffer indicatore. Così, per la visualizzazione di candele semplici, sono necessari quattro valori - i prezzi Open, High, Low e Close. Di conseguenza, per visualizzare un indicatore in forma di candele, è necessario dichiarare 4 buffer indicatore e 4 array di tipo double per essi. Ad esempio:
//--- L'indicatore ha quattro buffer di indicatori
|
I plots grafici utilizzano automaticamente i buffer indicatore in base al numero di plot. La numerazione dei plots trame inizia con 1, la numerazione dei buffer inizia con zero. Se il primo plotting richiede 4 buffer indicatore, allora i primi 4 buffer indicatore saranno utilizzati per disegnarla. Questi quattro buffer dovrebbero collegati con gli array appropriati con l'indicizzazione corretta utilizzando la funzione SetIndexBuffer().
//--- Array con associazione ai buffers indicatore
|
Per le candele disegnate, l'indicatore le utilizzerà solo i primi quattro buffer, perché il plotting delle "candele" è stato annunciato con il primo numero.
Modifichiamo l'esempio, e aggiungiamo un plotting di una linea semplice - DRAW_LINE. Supponiamo ora che la linea è numerata 1, e le candele sono numero 2. Il numero di buffer ed il numero di plots è aumentato.
//--- L'indicatore è dotato di 5 buffer indicatore
|
L'ordine degli dei plots è cambiato, ed ora la linea viene prima, seguita dalle candele giapponesi. Pertanto, l'ordine dei buffer è appropriato - prima segnaliamo un buffer per la linea con l'indice pari a zero, e poi quattro buffer per le candele.
SetIndexBuffer(0,LineBuffer,INDICATOR_DATA); // Il primo buffer corrisponde all'indice 0
|
Il numero di buffers e plots può essere impostato solo utilizzando direttive del compilatore, è impossibile modificare queste proprietà in modo dinamico utilizzando le funzioni.
Color Versions of Styles
Come si può vedere dalla tabella, gli stili sono divisi in due gruppi. Il primo gruppo comprende gli stili in cui nel nome non c'è una parola COLOR, noi chiamiamo questi stili di base:
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
Nel secondo gruppo, i nomi di stile comprendono il termine COLOR, chiamiamole versioni colore:
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
Tutte le versioni di colore degli stili differiscono da quelli di base, in quanto permettono di specificare un colore per ogni parte del plotting. La minima parte del plotting è una barra, così possiamo dire dire che le versioni colore permettono di impostare il colore su ogni barra.
Eccezioni sono stili DRAW_NONE e DRAW_FILLING, non hanno versioni di colore.
Per impostare il colore tracciando su ciascuna barra, un buffer aggiuntivo per memorizzare l'indice del colore è stato aggiunto alla versione colori. Questi indici indicano il numero di un colore in un array speciale, che contiene un insieme predefinito di colori. La dimensione dell'array di colori è 64. Ciò significa che ogni versione colore di uno stile permette di disegnare un plot in 64 colori diversi.
Il set e il numero di colori nell' array speciale di colori, possono essere impostati tramite una direttiva del compilatore #proprietà indicator_color, dove è possibile specificati tutti i colori necessari separati da virgole. Ad esempio, tale iscrizione in un indicatore:
//--- Definisce 8 colori per colorare le candele (sono memorizzati nell'array speciale)
|
Si afferma che per tracciarne 1, 8 colori sono impostati, che saranno collocati in un array speciale. Ulteriormente nel programma non specificheremo il colore del tracciato, ma solo il suo indice. Se vogliamo impostare il colore rosso per il numero di barra K, il valore di indice di colore da un array deve essere impostato nel buffer colore dell'indicatore Il colore rosso è specificato prima della direttiva, corrisponde al numero 0 dell' indice.
//--- imposta il colore della candela clrRed
|
L'insieme dei colori non è dato una volta per tutte, può essere variato dinamicamente utilizzando PlotIndexSetInteger(). Esempio:
//--- Imposta il colore per ogni indice che ha proprietà PLOT_LINE_COLOR
|
Proprietà del l'indicatore e plotting
Per i plots indicatore, le proprietà possono essere impostate mediante direttive del compilatore ed utilizzando le funzioni appropriate. Per sapere più informazioni su questo in: Collegamento tra Proprietà Indicatore e Funzioni. Il cambiamento dinamico delle proprietà di indicatori utilizzando funzioni speciali, permette di creare indicatori personalizzati più flessibili.
Inizio del Disegno Indicatore sul Grafico
In molti casi, a seconda delle condizioni dell'algoritmo, è impossibile avviare il calcolo dei valori degli indicatori immediatamente con la barra di corrente, in quanto è necessario prevedere un numero minimo di barre precedenti disponibili nello storico. Ad esempio, molti tipi di smoothing implicano l'utilizzo di una matrice di prezzi nelle precedenti N barre, e sulla base di questi valori, viene calcolato il valore indicatore sulla barra corrente.
In tali casi, non esiste alcun modo per calcolare i valori degli indicatori per le prime N barre, o questi valori non sono destinati ad essere visualizzati sul grafico e sono solo sussidiari al calcolo di ulteriori valori. Per evitare il plotting dell'indicatore sulle prime N barre dello storico, impostare il valore di N per la proprietà PLOT_DRAW_BEGIN per il plot corrispondente:
//--- Array associante con buffer di indicatori per le candele
|
Qui:
- numero_di_plot- un valore da 2zero a indicator_plots-1 (la numerazione dei plots inizia con zero).
- N - il numero delle prime barre nello storico, in cui l'indicatore non deve essere visualizzato sul grafico.