
Impara come progettare un sistema di trading tramite Volumes
Introduzione
Benvenuti nel nuovo articolo della nostra serie sull'apprendimento di come progettare sistemi di trading basati sugli indicatori tecnici più comuni. Ecco un nuovo importante indicatore tecnico che ci fornisce spunti da una prospettiva diversa del mercato - l'indicatore Volumes. Tratteremo questo indicatore attraverso i seguenti argomenti:
- Definizione di Volumes
- Strategia con Volumes
- Schema della strategia con Volumes
- Sistema di trading con Volumes
- Conclusioni
Qui impareremo cos'è il volume e cosa misura. Scopriremo come possiamo utilizzarlo nel nostro trading e come può esserci utile condividendo alcune semplici strategie basate sul concetto principale che ne è dietro. Successivamente, impareremo come progettare uno schema passo-passo per ciascuna strategia menzionata in modo da aiutarci ad andare avanti nel progettare un sistema di trading basato su queste strategie. Questo passaggio è molto importante per progettare qualsiasi sistema di trading. Quindi, arriveremo alla parte più interessante che è il sistema di trading con Volumes poiché impareremo come trasformare tutto ciò che abbiamo menzionato o anche qualsiasi idea interessante correlata in un sistema di trading tramite MQL5 per generare ciò di cui abbiamo bisogno, in base a queste strategie, automaticamente, da aiutarci a facilitare, migliorare o potenziare il nostro percorso di trading.
Quindi, useremo MQL5 (MetaQuotes Language) che è integrato nel terminale di trading MetaTrader 5. Se vuoi saperne di più su come scaricarlo e usarlo, leggi l’argomento Scrittura del codice MQL5 in MetaEditor dell'articolo precedente per maggiori informazioni. Inoltre, è molto utile per il tuo apprendimento, applicare ciò che impari in quanto migliorerà e approfondirà la tua comprensione dell'argomento. La pratica è un fattore molto importante in qualsiasi processo di apprendimento.
Avvertenza: Tutte le informazioni sono fornite "così come sono" solo a scopo didattico e non sono preparate per scopi commerciali o di consulenza. Le informazioni non garantiscono alcun tipo di risultato. Se scegliete di utilizzare questi materiali su uno qualsiasi dei vostri conti di trading, lo farete a vostro rischio e pericolo e sarete gli unici responsabili.
Entriamo negli argomenti per imparare un nuovo strumento che può essere utile per il nostro trading.
Definizione di Volumes
L'indicatore di volumi nel mercato Forex indica il numero di variazioni di prezzo durante un determinato periodo di tempo, ovvero i volumi effettivamente scambiati identificando contratti, denaro, unità, ecc. L'indicatore di volume può darci un'indicazione della domanda e dell'offerta o è un'indicazione della liquidità nel mercato. Quindi, se c'è un volume elevato, questo sarà un'indicazione della dimensione della domanda in caso di rialzo o dell'offerta in caso di ribasso. Possiamo dire che il volume può essere molto utile in quanto sarà una conferma del trend. Se vuoi saperne di più sul trend, puoi leggere l'argomento della definizione di trend da uno degli articoli precedenti.
Il volume va con il trend. Questo è uno strumento molto utile da utilizzare per confermare se il movimento attuale sarà forte o se c'è una debolezza. È meglio vedere che durante il trend rialzista, il volume aumenterà con i movimenti al rialzo e diminuirà con la correzione al ribasso. Durante il trend ribassista, il volume aumenterà con movimenti al ribasso e sarà un segnale rilevante, ma a volte possiamo trovare questi movimenti al ribasso senza un volume elevato poiché i prezzi possono scendere senza volume. In altre parole, non è necessario vedere un volume elevato con movimenti al ribasso nel trend ribassista. In caso di correzione rialzista durante il trend ribassista, il volume diminuirà.
Il volume può darci un'indicazione che c'è una debolezza nel trend attuale in caso di divergenze. Divergenze significano che troviamo il volume muoversi nella direzione opposta del prezzo non confermando questa direzione.
Come abbiamo menzionato prima, il suo calcolo:
Nel mercato Forex:
Volumi = numero di variazioni di prezzo in un determinato periodo di tempo
Nel mercato azionario:
Volume = volume degli scambi * prezzo
Esempio: se abbiamo un volume di scambio di 1000 azioni al prezzo di $10. Quindi, il volume sarà come segue:
Volume = 1000 * $10 = $10,000
C'è una differenza qui a causa della decentralizzazione del mercato Forex, a differenza del mercato azionario.
Non abbiamo bisogno di calcolarlo manualmente in quanto possiamo trovarlo nella MetaTrader 5. Tutto quello che devi fare è sceglierlo tra gli indicatori disponibili:
Inserisci --> Indicatori --> Volumi --> Volumes
Dopo aver scelto l'indicatore Volumes come nel passaggio quattro della figura precedente, si apre la finestra dell'indicatore volumes:
1. Colore della barra del volume in aumento.
2. Colore della barra del volume in diminuzione.
3. Volume applicato (Tick o Real).
4. Spessore barra.
Dopo aver determinato i parametri precedenti, sarà allegato al grafico:
Il verde significa che la barra corrente è maggiore della barra precedente mentre il rosso significa che la barra corrente è minore della precedente.
Strategia con Volumes
In questa parte, menzioneremo semplici strategie con i volumi per capire come utilizzare l'indicatore volumes. Di sicuro, puoi scoprire che queste strategie necessitano di ottimizzazione e questo è normale in quanto il loro obiettivo principale è capire come l'indicatore Volumes può essere utilizzato in base al suo concetto e come progettare un sistema di trading basato sulle suo principio. Quindi, devi testare qualsiasi di queste strategie prima di utilizzarle sul tuo conto reale.
- Strategia uno: Vol - Movimento:
Sulla base di questa strategia, dobbiamo fare un confronto tra il valore del volume corrente e quello precedente ed in base a questo decidere il segnale più adatto. Se il corrente è maggiore del precedente, questo sarà un segnale di volumi in aumento. Se il corrente è minore del precedente, questo sarà un segnale di volumi in diminuzione.
Semplicemente,
Volume attuale > Volume precedente --> Volumi in aumento.
Volume attuale < Volume precedente --> Volumi in diminuzione.
- Strategia due: Volume - Forza:
Sulla base di questa strategia, dobbiamo fare un confronto tra il valore del volume corrente e la media dei cinque valori precedenti per decidere la forza di questo indicatore di volumi. Se il valore corrente è superiore alla media, sarà un segnale di un volume forte. Se il corrente è inferiore alla media, sarà un segnale di un volume debole.
Quindi,
Attuale > AVG --> volume forte
Attuale < AVG --> volume debole
- Strategia tre: Price & Vol - Trend rialzista:
Secondo questa strategia, durante il trend rialzista, confronteremo i massimi attuali e precedenti con i valori di volume attuali e precedenti per decidere se c'è un segnale di acquisto o non c'è segnale. Se il massimo attuale è superiore al precedente e il volume attuale è superiore al precedente, sarà un segnale di acquisto, ma se il massimo attuale è superiore al precedente e il volume attuale è inferiore al volume precedente, non ci sarà alcun segnale.
Massimo attuale > massimo precedente && volume attuale > volume precedente --> Segnale di acquisto durante il trend rialzista
- Strategia quattro: Price & Vol - Trend ribassista:
Questa strategia sarà l'opposto della precedente, durante il trend ribassista, confronteremo i minimi attuali e precedenti con i valori di volume attuali e precedenti per decidere se c'è un segnale di vendita o se non c'è segnale. Se il minimo attuale è inferiore al precedente e il volume attuale è superiore al precedente, sarà un segnale di vendita, ma se il minimo attuale è inferiore al precedente e il volume attuale è inferiore al volume precedente, non ci sarà alcun segnale.
Minimo attuale < minimo precedente && volume attuale > volume precedente --> Segnale di vendita durante il trend ribassista
- Strategia cinque: Strategia MA & Vol:
Secondo questa strategia, confronteremo due periodi di medie mobili, una di breve e l'altra lunga e i valori del volume attuale e precedente per decidere se c'è un segnale di acquisto o di vendita. Se la MA di breve è inferiore alla MA lunga, per poi passare sopra quella lunga e allo stesso tempo il volume corrente è sopra il volume precedente, sarà un segnale di acquisto. Se la MA di breve è superiore alla lunga, per poi passare sotto quella lunga e allo stesso tempo il volume corrente è sopra il volume precedente, sarà un segnale di vendita.
MA Breve < MA Lunga, poi MA Breve > MA Lunga && Volume corrente > volume precedente --> Segnale di acquisto
MA Breve > MA Lunga, poi MA Breve < MA Lunga && Volume corrente > volume precedente --> Segnale di vendita
Schema della strategia con Volumes
In questa parte, progetteremo uno schema per ogni strategia, il motivo dello schema del progetto è quello di aiutarci a organizzare ciò che vogliamo fare per creare un sistema di trading. Questo passaggio è molto importante ed essenziale per organizzare le nostre idee oltre a identificare cosa vogliamo fare passo-passo.
Innanzitutto, creeremo uno schema per un semplice sistema di trading che genererà il valore corrente dell'indicatore Volumes solo come commento sul grafico. Abbiamo bisogno che il sistema controlli i valori dell'indicatore Volumes ad ogni tick e quindi restituisca il valore corrente sul grafico come commento. Di seguito è riportato uno schema passo-passo per creare questo sistema di trading.
- Strategia uno: Vol - Movimento:
Secondo questa strategia, dobbiamo creare un semplice sistema di trading che genererà segnali per informarci sul movimento del volume (se è in aumento o in diminuzione) confrontando due valori dell'indicatore di volume, quello attuale e precedente. Quindi, abbiamo bisogno che il sistema controlli questi due valori ad ogni tick, quindi informi che il volume sta aumentando se il volume corrente è maggiore del volume precedente o informi che il volume sta diminuendo se il volume corrente è inferiore a quello precedente. Di seguito è riportato uno schema passo-passo per creare questo sistema di trading.
- Strategia due: Volume - Forza:
Secondo questa strategia, dobbiamo creare un semplice sistema di trading per generare segnali che ci informino sulla forza del Volume sulla base di un confronto tra il valore attuale dell'indicatore Volumes e la media dei cinque valori precedenti. Quindi, dobbiamo lasciare che il sistema controlli tutti questi valori, poi calcolare la media dei precedenti cinque valori Vol ad ogni tick. Dopodiché viene generato un segnale appropriato, se il valore Vol corrente è maggiore del valore medio del volume, il segnale generato sarà volume forte. Il volume corrente, i cinque valori precedenti del volume e il valore medio verranno visualizzati come commento sul grafico e saranno ognuno in una riga separata. Se il valore corrente è inferiore al valore medio, il segnale generato sarà di volume debole. Il valore del volume corrente, i precedenti cinque valori del volume e il valore medio verranno visualizzati come commento sul grafico e ogni valore sarà in una riga separata. Quello che segue è uno schema passo-passo per creare questo sistema di trading:
- Strategia tre: Price & Vol - Trend rialzista:
Secondo questa strategia, dobbiamo creare un semplice sistema di trading che funzioni durante il trend rialzista per generare un segnale di acquisto dopo aver controllato tick per tick i massimi attuali e precedenti, oltre ai valori attuali e precedenti dell’indicatore volumes. Sulla base di questa strategia, abbiamo bisogno, per generare un segnale di acquisto, del massimo attuale, del massimo precedente, il volume attuale e il volume precedente e che il valore del massimo attuale sia maggiore del precedente e il valore del volume corrente sia maggiore del precedente. Questi valori verranno visualizzati come commento sul grafico e ogni valore sarà in una riga separata. O per generare solo tutti i tipi di valori precedenti senza alcun segnale di acquisto, se il massimo corrente è maggiore del precedente e il valore del volume corrente è inferiore al precedente. Quello che segue è uno schema passo-passo per creare questo sistema di trading:
Price_Vol - Schema trend rialzistaalt
- Strategia quattro: Price & Vol - Trend ribassista:
Questa strategia sarà l'opposto della precedente. Dobbiamo creare un semplice sistema di trading che funzioni durante il trend ribassista per generare un segnale di vendita dopo aver controllato tick per tick i minimi attuali e precedenti, oltre ai valori attuali e precedenti dell’indicatore volumes. Poi, abbiamo bisogno, per generare un segnale di vendita, del minimo attuale, del minimo precedente, il volume attuale e il volume precedente come commento sul grafico e ogni valore in una riga separata e che il valore del minimo attuale sia minore del precedente e il valore del volume corrente sia maggiore del precedente. O per generare solo tutti i tipi di valori precedenti senza alcun segnale di vendita, se il minimo corrente è minore del precedente e allo stesso tempo il valore del volume corrente è inferiore al precedente. Possiamo vedere uno schema passo-passo per creare questo sistema di trading uguale al seguente:
- Strategia cinque: Strategia MA & Vol:
Secondo questa strategia, dobbiamo creare un sistema di trading in grado di controllare due indicatori, il volume e la media mobile tick per tick per decidere se c'è un segnale di acquisto o vendita basandosi sul confronto tra due medie mobili, una delle quali è di breve e l'altra è lunga. Se quella di breve diventa maggiore di quella lunga dopo essere stata sotto di essa e allo stesso tempo il valore del volume corrente è maggiore del precedente, in questo caso, abbiamo bisogno che il sistema generi un segnale di acquisto. Il secondo scenario è quello in cui quella di breve è inferiore alla MA lunga dopo essere stata maggiore della MA lunga e allo stesso tempo il valore del volume attuale è maggiore del precedente, in questo caso, abbiamo bisogno che il sistema generi un segnale di vendita. Quello che segue è uno schema passo-passo per la creazione di questo tipo di strategia:
Sistema di trading con Volumes
Siamo arrivati alla parte più interessante di questo articolo su come tradurre tutti i precedenti in un sistema di trading per darci segnali in modo automatico e preciso. Progetteremo un sistema di trading per ogni strategia, ma prima progetteremo un sistema di trading per generare il valore corrente del volume che sarà la base di ogni strategia.
- Creare un array per il volume utilizzando la funzione "double".
double VolArray[];
- Ordinamento dell'array utilizzando la funzione ArraySetAsSeries che restituisce un valore Booleano (vero o falso).
ArraySetAsSeries(VolArray,true);
- Definire il volume utilizzando iVolumes dopo aver creato una variabile per VolDef. La funzione iVolumes restituisce l'handle dell'indicatore Volumes ei suoi parametri sono (simbolo, periodo, volume applicato). Abbiamo utilizzato (_Symbol) per essere applicabile al simbolo corrente e (_Period) per essere applicabile all'intervallo di tempo corrente.
int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
- Riempimento dell'array utilizzando la funzione CopyBuffer per ottenere i dati dall'indicatore volumes.
CopyBuffer(VolDef,0,0,3,VolArray);
- Calcolare il valore del volume utilizzando la funzione NormalizeDouble dopo aver creato una variabile per VolValue. La funzione NormalizeDouble restituisce un valore di tipo double.
int VolValue=NormalizeDouble(VolArray[0],5);
- Creazione della funzione di commento del valore dell'indicatore Volumes utilizzando la funzione Commento.
Comment("Volumes Value is: ",VolValue);
Di seguito è riportato il codice completo del sistema di trading precedente:
//+------------------------------------------------------------------+ //| Simple Volumes.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create an array for Volume double VolArray[]; //sorting the array from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,3,VolArray); //calculating current vol value int VolValue=NormalizeDouble(VolArray[0],5); //creating a comment with current vol value Comment("Volumes Value is: ",VolValue); } //+------------------------------------------------------------------+
Dopo aver compilato questo codice per poterlo eseguire nella MetaTrader 5, lo troveremo nella finestra del Navigatore:
Facendo doppio clic o trascinando e rilasciando il file sul grafico, apparirà la finestra dell’EA:
Quindi, troveremo l'EA allegato al grafico:
Quello che segue è un esempio di segnali generati dai test:
Segnale vol semplicealt
- Strategia uno - Movimento Vol:
Per creare un sistema di trading che ci avvisi tramite un commento sul grafico del movimento dell'indicatore Volumes basato sul confronto tra il valore del volume attuale e quello precedente, scriveremo il nostro codice come segue:
//+------------------------------------------------------------------+ //| Vol - Movement.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create an array for Volume double VolArray[]; //sorting the array from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,3,VolArray); //calculating current vol value double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5); //Conditions of vol movements //Volume increasing if(VolCurrentValue>VolPrevValue) { Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue, "\n","Volumes previous value is: ",VolPrevValue); } //Volume decreasing if(VolCurrentValue<VolPrevValue) { Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue, "\n","Volumes previous value is: ",VolPrevValue); } } //+------------------------------------------------------------------+
Differenze nel codice:
Calcolo dei valori attuali e precedenti di Volumes:
double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5);
Condizioni della strategia:
L'indicatore Volumes è in aumento:
if(VolCurrentValue>VolPrevValue) { Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue, "\n","Volumes previous value is: ",VolPrevValue); }
L'indicatore Volumes è in calo:
if(VolCurrentValue<VolPrevValue) { Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue, "\n","Volumes previous value is: ",VolPrevValue); }
Dopo aver compilato questo codice, possiamo trovare l'EA nella finestra del Navigatore:
Facendo doppio clic apparirà la finestra:
Dopo aver spuntato accanto a Consenti Algo Trading e aver premuto OK, verrà allegato al grafico:
Di seguito è riportato un esempio di segnali generati della strategia Vol - Movimento con la finestra dati dei dati correnti e precedenti.
L'aumento dei volumi:
Finestra dati corrente:
Finestra dati precedente:
La diminuzione dei volumi:
Finestra dati corrente:
Finestra dati precedente:
- Strategia due: Volume - Forza:
Di seguito è riportato il codice completo per creare un sistema di trading per questa strategia per generare automaticamente segnali della forza dell'indicatore Volumes sulla base di un confronto tra il valore dell'indicatore Volumes corrente e quello precedente:
//+------------------------------------------------------------------+ //| Vol - Strength.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create an array for Volume double VolArray[]; //sorting the array from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,11,VolArray); //calculating current vol && 5 previous volume values double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue1=NormalizeDouble(VolArray[1],5); double VolPrevValue2=NormalizeDouble(VolArray[2],5); double VolPrevValue3=NormalizeDouble(VolArray[3],5); double VolPrevValue4=NormalizeDouble(VolArray[4],5); double VolPrevValue5=NormalizeDouble(VolArray[5],5); //calculating AVG of 5 previous volume values double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5); //conditions of Volume strength based on comparing current to AVG //strong volume if(VolCurrentValue>VolAVGVal) { Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n", "Volume prev 1 is : ",VolPrevValue1,"\n", "Volume prev 2 is : ",VolPrevValue2,"\n", "Volume prev 3 is : ",VolPrevValue3,"\n", "Volume prev 4 is : ",VolPrevValue4,"\n", "Volume prev 5 is : ",VolPrevValue5,"\n", "AVG volume is : ",VolAVGVal); } //weak volume if(VolCurrentValue<VolAVGVal) { Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n", "Volume prev 1 is : ",VolPrevValue1,"\n", "Volume prev 2 is : ",VolPrevValue2,"\n", "Volume prev 3 is : ",VolPrevValue3,"\n", "Volume prev 4 is : ",VolPrevValue4,"\n", "Volume prev 5 is : ",VolPrevValue5,"\n", "AVG volume is : ",VolAVGVal); } } //+------------------------------------------------------------------+
Differenze nel codice:
Calcolo del valore attuale e dei cinque precedenti dell'indicatore Volumes:
double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue1=NormalizeDouble(VolArray[1],5); double VolPrevValue2=NormalizeDouble(VolArray[2],5); double VolPrevValue3=NormalizeDouble(VolArray[3],5); double VolPrevValue4=NormalizeDouble(VolArray[4],5); double VolPrevValue5=NormalizeDouble(VolArray[5],5);
Calcolo della media dei precedenti cinque valori dell’indicatore Volumes:
double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);
Condizioni della strategia:
Volume forte:
if(VolCurrentValue>VolAVGVal) { Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n", "Volume prev 1 is : ",VolPrevValue1,"\n", "Volume prev 2 is : ",VolPrevValue2,"\n", "Volume prev 3 is : ",VolPrevValue3,"\n", "Volume prev 4 is : ",VolPrevValue4,"\n", "Volume prev 5 is : ",VolPrevValue5,"\n", "AVG volume is : ",VolAVGVal); }
Volume debole:
if(VolCurrentValue<VolAVGVal) { Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n", "Volume prev 1 is : ",VolPrevValue1,"\n", "Volume prev 2 is : ",VolPrevValue2,"\n", "Volume prev 3 is : ",VolPrevValue3,"\n", "Volume prev 4 is : ",VolPrevValue4,"\n", "Volume prev 5 is : ",VolPrevValue5,"\n", "AVG volume is : ",VolAVGVal); }
Dopo aver compilato questa strategia, troveremo l'EA nella finestra del Navigatore:
Trascinando e rilasciando il file sul grafico, si aprirà la finestra dell’EA:
Dopo aver premuto OK, verrà allegato al grafico:
Di seguito è riportato un esempio di segnali generati in base alla forza del volume:
Volume forte:
Volume debole:
- Strategia tre: Price & Vol - Trend rialzista:
Di seguito è riportato il codice completo per la creazione di un sistema di trading per questa strategia:
//+------------------------------------------------------------------+ //| Price&Vol - Uptrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create arrays for price & Volume MqlRates PriceArray[]; double VolArray[]; //filling price array with data int Data=CopyRates(_Symbol,_Period,0,3,PriceArray); //sorting arrays from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,3,VolArray); //calculating the current and previous values of highs and volume double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5); double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5); //Conditions of buy signal //Buy signal if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue) { Comment("Buy Signal during uptrend", "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); } //no signal if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue) { Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); } } //+------------------------------------------------------------------+
Differenze nel codice:
Per poter creare gli array per il volume e i prezzi, useremo la funzione "double" per l'array del volume come abbiamo fatto prima, e MqlRates per l'array dei prezzi che memorizza prezzo, volume e spread.
MqlRates PriceArray[]; double VolArray[];
Riempimento dell'array dei prezzi utilizzando la funzione CopyRates dopo aver creato una variabile intera per Data:
int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
Calcolo dei valori attuali e precedenti dei massimi e di Volumes:
double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5); double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5);
Condizioni della strategia basate su massimi e i valori del volume:
Segnale d’acquisto:
if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue) { Comment("Buy Signal during uptrend", "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); }
Nessun segnale:
if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue) { Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); }
Dopo aver compilato questo codice, troveremo l'EA nella finestra del Navigatore:
Se vogliamo eseguire questo EA per generare segnali secondo la strategia di cui sopra, faremo doppio clic sul file per aprire la sua finestra:
Dopo aver fatto clic su OK, l'EA verrà allegato al grafico:
Di seguito è riportato un esempio di segnali generati basati sulla strategia Price & Vol - Trend rialzista con la finestra dei dati:
Segnale d’acquisto:
Dati attuali:
Dati precedenti:
Nessun segnale:
Dati attuali:
Dati precedenti:
- Strategia quattro: Price & Vol - Trend ribassista:
Il codice completo per creare un sistema di trading basato su questa strategia sarà come il seguente:
//+------------------------------------------------------------------+ //| Price&Vol - Downtrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create arrays for price & Volume MqlRates PriceArray[]; double VolArray[]; //filling price array with data int Data=CopyRates(_Symbol,_Period,0,3,PriceArray); //sorting arrays from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,3,VolArray); //calculating current and previous of lows and volume double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5); double PrevLowValue=NormalizeDouble(PriceArray[1].low,5); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5); //Conditions of short signal //short signal if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue) { Comment("Short Signal during downtrend", "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); } //no signal if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue) { Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); } } //+------------------------------------------------------------------+
Differenza nel codice:
Condizioni dei segnali generati in base alla strategia Price & Vol - trend ribassista:
Segnale di vendita:
if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue) { Comment("Short Signal during downtrend", "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); }
Nessun segnale:
if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue) { Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); }
Dopo aver compilato questo codice, l'EA sarà disponibile nel Navigatore:
Dopo aver fatto doppio clic sul file, verrà visualizzata la finestra dell’EA:
Dopo aver fatto clic su OK, l'EA verrà allegato al grafico:
Quello che segue è un esempio di segnali generati con la finestra dei dati correnti e precedenti:
Segnale di vendita:
Dati attuali:
Dati precedenti:
Nessun segnale:
Dati attuali:
Dati precedenti:
- Strategia cinque: Strategia MA & Vol:
Sulla base di questa strategia, possiamo creare un sistema di trading con il seguente codice:
//+------------------------------------------------------------------+ //| MA&Vol Strategy.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create arrays for MA & Volume double MAShortArray[],MALongArray[]; double VolArray[]; //sorting arrays from the current data ArraySetAsSeries(MAShortArray,true); ArraySetAsSeries(MALongArray,true); ArraySetAsSeries(VolArray,true); //defining MA & Volume int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE); int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE); int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling arrays CopyBuffer(MAShortDef,0,0,3,MAShortArray); CopyBuffer(MALongDef,0,0,3,MALongArray); CopyBuffer(VolDef,0,0,3,VolArray); //calculating MA && current volume values double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6); double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6); double MALongCurrentValue=NormalizeDouble(MALongArray[0],6); double MALongPrevValue=NormalizeDouble(MALongArray[1],6); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5); //conditions of buy and short signals //buy signal if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue &&VolCurrentValue>VolPrevValue) { Comment("Buy signal"); } //short signal if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue &&VolCurrentValue>VolPrevValue) { Comment("Short signal"); } } //+------------------------------------------------------------------+
Differenza nel codice:
Creazione degli array per la media mobile di breve, per la media mobile lunga e per il volume:
double MAShortArray[],MALongArray[]; double VolArray[];
Ordinamento di questi array:
ArraySetAsSeries(MAShortArray,true); ArraySetAsSeries(MALongArray,true); ArraySetAsSeries(VolArray,true);
Definire la media mobile di breve e lunga utilizzando la funzione iMA che restituisce l'handle dell'indicatore media mobile, i suoi parametri sono (simbolo, periodo, periodo medio, scostamento orizzontale, tipo di livellamento che è il tipo di media mobile, prezzo applicato), e definendo il volume con la funzione iVolumes come abbiamo detto prima:
int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE); int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE); int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
Riempimento degli array
CopyBuffer(MAShortDef,0,0,3,MAShortArray); CopyBuffer(MALongDef,0,0,3,MALongArray); CopyBuffer(VolDef,0,0,3,VolArray);
Calcolo dei valori attuali della MA di breve, della MA lunga e dei volumi oltre ai valori precedenti di MA di breve, MA lunga e volumi:
double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6); double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6); double MALongCurrentValue=NormalizeDouble(MALongArray[0],6); double MALongPrevValue=NormalizeDouble(MALongArray[1],6); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5);
Condizioni dei segnali generati dalla strategia:
Segnale d’acquisto:
if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue &&VolCurrentValue>VolPrevValue) { Comment("Buy signal"); }
Segnale di vendita:
if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue &&VolCurrentValue>VolPrevValue) { Comment("Short signal"); }
Dopo aver compilato questo codice, possiamo trovare l'EA nel Navigatore:
Trascinandolo e rilasciandolo sul grafico, l'EA verrà allegato:
Il seguente è un esempio di segnali generati basati su questa strategia:
Segnale d’acquisto:
Segnale di vendita:
Conclusioni
Spero di aver trattato bene l'argomento di questo utile indicatore tecnico e che tu abbia imparato come poter utilizzare l'indicatore di volume in modo appropriato per migliorare il tuo trading. Abbiamo imparato cos'è l'indicatore di volume, cosa misura, come possiamo leggerlo e come possiamo usarlo, inoltre abbiamo identificato la differenza tra il volume nel forex e nei mercati azionari attraverso l'argomento della definizione del Volume. Abbiamo anche imparato alcune semplici strategie di volume:
- Vol - movimento: per informarci del movimento del volume se è aumentato o diminuito.
- Vol - forza: per informarci della forza dell'attuale movimento del volume rispetto alla media del volume.
- Price and Vol - trend rialzista: per ottenere un segnale di acquisto durante il trend rialzista in base al movimento dei prezzi, accompagnato dal volume.
- Price and Vol - trend ribassista: per ottenere un segnale di vendita durante il trend ribassista in base al movimento dei prezzi, accompagnato dal volume.
- Strategia MA e Vol: per ottenere segnali di acquisto e vendita basati sull'incrocio tra medie mobili, accompagnati dal volume.
Queste strategie menzionate possono essere utilizzate anche dopo il test e l'ottimizzazione, se necessario, in base al concetto di base dell'indicatore. Abbiamo imparato tutto ciò attraverso l'argomento strategia con Volumes. Abbiamo imparato come creare uno schema passo dopo passo per ogni strategia per aiutarci a organizzare le nostre idee per creare un sistema di trading per ogni strategia menzionata attraverso l'argomento dello schema della strategia con Volumes. Quindi, abbiamo appreso la parte più interessante di questo articolo, ovvero come creare un sistema di trading tramite MQL5 per ogni strategia per generare segnali automaticamente e con precisione per poterli utilizzare nel terminale di trading MetaTrader 5.
È importante confermare ancora una volta che devi testare qualsiasi strategia prima di utilizzarla sul tuo conto reale in quanto potrebbe non essere utile per te in quanto non c'è nulla che sia adatto a tutte le persone. Spero che trovi utile questo articolo e trovi nuove idee relative all'argomento dell'articolo o ad altri argomenti correlati. Puoi anche provare a pensare a come combinare questo indicatore con altri strumenti tecnici per essere più efficace, come abbiamo fatto noi attraverso l'articolo, combinando il volume con le medie mobili poiché questo è un approccio molto intelligente. Se vuoi leggere altri articoli simili, puoi leggere gli altri miei articoli della serie su come progettare un sistema di trading basato sugli indicatori tecnici più popolari. Spero che li troverai utili.
Tradotto dall’inglese da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/en/articles/11050





- 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