ArrayGetAsSeries

Prüft Richtung des Arrayindizierens.

bool  ArrayGetAsSeries(
   const void&  array[]    // Array für Prüfung 
   );

Parameter

array

[in]  Das geprüfte Array.

Rückgabewert

Gibt true zurück, wenn die Flagge AS_SERIES für das angegebene Array eingestellt wird, d.h. der Arrayzugang wird umgekehrt wie in einer Zeitreihe durchgeführt. Zeitreihe unterscheidet sich vom normalen Array dadurch, dass Indizieren der Elemente der Zeitreihe vom Arrayende zum Arrayanfang durchgeführt (von den neuesten Daten zu den ältesten).

Hinweis

Für Prüfung des Arrays auf Zugehörigkeit muss die Funktion ArrayIsSeries() verwendet werden. Arrays der Preisdaten, die als Eingabeparameter in die Funktion OnCalculate() übertragen werden, nicht haben Richtung des Indizierens wie in Zeitreihen. Die notwendige Richtung des Indizierens kann durch die Funktion ArraySetAsSeries() eingestellt werden.

Beispiel:

#property description "der Indikator rechnet die absoluten Werten des Unterschieds zwischen den Preisen aus"
#property description "Open und Close oder High und Low, und zeichnet sie im abgesonderten Fenster"
#property description "in Form vom Histogramm."
//--- der Indikator Einstellungen
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
//--- Eingabeparameters
input bool InpAsSeries=true// Die Richtung des Indizierens in der Indikator Puffer
input bool InpPrices=true;   // Preise für die Berechnung (true - Open,Close; false - High,Low)
//--- Indikator Puffer
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Die Berechnung der Indikatorwerte                                |
//+------------------------------------------------------------------+
void CandleSizeOnBuffer(const int rates_total,const int prev_calculated,
                        const double &first[],const double &second[],double &buffer[])
  {
//---Variable zur Berechnung den Anfang des Bars
   int start=prev_calculated;
//--- wen die Indikatorwerte auf vorhergehend Tick schon berechnet waren, so ist auf der letzten Bar gearbeitet
   if(prev_calculated>0)
      start--;
//--- bestimmen Sie die Richtung der Indizierung in Arrays
   bool as_series_first=ArrayGetAsSeries(first);
   bool as_series_second=ArrayGetAsSeries(second);
   bool as_series_buffer=ArrayGetAsSeries(buffer);
//--- ändern Sie die Richtung der Indizierung auf die direkte, wenn nötig
   if(as_series_first)
      ArraySetAsSeries(first,false);
   if(as_series_second)
      ArraySetAsSeries(second,false);
   if(as_series_buffer)
      ArraySetAsSeries(buffer,false);
//--- berechnen Sie die Indikatorwerte
   for(int i=start;i<rates_total;i++)
      buffer[i]=MathAbs(first[i]-second[i]);
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Bindung von Indikator Puffers
   SetIndexBuffer(0,ExtBuffer);
//--- stellen Sie die Richtung der Indizierung in dem Indikator Puffer ein
   ArraySetAsSeries(ExtBuffer,InpAsSeries);
//--- prüfen wir für welche Preise es wird der Indikator berechnet
   if(InpPrices)
     {
      //--- Open und Close Preise
      PlotIndexSetString(0,PLOT_LABEL,"BodySize");
      //--- erstellen Sie die Farbe des Indikators
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrOrange);
     }
   else
     {
      //--- High und Low Preise
      PlotIndexSetString(0,PLOT_LABEL,"ShadowSize");
      //--- erstellen Sie die Farbe des Indikators
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrDodgerBlue);
     }
//---
   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[])
  {
//--- die Berechnung des Indikators je nach der Wert der Fahne
   if(InpPrices)
      CandleSizeOnBuffer(rates_total,prev_calculated,open,close,ExtBuffer);
   else
      CandleSizeOnBuffer(rates_total,prev_calculated,high,low,ExtBuffer);
//--- den Wert prev_calculated für den nächsten Anruf zurückgeben
   return(rates_total);
  }

Sehen Sie auch

Zugang zu Zeitreihen, ArraySetAsSeries