Diskussion zum Artikel "MQL5: Erstellen Ihres eigenen Indikators" - Seite 5

 
okwh #:

for(int i=1;i<rates_total;i++)
{
MTMPuffer[i]=Preis[i]-Preis[i-1];
AbsMTMPuffer[i]=fabs(MTMPuffer[i]);
}

Warum [i-1] zur Berechnung von [i] verwenden und mit i=1 beginnen ? keine [0] ?

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


Hallo.

Grob gesagt, wenn Sie eine der nativen mql5-Indikatorfunktionen verwenden, die mit "i" beginnen, brauchen Sie sich nicht um die Route zu kümmern. Der Copybuffer wird das für Sie tun.

Wenn Sie hingegen einen bestimmten Weg gehen, müssen Sie auf die Anzahl der Balken achten, insbesondere beim ersten Durchlauf, da Sie sonst riskieren, dass der Bereich überschritten wird


Schauen Sie sich den Code dieser Rsi , die Irsi verwendet, keine Position für den Kurs und alles geht gut.

Auf der anderen Seite, diese Rsi geht nicht durch die Funktion.

Alles wird von Hand berechnet, so zu sprechen, und Sie haben die Positionierung gut zu tun, so dass alles glatt geht.

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
 
//+------------------------------------------------------------------+
//|Index der wahren Stärke.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
//---- plot TSI
#property indicator_label1  "TSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Blue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- Eingabeparameter
input int      r=25;
input int      s=13;
//--- Indikatorpuffer
double         TSIBuffer[];
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Zuordnung von Indikatorpuffern

   SetIndexBuffer(0,TSIBuffer,INDICATOR_DATA);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion|
//+------------------------------------------------------------------+
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[])
  {
//---
//--- Rückgabe des Wertes von prev_calculated für den nächsten Aufruf
   return(rates_total);
  }
//+------------------------------------------------------------------+

Warum muss in oninit
der Wert 0 zurückgegeben werden?

 
ziyang2048 #:

Warum muss in oninit
der Wert 0 zurückgegeben werden?

In MQL5 wird die Funktion OnInit() aufgerufen, wenn der Indikator, der Expert Advisor (EA) oder das Skript initialisiert wird. Es wird erwartet, dass sie einen Integer-Wert zurückgibt, um den Erfolg oder Misserfolg des Initialisierungsprozesses zu signalisieren.

Wenn OnInit() 0 zurückgibt, bedeutet dies, dass die Initialisierung erfolgreich war. Wenn Sie signalisieren wollen, dass bei der Initialisierung etwas schief gelaufen ist, können Sie einen Wert ungleich Null zurückgeben, der verhindert, dass der Indikator, EA oder das Skript ordnungsgemäß ausgeführt wird.