English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
preview
Impara come progettare un sistema di trading tramite Volumes

Impara come progettare un sistema di trading tramite Volumes

MetaTrader 5Trading | 22 dicembre 2022, 10:08
789 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

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:

  1. Definizione di Volumes
  2. Strategia con Volumes
  3. Schema della strategia con Volumes
  4. Sistema di trading con Volumes
  5. 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

Vol Inserito

Dopo aver scelto l'indicatore Volumes come nel passaggio quattro della figura precedente, si apre la finestra dell'indicatore volumes:

Parametro Vol

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:

Vol allegato

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.

Schema vol semplice


  • 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.

Vol - Schema di movimento


  • 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:

Vol - Schema della forza


  • 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:

Price_Vol - Schema trend ribassista


  • 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:

Schema MA_Vol


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:

 Nav1

Facendo doppio clic o trascinando e rilasciando il file sul grafico, apparirà la finestra dell’EA:

 Finestra vol semplice

Quindi, troveremo l'EA allegato al grafico:

 Vol semplice allegato

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:

Vol Nav2

Facendo doppio clic apparirà la finestra:

Vol - Finestra di movimento

Dopo aver spuntato accanto a Consenti Algo Trading e aver premuto OK, verrà allegato al grafico:

 Vol - Movimento allegato

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:

 Vol - Segnale incremento movimento - corrente

Finestra dati precedente:

 Vol - Segnale incremento movimento - precedente

La diminuzione dei volumi:

Finestra dati corrente:

Vol - Segnale movimento diminuito - corrente

Finestra dati precedente:

 Vol - Segnale movimento diminuito- 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:

 Vol Nav3

Trascinando e rilasciando il file sul grafico, si aprirà la finestra dell’EA:

 Vol - Finestra di forza

Dopo aver premuto OK, verrà allegato al grafico:

Vol - Forza allegato

Di seguito è riportato un esempio di segnali generati in base alla forza del volume:

Volume forte:

Vol - Forza - segnale forte

Volume debole:

Vol - Forza - segnale 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:

Vol Nav4

Se vogliamo eseguire questo EA per generare segnali secondo la strategia di cui sopra, faremo doppio clic sul file per aprire la sua finestra:

Price_Vol - Finestra di trend rialzista

Dopo aver fatto clic su OK, l'EA verrà allegato al grafico:

Price_Vol - Trend rialzista allegato

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:

Price_Vol - acquisto trend rialzista - corrente

Dati precedenti:

Price_Vol - acquisto trend rialzista - precedente

Nessun segnale:

Dati attuali:

Price_Vol - trend rialzista nessun segnale - corrente

Dati precedenti:

Price_Vol - trend rialzista nessun segnale - precedente

  • 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:

Vol Nav5

Dopo aver fatto doppio clic sul file, verrà visualizzata la finestra dell’EA:

Price_Vol - Finestra trend ribassista

Dopo aver fatto clic su OK, l'EA verrà allegato al grafico:

Price_Vol - trend ribassista allegato

Quello che segue è un esempio di segnali generati con la finestra dei dati correnti e precedenti:

Segnale di vendita:

Dati attuali:

Price&Vol - Segnale short trend ribassista - corrente

Dati precedenti:

Price&Vol - Segnale short trend ribassista - precedente

Nessun segnale:

Dati attuali:

Price&Vol - Trend ribassista nessun segnale - corrente

Dati precedenti:

Price_Vol - trend ribassista nessun segnale - precedente

  • 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:

Vol Nav6

Trascinandolo e rilasciandolo sul grafico, l'EA verrà allegato:

MA_Vol allegato

Il seguente è un esempio di segnali generati basati su questa strategia:

Segnale d’acquisto:

MA_Vol Segnale di acquisto

Segnale di vendita:

 MA_Vol 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

Matrici e vettori in MQL5 Matrici e vettori in MQL5
Utilizzando tipi di dati speciali "matrix" e "vector", è possibile creare un codice che è molto vicino alla notazione matematica. Con questi metodi, si evita la necessità di creare cicli annidati o di occuparsi della corretta indicizzazione degli array nei calcoli. Pertanto, l'uso di metodi matriciali e vettoriali aumenta l'affidabilità e la velocità nello sviluppo di programmi complessi.
Impara come progettare un sistema di trading tramite MFI Impara come progettare un sistema di trading tramite MFI
Il nuovo articolo della nostra serie sulla progettazione di un sistema di trading basato sugli indicatori tecnici più popolari considera un nuovo indicatore tecnico - il Money Flow Index (MFI). Lo impareremo in dettaglio e svilupperemo un semplice sistema di trading tramite MQL5 per eseguirlo in MetaTrader 5.
Scienza dei Dati e Apprendimento Automatico (Parte 04): Predire l'Attuale Crollo del Mercato Azionario Scienza dei Dati e Apprendimento Automatico (Parte 04): Predire l'Attuale Crollo del Mercato Azionario
In questo articolo cercherò di utilizzare il nostro modello logistico per prevedere il crollo del mercato azionario basato sui fondamentali dell'economia statunitense, NETFLIX e APPLE sono i titoli su cui ci concentreremo. Utilizzando i precedenti crolli del mercato del 2019 e 2020 vediamo come funzionerà il nostro modello nelle attuali sventure e tenebre.
Sviluppare un Expert Advisor per il trading da zero (Parte 13): Times e Trade (II) Sviluppare un Expert Advisor per il trading da zero (Parte 13): Times e Trade (II)
Oggi costruiremo la seconda parte del sistema Times & Trade per l'analisi del mercato. Nel precedente articolo "Times & Trade (I)" abbiamo discusso di un sistema di organizzazione grafica alternativa, che consentirebbe di avere un indicatore per l'interpretazione più rapida possibile delle transazioni eseguite sul mercato.