ArrayGetAsSeries

배열 인덱스의 방향을 확인.

bool  ArrayGetAsSeries(
   const void&  array[]    // 확인할 배열
   );

매개변수

배열

[in]  확인된 배열.

반환 값

지정된 배열에 AS_SERIES 플래그가 설정되면 true를 반환하며 즉, 배열에 대한 액세스가 시계열처럼 앞뒤로 수행됩니다. 시계열은 시게열 요소의 인덱싱을 처음부터 끝까지(최신 데이터부터 이전 데이터까지) 수행한다는 점에서 일반 배열과는 다릅니다.

참고

배열이 시계열에 속하는지 확인하려면 ArrayIsSeries() 기능을 사용합니다. OnCalculate() 함수에 입력 매개변수로 전달된 가격 데이터 배열은 시계열과 같은 인덱싱 방향을 가질 필요가 없습니다. 필요한 인덱싱 방향은 ArraySetAsSeries() 함수를 사용하여 설정할 수 있습니다.

예:

#property description "지표는 다음 사이의 차이에 대한 절대값을 계산합니다"
#property description "별도의 하위 창에 표시하는 시가 및 종가 또는 고가 및 저가"
#property description "히스토그램으로서."
//--- 지표 설정
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- 플롯
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
//--- 매개변수 입력
input bool InpAsSeries=true// 지표 버퍼의 인덱싱 방향
input bool InpPrices=true;   // 계산 가격 (true - 시가,종가; false - 고가,저가)
//--- 지표 버퍼
double ExtBuffer[];
//+------------------------------------------------------------------+
//| 지표 값 계산                                     |
//+------------------------------------------------------------------+
void CandleSizeOnBuffer(const int rates_total,const int prev_calculated,
                        const double &first[],const double &second[],double &buffer[])
  {
//--- 막대 계산을 위한 시작 변수
   int start=prev_calculated;
//--- 지표 값이 이전 틱에서 이미 계산된 경우 마지막 막대에서 작업
   if(prev_calculated>0)
      start--;
//--- 배열의 인덱싱 방향 정의
   bool as_series_first=ArrayGetAsSeries(first);
   bool as_series_second=ArrayGetAsSeries(second);
   bool as_series_buffer=ArrayGetAsSeries(buffer);
//--- 필요한 경우 인덱싱 방향을 직접 방향으로 교체
   if(as_series_first)
      ArraySetAsSeries(first,false);
   if(as_series_second)
      ArraySetAsSeries(second,false);
   if(as_series_buffer)
      ArraySetAsSeries(buffer,false);
//--- 지표 값 계산
   for(int i=start;i<rates_total;i++)
      buffer[i]=MathAbs(first[i]-second[i]);
  }
//+------------------------------------------------------------------+
//| 사용자 지정 지표 초기화 함수                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 지표 버퍼 바인드
   SetIndexBuffer(0,ExtBuffer);
//--- 지표 버퍼에 인덱싱 요소 설정
   ArraySetAsSeries(ExtBuffer,InpAsSeries);
//--- 지표가 얼마로 계산되는지 확인
   if(InpPrices)
     {
      //--- 시가 및 종가
      PlotIndexSetString(0,PLOT_LABEL,"BodySize");
      //--- 지표 색상 설정
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrOrange);
     }
   else
     {
      //--- 고가 및 저가
      PlotIndexSetString(0,PLOT_LABEL,"ShadowSize");
      //--- 지표 색상 설정
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrDodgerBlue);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 사용자 지정 지표 반복 함수                              |
//+------------------------------------------------------------------+
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[])
  {
//--- 플래그 값에 따라 지표를 계산
   if(InpPrices)
      CandleSizeOnBuffer(rates_total,prev_calculated,open,close,ExtBuffer);
   else
      CandleSizeOnBuffer(rates_total,prev_calculated,high,low,ExtBuffer);
//--- 다음 호출을 위한 prev_calculated의 반환 값
   return(rates_total);
  }

추가 참조

시계열에 액세스, ArraySetAsSeries