Discussion de l'article "MQL5 : Créez votre propre indicateur" - page 5

 
okwh #:

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

Pourquoi utiliser [i-1] pour calculer [i] et commencer i=1 ? pas de [0] ?

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


Bonjour.

En gros, si vous utilisez une des fonctions natives de l'indicateur mql5 qui commence par "i", vous n'avez pas besoin de faire attention à la route. Le copybuffer le fera pour vous.

Par contre si vous passez par un dev spécifique, vous devez faire attention au nombre de barres, surtout pour le premier passage car sinon vous risquez d'avoir un out of range.


regardez le code de ce rsi qui utilise l'Irsi, pas de position pour le cours et tout se passe bien.

Par contre, ce Rsi ne passe pas par la fonction.

Tout est calculé à la main, si l'on peut dire, et il faut bien faire le positionnement pour que tout se passe 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
 
//+------------------------------------------------------------------+
//|Indice de force réelle.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
//---- parcelle TSI
#property indicator_label1  "TSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Blue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- paramètres d'entrée
input int      r=25;
input int      s=13;
//--- tampons d'indicateurs
double         TSIBuffer[];
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé
//+------------------------------------------------------------------+
int OnInit()
  {
//--- cartographie des tampons d'indicateurs

   SetIndexBuffer(0,TSIBuffer,INDICATOR_DATA);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisée|
//+------------------------------------------------------------------+
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[])
  {
//---
//--- valeur de retour de prev_calculated pour l'appel suivant
   return(rates_total);
  }
//+------------------------------------------------------------------+

Pourquoi, dans oninit
, faut-il renvoyer 0 ?

 
ziyang2048 #:

Pourquoi, dans oninit
, faut-il renvoyer 0 ?

Dans MQL5, la fonction OnInit() est appelée lorsque l'indicateur, le conseiller expert (EA) ou le script est initialisé. Elle doit renvoyer une valeur entière pour signaler le succès ou l'échec du processus d'initialisation.

Lorsque OnInit() renvoie 0, cela signifie que l'initialisation a réussi. Si vous devez signaler que quelque chose s'est mal passé pendant l'initialisation, vous pouvez renvoyer une valeur non nulle, ce qui empêchera l'indicateur, l'EA ou le script de fonctionner correctement.