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

Impara come progettare un sistema di trading tramite Relative Vigor Index

MetaTrader 5Trading | 10 ottobre 2023, 11:07
356 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introduzione

Benvenuti nel mio nuovo articolo della serie per imparare nuovi strumenti tecnici in dettaglio e progettare un semplice sistema di trading con questo strumento. Si tratta dell'indicatore Relative Vigor Index (RVI), lo tratteremo attraverso i seguenti argomenti:

  1. Definizione di Relative Vigor Index
  2. Strategia Relative Vigor Index
  3. Schema della strategia Relative Vigor Index
  4. Sistema di trading Relative Vigor Index
  5. Conclusioni

Utilizzeremo l'IDE MQL5 (MetaQuotes Language 5) per scrivere i nostri codici e il terminale di trading MetaTrader 5 per eseguire il nostro sistema di trading. Vi consiglio di provare ad applicare da soli ciò che imparerete se volete migliorare le vostre capacità di codifica come principianti, perché la pratica è molto importante. Se non sapete come scaricare e utilizzare MetaTrader 5 e MQL5, potete leggere l'argomento Scrivere codice MQL5 in MetaEditor da un mio precedente articolo.

Tutte le strategie citate sono solo a scopo didattico, quindi potreste scoprire che necessitano di un'ottimizzazione e questo è normale, poiché l'obiettivo principale di questo articolo e di queste semplici strategie è quello di imparare il concetto principale che ne è alla base. Pertanto, è necessario testarli molto bene prima di utilizzarli sul proprio conto reale per assicurarsi che siano utili per il proprio trading.

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.


Definizione di Relative Vigor Index

In questo argomento scopriremo in dettaglio cos'è il Relative Vigor Index (RVI). Si tratta di un indicatore tecnico Oscillatore e di momentum. Confrontando il prezzo di chiusura con il livello di apertura, questo indicatore misura la forza del trend. Durante il trend rialzista, il prezzo di chiusura chiude più alto del prezzo di apertura, mentre durante il trend ribassista il prezzo di chiusura chiude più basso del prezzo di apertura. Inoltre, i risultati sono stati smussati utilizzando la media mobile semplice. Per sua natura, l'indicatore RVI si comporta meglio durante i mercati in trend rispetto ai periodi in range. Il calcolo di questo RVI è simile a quello dell'Oscillatore Stocastico, ma l'RVI confronta il prezzo di chiusura con quello di apertura, mentre l'Oscillatore Stocastico confronta la chiusura con il suo intervallo di prezzi durante un periodo specifico. Se si desidera calcolare manualmente l'RVI, è possibile farlo attraverso i seguenti passaggi:

RVI = (CLOSE - OPEN) / (HIGH - LOW)

Dove:

CLOSE = Prezzo di chiusura

OPEN = Prezzo di apertura

HIGH = Prezzo più alto

LOW = Prezzo più basso

Ma solitamente, l'RVI che utilizziamo appare come due linee con componenti differenti nel calcolo e di seguito viene illustrato come calcolarle.

1- Calcolo della prima riga:

  • Calcolo del numeratore:

MovAverage = (CLOSE-OPEN) + 2 * (CLOSE-1 - OPEN-1) + 2 * (CLOSE-2 - OPEN-2) + (CLOSE-3 - OPEN-3)

Dove:

CLOSE = Prezzo di chiusura attuale

CLOSE 1, CLOSE 2, CLOSE 3 = prezzi di chiusura di 1, 2 e 3 periodi indietro

OPEN = Prezzo di apertura corrente

OPEN 1, OPEN 2, OPEN 3 = prezzi di apertura di 1, 2 e 3 periodi indietro

  • Calcolo del denominatore:

RangeAverage = (HIGH-LOW) + 2 x (HIGH-1 - LOW-1) + 2 x (HIGH-2 - LOW-2) + (HIGH-3 - LOW-3)

Dove:

HIGH = Ultimo prezzo massimo

HIGH, HIGH 2, HIGH 3 = Ultimi prezzi massimi di 1, 2 e 3 periodi indietro

LOW = Ultimo Prezzo Minimo

LOW 1, LOW 2, LOW 3 = Ultimi prezzi minimi di 1, 2 e 3 periodi indietro

  • Calcolare la somma di queste medie come segue:

Media RVI

2- Calcolo della seconda linea:

RVIsignal = (RVIaverage + 2 * RVIaverage-1 + 2 * RVIaverage-2 + RVIaverage-3)/6

Ora, abbiamo compreso il concetto principale di questo indicatore dopo aver imparato a calcolarlo manualmente, ma non è necessario farlo perché viene calcolato nel terminale di trading MetaTrader 5 e tutto ciò che dobbiamo fare è sceglierlo tra gli indicatori disponibili. Di seguito viene illustrato come inserirlo nel grafico:

All'apertura del terminale MetaTrader 5 --> Inserisci --> Indicatori --> Oscillatori --> Relative Vigor Index

RVI Inserito

Dopo aver premuto su Relative Vigor Index, verrà visualizzata la finestra dei suoi parametri, come quella che segue:

Param RVI

1- Per determinare il periodo.

2- Per determinare il colore della linea RVI.

3- Per determinare lo stile della linea RVI.

4- Per determinare lo spessore della linea RVI.

5- Per determinare il colore della linea di segnale.

6- Per determinare lo stile della linea di segnale.

7- Per determinare lo spessore della linea di segnale.

Dopo aver determinato tutti i parametri, scopriremo che l'indicatore è allegato come segue:

RVI allegato

Come possiamo vedere nel grafico precedente, abbiamo l'indicatore RVI allegato al grafico e presenta due linee che oscillano intorno al livello zero.


Strategia Relative Vigor Index

Dopo aver appreso il concetto principale dietro l'RVI, impareremo a utilizzarlo su questa base attraverso semplici strategie. Quello che devo confermare ancora una volta è di assicurarsi di testare qualsiasi strategia prima di utilizzarla sul proprio conto reale per assicurarsi che sia adatta al proprio trading e che sia redditizia, poiché il concetto principale qui è quello di condividere strategie semplici solo a scopo educativo ed è normale che si scopra che potrebbero aver bisogno di ottimizzazioni.

  • Strategia uno: RVI Crossover - Trend rialzista:

In base a questa strategia, dobbiamo ottenere segnali di acquisto e chiusura durante il trend rialzista in base a una condizione specifica. Quando il valore corrente di RVI e il valore corrente del segnale RVI sono superiori al livello zero e contemporaneamente il valore corrente di RVI è superiore al valore corrente del segnale RVI, si tratterà di un segnale di acquisto. Viceversa, quando il valore corrente RVI e il valore corrente del segnale RVI sono inferiori al livello zero e allo stesso tempo il valore corrente RVI è inferiore al valore corrente del segnale RVI, si tratterà di un segnale di chiusura.

Semplicemente,

Valore RVI > 0 e valore del segnale RVI > 0 e valore RVI > valore del segnale RVI --> acquistare

Valore RVI < 0 e valore del segnale RVI < 0 e valore RVI < valore del segnale RVI --> chiudere

  • Strategia due: RVI Crossover - trend ribassista:

Sulla base di questa strategia, dobbiamo ottenere i segnali opposti a quelli della precedente strategia RVI Crossover - Trend rialzista, in quanto dobbiamo ottenere segnali di vendita e di copertura. Quando il valore corrente RVI e il valore corrente del segnale RVI sono inferiori al livello zero e nello stesso momento il valore corrente RVI è inferiore al valore corrente del segnale RVI, si tratterà di un segnale di vendita. Viceversa, quando il valore corrente RVI e il valore corrente del segnale RVI sono superiori al livello zero e allo stesso tempo il valore corrente RVI è superiore al valore attuale del segnale RVI, si tratterà di un segnale di copertura.

Semplicemente,

Valore RVI < 0 e valore del segnale RVI < 0 e valore RVI < valore del segnale RVI --> vendere

Valore RVI > 0 e valore del segnale RVI > 0 e valore RVI > valore del segnale RVI --> copertura 

  • Strategia tre: RVI & MA Crossover:

In base a questa strategia, dobbiamo ottenere segnali di acquisto e di vendita in base a condizioni specifiche, in quanto dobbiamo ottenere un segnale di acquisto quando il prezzo di chiusura è superiore alla media mobile a 100 periodi e allo stesso tempo il valore RVI corrente è superiore al valore del segnale RVI corrente. Nell'altro scenario, dobbiamo ottenere un segnale di vendita quando il prezzo di chiusura è inferiore alla media mobile a 100 periodi e allo stesso tempo il valore RVI corrente è inferiore al valore del segnale RVI corrente.

Semplicemente,

Prezzo di chiusura > Media mobile -100 e valore RVI > valore del segnale RVI --> acquistare

Prezzo di chiusura < Media mobile-100 e valore RVI < valore del segnale RVI --> vendere


Schema della strategia Relative Vigor Index

Dopo aver appreso come utilizzare l'RVI attraverso le nostre strategie, creeremo uno schema passo-passo per ogni strategia, per aiutarci a creare un sistema di trading senza problemi.

  • Strategia uno: RVI Crossover - Trend rialzista:

In base a questa strategia, dobbiamo creare un sistema di trading che fornisca segnali di acquisto e chiusura durante il trend rialzista, controllando continuamente i seguenti valori:

  • Il valore attuale dell'RVI
  • Il valore attuale del segnale RVI
  • Il livello zero dell'indicatore RVI

Se il valore RVI attuale è superiore al livello zero, il valore del segnale RVI attuale è superiore al livello zero e il valore RVI attuale è superiore al valore del segnale RVI attuale, il sistema di trading deve restituire i seguenti valori come commento sul grafico:

  • Segnale d’Acquisto
  • Valore Relative Vigor Index
  • Valore del Segnale RVI

Nell'altro scenario, se il valore attuale dell'RVI è inferiore al livello zero, il valore attuale del segnale RVI è inferiore al livello zero e il valore attuale dell'RVI è inferiore al valore attuale del segnale RVI, il sistema di trading deve restituire i seguenti valori come commento sul grafico:

  • Segnale di chiusura
  • Valore Relative Vigor Index
  • Valore del Segnale RVI

Di seguito viene illustrato lo schema passo-passo di questa strategia:

RVI crossover - Schema U

  • Strategia due: RVI Crossover - trend ribassista:

In base a questa strategia, dobbiamo creare un sistema di trading in grado di fornirci segnali di vendita e copertura durante il trend ribassista controllando continuamente gli stessi valori della strategia precedente:

  • Il valore attuale dell'RVI
  • Il valore attuale del segnale RVI
  • Il livello zero dell'indicatore RVI

Ma le condizioni saranno leggermente diverse a seconda dei segnali desiderati. Se il valore attuale dell'RVI è inferiore al livello zero, il valore attuale del segnale RVI è inferiore al livello zero e allo stesso tempo il valore dell'RVI è inferiore al valore del segnale RVI, è necessario che il sistema di trading restituisca i seguenti valori come commento sul grafico:

  • Segnale di Vendita
  • Valore Relative Vigor Index
  • Valore del Segnale RVI

D'altra parte, se il valore attuale dell'RVI è superiore al livello zero, il valore attuale del segnale RVI è superiore al livello zero e allo stesso tempo, il valore dell'RVI è superiore al valore del segnale RVI, è necessario che il sistema di trading restituisca i seguenti valori come commento sul grafico:

  • Copertura
  • Valore Relative Vigor Index
  • Valore del Segnale RVI

Di seguito è riportato lo schema di questo sistema di trading:

Crossover RVI - Schema D

  • Strategia tre: RVI & MA Crossover

In base a questa strategia, dobbiamo creare un sistema di trading che fornisca segnali di acquisto e vendita controllando continuamente i seguenti valori:

  • Il prezzo di chiusura
  • La media mobile (MA) a 100 periodi
  • Il valore attuale dell'RVI
  • Il valore attuale del segnale RVI

Se il prezzo di chiusura è superiore alla MA a 100 periodi e il valore RVI corrente è superiore al valore del segnale RVI corrente, il sistema di trading deve restituire i seguenti valori come commento sul grafico:

  • Segnale d’Acquisto
  • Prezzo di chiusura
  • Valore MA
  • Valore Relative Vigor Index
  • Valore del Segnale RVI

D'altra parte, se il prezzo di chiusura è inferiore alla MA a 100 periodi e il valore RVI corrente è inferiore al valore del segnale RVI corrente, il sistema di trading deve restituire i seguenti valori come commento sul grafico:

  • Segnale di Vendita
  • Prezzo di chiusura
  • Valore MA
  • Valore Relative Vigor Index
  • Valore del Segnale RVI

Di seguito è riportato lo schema di questa strategia:

Schema RVI, MA crossover

Sistema di trading Relative Vigor Index

Dopo aver imparato come utilizzare l'RVI attraverso semplici strategie e aver creato uno schema passo-passo per ogni strategia, per aiutarci a creare il nostro sistema di trading. Ora creeremo un sistema di trading per ogni strategia menzionata. Per prima cosa, creeremo un semplice sistema di trading che restituisca il valore attuale dell'RVI come commento sul grafico, di seguito, il codice per creare questo sistema di trading passo-passo.

Creare due array per il segnale RVI e per RVI utilizzando la funzione double:

   double rviArray[];
   double rviSignalArray[];

Impostazione del flag AS_SERIES agli array che restituisce un valore booleano vero o falso utilizzando la funzione "ArraySetAsSeries":

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

Definire l'RVI utilizzando la funzione "iRVI" che restituisce l'handle dell'indicatore Relative Vigor Index. I suoi parametri sono:

  • symbol: per determinare il nome del simbolo, useremo (_Symbol) da applicare al simbolo corrente. 
  • period: per impostare il periodo da utilizzare, si utilizzerà (_period) da applicare al timeframe corrente. 
  •  ma_periodo: per impostare il periodo mediato, useremo(10).
int rviDef = iRVI(_Symbol,_Period,10);

Ottenere i dati dal buffer dell'indicatore RVI utilizzando la funzione "CopyBuffer". I suoi parametri sono: 

  • indicator_handle: utilizzeremo quello predefinito dell’indicatore (rviDef, rviDef).
  • buffer_num: per determinare il numero di buffer dell'indicatore, useremo (0, 1).
  • start_pos: per determinare la posizione iniziale, useremo (0, 0).
  • conteggio: per determinare la quantità da copiare, useremo (3, 3).
  • buffer[]: per determinare l'array di destinazione da copiare, useremo (rviArray, rviSignalArray).
   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

Definire i valori di RVI e del segnale RVI utilizzando la funzione "NormalizeDouble" che restituisce un valore di tipo double. I suoi parametri sono:

  • value: per determinare il numero normalizzato. Utilizzeremo (rviArray[0], rviSignalArray[0]).
  • digits: per determinare il numero di cifre dopo il decimale. Utilizzeremo (3).
   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

Utilizzo della funzione "Comment" per restituire il valore dell'indicatore RVI corrente come commento sul grafico.

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

Il codice completo sarà uguale al seguente:

//+------------------------------------------------------------------+
//|                                                   Simple RVI.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()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

  }
//+------------------------------------------------------------------+

Dopo aver compilato questo codice, nella finestra del navigatore troveremo l'expert uguale a quello che segue:

 RVI nav

Facendo doppio clic sull'expert per eseguirlo nel terminale di trading, troveremo la finestra di questo expert uguale alla seguente:

Fin Semplice RVI

Premendo "OK" dopo aver messo il segno di spunta accanto a "Consenti Algo Trading", troveremo l'expert allegato al grafico come di seguito riportato:

 RVI semplice allegato

Ora siamo pronti a generare segnali basati su questo sistema di trading. Quindi, otterremo un segnale simile al seguente:

Segnale RVI semplice

Come si può notare, nell'angolo in alto a sinistra del grafico è presente un commento con il valore attuale dell'RVI.

  • Strategia uno: RVI Crossover - Trend rialzista:

Di seguito è riportato il codice completo per creare un sistema di trading basato su questa strategia:

//+------------------------------------------------------------------+
//|                                      RVI Crossover - 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()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


  }
//+------------------------------------------------------------------+

Differenze in questo codice.

Condizioni della strategia:

In caso di segnale di acquisto

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

In caso di chiusura

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Dopo aver compilato questo codice e averlo eseguito sul terminale di trading nello stesso modo in cui abbiamo menzionato il sistema di trading semplice RVI, troveremo l'expert allegato al grafico come segue:

RVI crossover - U allegato

Quindi, possiamo ottenere i segnali desiderati sulla base di questo sistema di trading, come quello che segue:

In caso di segnale di acquisto:

 RVI crossover - U - segnale d'acquisto

Come si può vedere dal grafico in alto a sinistra, abbiamo ricevuto un segnale con i seguenti valori:

  • Segnale d’Acquisto
  • Valore del Relative Vigor Index
  • Valore del segnale RVI

In caso di segnale di chiusura:

 RVI crossover - U - segnale di chiusura

Come si può vedere dal grafico in alto a sinistra, abbiamo ricevuto un segnale con i seguenti valori:

  • Chiusura
  • Valore del Relative Vigor Index
  • Valore del segnale RVI

È chiaro che questo segnale è lo stesso di cui abbiamo bisogno in base alla nostra strategia di trading menzionata e alle sue condizioni durante il trend rialzista.

  • Strategia due: RVI Crossover - trend ribassista:

Di seguito è riportato il codice completo per creare un sistema di trading per questa strategia di trading:

//+------------------------------------------------------------------+
//|                                    RVI Crossover - 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()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
  }
//+------------------------------------------------------------------+  

Differenze in questo codice.

Condizioni della strategia:

In caso di segnale di vendita

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

In caso di copertura

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Dopo aver compilato ed eseguito questo codice come quello appreso in precedenza, scopriremo che l'expert è allegato al grafico come segue:

 RVI crossover - D allegato

Ora siamo pronti a ricevere i segnali basati su questa strategia e su questo sistema di trading. Di seguito sono riportati alcuni esempi di segnali provenienti dai test:

In caso di segnale di vendita:

 RVI crossover - D - segnale di vendita

Come si può vedere dal grafico in alto a sinistra, abbiamo ricevuto un segnale con i seguenti valori:

  • Segnale di vendita
  • Valore del Relative Vigor Index
  • Valore del segnale RVI 

In caso di copertura:

RVI crossover - D - segnale di copertura

Come si può notare, abbiamo un segnale con i seguenti valori:

  • Copertura
  • Valore del Relative Vigor Index
  • Valore del segnale RVI

Ora abbiamo creato un sistema di trading basato sulla strategia RVI Crossover - Trend ribassista per generare segnali durante il trend al ribasso.

  • Strategia tre: RVI & MA Crossover:

Di seguito è riportato il codice completo per creare un sistema di trading per questa strategia di trading:

//+------------------------------------------------------------------+
//|                                           RVI & MA Crossover.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()
  {
   MqlRates pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


  }
//+------------------------------------------------------------------+

Differenze in questo codice.

Creazione di quattro array (pArray, maArray, rviArray, rviSignalArray). Utilizzeremo la funzione double come abbiamo detto, tranne che per il pArray, utilizzeremo la funzione MqlRates che memorizza le informazioni su prezzo, volume e spread.

   MqlRates pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

Impostazione del flag AS_SERIES agli array che restituisce un valore booleano vero o falso utilizzando la funzione "ArraySetAsSeries". Definire i dati utilizzando la funzione "CopyRates" per ottenere i dati storici della struttura MqlRates e i suoi parametri sono:

  • symbol_name: per determinare il nome del simbolo, useremo _Symbol da applicare al simbolo corrente.
  • timeframe: per determinare il periodo e useremo _Period per applicarlo al timeframe corrente.
  • start_pos: per determinare la posizione iniziale, useremo (0). 
  • count: per determinare il conteggio dei dati da copiare, utilizzeremo (1).
  • rates_array[]: per determinare l'array di destinazione da copiare, utilizzeremo pArray.
   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

Definire l'RVI utilizzando la funzione iRVI, come già detto, mentre per la media mobile utilizzando la funzione iMA che restituisce l'handle dell'indicatore media mobile e i suoi parametri sono:

  • symbol: per determinare il nome del simbolo, useremo (_Symbol) 
  • period: per determinare il periodo del timeframe, utilizzeremo (_period)
  • ma_period: per determinare il periodo della media mobile, useremo 100 
  • ma_shift: per determinare lo scostamento orizzontale, useremo (0) 
  • ma_method: per determinare il tipo di media mobile, useremo la MA esponenziale 
  • applied_price: per determinare il tipo di prezzo, useremo il prezzo di chiusura 
   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

Ottenere i dati dal buffer degli indicatori RVI e MA utilizzando la funzione "CopyBuffer".

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

Definizione dei valori di RVI, segnale RVI e valore MA mediante la funzione NormalizeDouble.

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

Condizioni della strategia.

In caso di segnale di acquisto

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

In caso di segnale di vendita

   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Dopo aver compilato questo codice ed eseguito l'expert nel terminale, scopriremo che l'expert è allegato al grafico come di seguito riportato:

 RVI, MA crossover allegato

Ora, possiamo ottenere i segnali generati sulla base di questo sistema di trading come i seguenti esempi dai test.

In caso di segnale di acquisto:

 RVI, MA crossover - segnale d'acquisto

Come possiamo vedere nel grafico precedente, nell'angolo in alto a sinistra abbiamo un segnale con i seguenti valori:

  • Segnale d’Acquisto
  • Prezzo di chiusura
  • Valore MA
  • Valore Relative Vigor Index
  • Valore del Segnale RVI

In caso di segnale di vendita:

RVI, MA crossover - segnale di vendita

Abbiamo un segnale con i seguenti valori:

  • Segnale di Vendita
  • Prezzo di chiusura
  • Valore MA
  • Valore Relative Vigor Index
  • Valore del Segnale RVI

A questo punto, abbiamo creato un sistema di trading per ogni strategia menzionata per generare un segnale automatico basato sulle sue condizioni.


Conclusioni

Dopo quello che abbiamo imparato attraverso gli argomenti precedenti in questo articolo, si suppone che abbiamo compreso a fondo questo indicatore, poiché lo abbiamo studiato in dettaglio. Abbiamo imparato cos'è, cosa misura e come calcolarlo manualmente per capire il concetto principale dell'indicatore RVI. Abbiamo imparato a usarlo attraverso tre semplici strategie:

  • RVI Crossover - Trend rialzista: per generare segnali di acquisto e chiusura durante il trend al rialzo.
  • RVI Crossover - Trend ribassista: per generare segnali di vendita e di copertura durante il trend al ribasso.
  • RVI & MA Crossover: per generare segnali di acquisto e vendita basati su una specifica tecnica di crossover.

Per ogni strategia menzionata abbiamo progettato uno schema passo-passo che ci aiuta a creare il sistema di trading in modo semplice e senza intoppi. Abbiamo creato un sistema di trading per ognuna delle strategie menzionate per generare segnali automatici dopo averle eseguite in MetaTrader 5.

Spero che abbiate provato ad applicare da soli quanto appreso per trarre il massimo beneficio da questo articolo e sviluppare le vostre capacità di programmazione. Spero anche che questo articolo vi sia stato utile per migliorare i vostri risultati di trading e per ottenere spunti utili relativi all'argomento dell'articolo o a qualsiasi altro argomento correlato. Se volete leggere altri articoli simili per imparare a progettare un sistema di trading basato sugli indicatori tecnici più popolari, potete leggere gli altri articoli di questa serie dedicato a questo argomento.

Tradotto dall’inglese da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/en/articles/11425

Impara come progettare un sistema di trading tramite Awesome Oscillator Impara come progettare un sistema di trading tramite Awesome Oscillator
In questo nuovo articolo della nostra serie, impareremo a conoscere un nuovo strumento tecnico che può essere utile per il nostro trading. Si tratta dell'indicatore Awesome Oscillator (AO). Impareremo a progettare un sistema di trading con questo indicatore.
Algoritmi di ottimizzazione della popolazione: Ricerca del Banco di Pesci (FSS) Algoritmi di ottimizzazione della popolazione: Ricerca del Banco di Pesci (FSS)
La Ricerca del Banco di Pesci (FSS) è un nuovo algoritmo di ottimizzazione ispirato al comportamento dei pesci in un banco, la maggior parte dei quali (fino all'80%) nuota in una comunità organizzata di affini. È stato dimostrato che le aggregazioni dei pesci svolgono un ruolo importante nell'efficienza del foraggiamento e nella protezione dai predatori.
Avvio di MetaTrader VPS per la prima volta: Istruzioni passo-passo Avvio di MetaTrader VPS per la prima volta: Istruzioni passo-passo
Tutti coloro che hanno utilizzato robot di trading o abbonamenti a segnali prima o poi riconoscono la necessità di noleggiare un server di hosting affidabile 24/7 per la loro piattaforma di trading. Consigliamo di utilizzare MetaTrader VPS per una serie di motivi. Potete pagare comodamente il servizio e gestire l'abbonamento attraverso il vostro account MQL5.community.
Impara come progettare un sistema di trading tramite DeMarker Impara come progettare un sistema di trading tramite DeMarker
Ecco un nuovo articolo nella nostra serie su come progettare un sistema di trading tramite gli indicatori tecnici più popolari. In questo articolo presenteremo come creare un sistema di trading tramite l'indicatore DeMarker.