iCustom

Gibt das Handle des angegebenen Benutzerindikators zurück.

int  iCustom(
   string           symbol,     // Symbolname
   ENUM_TIMEFRAMES  period,     // Periode
   string           name        // Ordner/Name_des Benutzerindikators
   ...                          // Liste der Eingabeparameter des Indikators 
   );

Prameter

symbol

[in]  Symbolname des Instrumentes, dessen Daten für Berechnung des Indikators verwendet werden. NULL bedeutet das laufende Symbol.

period

[in]  Wert der Periode kann einer der Enumerationswerte ENUM_TIMEFRAMES sein, 0 bedeutet das laufende Timeframe.

name

[in]  Name des Benutzerindikators mit dem Pfad in Bezug auf Ordnerverzeichnis der Indikators (MQL5/Indicators/). Wenn ein Indikator in einem Untervezeichnis liegt, zB. in  MQL5/Indicators/Examples, muss der Name dementsprechend aussehen: "Examples\\Name_des Indikators" (es ist notwendig, double-slash statt single slash als Begrenzer zu verwenden).

...

[in] input-Parameter eines Benutzerindikators, die durch Kommas getrennt sind. Typ und Parameterfolge müssen entsprechen. Wenn Parameter nicht angegeben werden, werden Default-Werte verwendet.

Rückgabewert

Gibt das Handle des angegebenen technischen Indikators zurück, beim Misserfolg gibt INVALID_HANDLE zurück.

Hinweis

Benutzeranzeiger muss kompiliert werden (Datei mit Verbreitung  EX5) und sich im Verzeichnis MQL5/Indicators des Client-Terminals oder in einem eingebettetenen Verzeichnis befinden.

Die für Testenerforderliche Indikatoren werden automatisch aus Aufruf der Funktionen iCustom() bestimmt, wenn der entsprechende Parameter von der Konstantzeile vorgegeben ist. Für andere Fälle (Verwendung der Funktion IndicatorCreate() oder Verwendung einer nicht Konstantzeile im Parameter, der den Namen des Indikator vorgibt) ist diese Eigenschaft #property tester_indicator erforderlich :

#property tester_indicator "indicator_name.ex5"

Wenn die erste Aufrufform im Indikator verwendet wird, kann beim Ablauf des Benutzerindikators im Registerblatt "Parameters" Daten für seine Berechnung  angegeben werden. Wenn der Parameter "Apply to" explizit nicht ausgewählt ist, wird die Berechnung mit den Werten "Close" durchgeführt.

Auswahl der Zeitreihe fuer Indikatorberechnung

Beim Aufruf eines Benutzerindikators aus dem mql5-Programm kann Parameter Applied_Price oder handle eines anderen Parameters am letzten nach aller vom Benutzerindikator vorausgesehenen Eingabevariablen übertragen werden.

Sehen Sie auch

Programmeigenschaften, Zugang zu Zeitreihen und Indikatoren, IndicatorCreate(), IndicatorRelease()

Beispiel:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
//--- indicator buffers
double         Label1Buffer[];
//--- handle des Benutzerindikators Custom Moving Average.mq5
int MA_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   ResetLastError();
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",
                     MA_Period,
                     MA_Shift,
                     MA_Method,
                     PRICE_CLOSE // Schlusspreise verwenden
                     );
   Print("MA_handle = ",MA_handle,"  error = ",GetLastError());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//--- Werte des Indikators Custom Moving Average in den Indikator-Puffer kopieren
   int copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);
   Print("copy = ",copy,"    rates_total = ",rates_total);
//--- beim erfolglosen Versuch geben wir das aus 
   if(copy<=0)
      Print("Erfolgloser Versuch, Indikatorwerte Custom Moving Average zu erhalten");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+