Discussione sull’articolo "MQL5: Crea il tuo Indicatore" - pagina 5

 
okwh #:

for(int i=1;i<rates_total;i++)
{
MTMBuffer[i]=prezzo[i]-prezzo[i-1];
AbsMTMBuffer[i]=fabs(MTMBuffer[i]);
}

Perché usare [i-1] per calcolare [i] e avviare i=1? Non [0]?

MTMBuffer[i]=price[i]-price[i-1];


Ciao.

In linea di massima, se si utilizza una delle funzioni native dell'indicatore mql5 che inizia con "i", non è necessario prestare attenzione al percorso. Il copybuffer lo farà per voi.

D'altra parte, se si passa attraverso un percorso specifico, è necessario prestare attenzione al numero di barre, soprattutto per il primo passaggio, perché altrimenti si rischia di andare fuori range.


guardate il codice di questo rsi che utilizza Irsi, nessuna posizione per il corso e tutto va bene.

D'altra parte, questo Rsi non passa attraverso la funzione.

Tutto è calcolato a mano, per così dire, e bisogna fare bene il posizionamento perché tutto vada liscio.

Rsi code for beginners by William210
Rsi code for beginners by William210
  • www.mql5.com
Rsi beginner tutorial to learn how to code in MQL5
 
//+------------------------------------------------------------------+
//|Indice di forza reale.mq5 |
//| Copyright 2009, MetaQuotes Software Corp. |
//| https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- trama STI
#property indicator_label1  "TSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Blue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- parametri di ingresso
input int      r=25;
input int      s=13;
//--- buffer di indicatori
double         TSIBuffer[];
//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell'indicatore personalizzata |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- mappatura dei buffer degli indicatori

   SetIndexBuffer(0,TSIBuffer,INDICATOR_DATA);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Funzione di iterazione dell'indicatore personalizzata|
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//---
//--- restituisce il valore di prev_calculated per la chiamata successiva
   return(rates_total);
  }
//+------------------------------------------------------------------+

Perché in oninit
deve restituire 0?

 
ziyang2048 #:

Perché in oninit
deve restituire 0?

In MQL5, la funzione OnInit() viene chiamata quando l'indicatore, il consulente esperto (EA) o lo script viene inizializzato. Si prevede che restituisca un valore intero per segnalare il successo o il fallimento del processo di inizializzazione.

Quando OnInit() restituisce 0, indica che l'inizializzazione è avvenuta con successo. Se si vuole segnalare che qualcosa è andato storto durante l'inizializzazione, è possibile restituire un valore diverso da zero, che impedirà all'indicatore, all'EA o allo script di funzionare correttamente.