Discusión sobre el artículo "MQL5: Crea tu propio indicador" - página 5

 
okwh #:

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

¿Por qué usar [i-1] para calcular [i] y empezar i=1 ? no [0] ?

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


Hola.

A grandes rasgos, si utilizas una de las funciones nativas del indicador mql5 que empieza por "i", no necesitas prestar atención a la ruta. El copybuffer lo hará por ti.

En cambio si pasas por un dev específico, tienes que prestar atención al número de barras, sobre todo para la primera pasada porque si no te arriesgas a un fuera de rango


mira el código de este rsi que utiliza Irsi, no hay posición para el curso y todo va bien.

Por otra parte, este Rsi no pasa por la función.

Todo se calcula a mano por así decirlo y hay que hacer bien el posicionamiento para que todo vaya bien.

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
 
//+------------------------------------------------------------------+
//|Índice de fuerza real.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
//---- parcela ETI
#property indicator_label1  "TSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Blue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- parámetros de entrada
input int      r=25;
input int      s=13;
//--- tampones indicadores
double         TSIBuffer[];
//+------------------------------------------------------------------+
//| Función de inicialización del indicador personalizada |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- asignación de búferes indicadores

   SetIndexBuffer(0,TSIBuffer,INDICATOR_DATA);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Función de iteración del indicador personalizada|
//+------------------------------------------------------------------+
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[])
  {
//---
//--- valor de retorno de prev_calculado para la siguiente llamada
   return(rates_total);
  }
//+------------------------------------------------------------------+

¿por qué en oninit
tiene que devolver 0?

 
ziyang2048 #:

¿por qué en oninit
tiene que devolver 0?

En MQL5, la función OnInit() es llamada cuando el indicador, asesor experto (EA), o script es inicializado. Se espera que devuelva un valor entero para señalar el éxito o el fracaso del proceso de inicialización.

Cuando OnInit() devuelve 0 , indica que la inicialización fue exitosa. Si necesita señalar que algo ha ido mal durante la inicialización, puede devolver un valor distinto de cero, lo que impedirá que el indicador, EA o script se ejecute correctamente.