Home Indicatore tecnico Post

Cycle Period: L'indicatore per MetaTrader 5 che Adatta i Tuoi Oscillatori

Allegato
562.zip (8.65 KB, Scarica 0 volte)

Autore originale:

Witold Wozniak

L'indicatore Cycle Period è stato progettato per misurare la periodicità delle variazioni di prezzo di un asset finanziario.

Questo indicatore memorizza nel suo buffer i valori ciclici di mercato attuali, che non possono mai rimanere stabili per motivi evidenti. È pensato per essere utilizzato insieme agli oscillatori, permettendo loro di adattarsi ai cicli di mercato in continua evoluzione.

L'ispirazione per questo indicatore proviene dall'articolo di John Ehlers "Using The Fisher Transform", pubblicato nel novembre 2002 sulla rivista "Technical Analysis Of Stock & Commodities".  

Cycle Period

Per usare questo indicatore, il gestore di CyclePeriod deve essere dichiarato a livello globale, in modo da poter essere utilizzato nel codice di un altro indicatore (ad esempio, nell'oscillatore RVI):

//---- dichiarazione delle variabili intere per i gestori degli indicatori
int CP_Handle;

Successivamente, il gestore dell'indicatore CyclePeriod deve essere ricevuto nel blocco di inizializzazione dell'indicatore RVI:

//---- ottenimento del gestore dell'indicatore CyclePeriod
   CP_Handle=iCustom(NULL,0,"CyclePeriod",Alpha);
   if(CP_Handle==INVALID_HANDLE)
     {
      Print(" Errore nel recupero del gestore dell'indicatore CyclePeriod");
      return(1);
     }

Ora abbiamo la nuova variabile Alpha, che è il parametro di input dell'indicatore utilizzato e il rapporto di media del periodo. Questa variabile deve essere trasformata nella variabile di input dell'indicatore sviluppato.

//+----------------------------------------------+
//| Parametri di input dell'indicatore                 |
//+----------------------------------------------+
input double Alpha=0.07; // Rapporto di levigatura dell'indicatore 

La variabile di input Length deve essere rimossa dalla lista dei parametri di input, trasformandola in una variabile locale all'interno della funzione OnCalculate().

La dimensione degli array utilizzati per la levigatura dell'indicatore è fissa e definita dal valore del parametro Length:

//---- Distribuzione della memoria per gli array delle variabili  
   ArrayResize(Count,Length);
   ArrayResize(Value1,Length);
   ArrayResize(Value2,Length);

Il valore di questo parametro ora cambia. Pertanto, è meglio impostare le dimensioni di questi array non inferiori al valore massimo previsto di questa variabile.

Analizzando i grafici degli indicatori, possiamo notare che questo valore non supera il 100. Pertanto, le dimensioni degli array avranno lo stesso valore:

//---- Distribuzione della memoria per gli array delle variabili  
   ArrayResize(Count,MAXPERIOD);
   ArrayResize(Value1,MAXPERIOD);
   ArrayResize(Value2,MAXPERIOD);

Inoltre, i valori del periodo per la barra corrente nel blocco OnCalculate() devono essere prelevati dal buffer dell'indicatore personalizzato CyclePeriod, in modo da poterli utilizzare invece del valore del precedente parametro di input Length.

//---- ciclo principale di calcolo dell'indicatore
   for(bar=first; bar<rates_total && !IsStopped(); bar++)
     {
      //---- copia dei nuovi dati apparsi nell'array
      if(CopyBuffer(CP_Handle,0,rates_total-1-bar,4,period)<=0) return(RESET);

      Length=int(MathFloor((4.0*period[0]+3.0*period[1]+2.0*period[2]+period[3])/20.0));
      if(bar<Length) Length=bar; // limitare la levigatura al numero reale di barre

In questo caso, gli ultimi quattro valori vengono prelevati dal buffer dell'indicatore CyclePeriod e viene eseguita una levigatura ponderata linearmente, dopo di che il valore ottenuto viene utilizzato come periodo di levigatura Length. Infine, la riga alla fine del codice dell'indicatore deve essere modificata:

      if(bar<rates_total-1) Recount_ArrayZeroPos(Count,MAXPERIOD);

Come risultato, abbiamo ottenuto l'oscillatore RVI adattivo:

Indicatori RVI e RVI Adattivo

Post correlati

Commento (0)