가격 상수

기술 지표에는 계산에는 가격 값 및/또는 볼륨 값이 필요하며 이 값에 따라 계산이 수행됩니다. 계산을 위해 원하는 가격 기준을 지정하는 데 사용되는 ENUM_APPLIED_PRICE 열거형에는 7개의 미리 정의된 식별자가 있습니다.

ENUM_APPLIED_PRICE

ID

설명

PRICE_CLOSE

종가

PRICE_OPEN

시가

PRICE_HIGH

기간의 최대 가격

PRICE_LOW

기간의 최소 가격

PRICE_MEDIAN

중위 가격, (high + low)/2

PRICE_TYPICAL

일반 가격, (high + low + close)/3

PRICE_WEIGHTED

평균 가격, (high + low + close + close)/4

볼륨이 계산에 사용되는 경우 ENUM_APPLIED_VOLUME 열거형에서 두 값 중 하나를 지정해야 합니다.

ENUM_APPLIED_VOLUME

ID

설명

VOLUME_TICK

틱 볼륨

VOLUME_REAL

거래 볼륨

iStochastic() 기술적 지표는 다음 두 가지 방법으로 계산할 수 있습니다:

  • 오직 종가만;
  • 또는 고가 및 저가.

계산에 필요한 변형을 선택하려면 ENUM_STO_PRICE 열거값 중 하나를 지정합니다.

ENUM_STO_PRICE

ID

설명

STO_LOWHIGH

저가/고가를 기준으로 계산

STO_CLOSECLOSE

마감/종가 기준으로 계산

기술 지표가 ENUM_APPLIED_PRICE에 의해 설정된 유형의 가격 데이터를 사용하는 경우 모든 지표의 핸들(터미널에 내장되거나 사용자가 작성한)을 입력 가격 시리즈로 사용할 수 있습니다. 이 경우 지표의 0 버퍼 값이 계산에 사용됩니다. 이렇게 하면 다른 지표의 값을 사용하여 한 지표 값을 쉽게 작성할 수 있습니다. 사용자 지정 지표 핸들은 iCustom() 함수를 호출하여 생성됩니다.

예:

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- 입력 매개변수
input int      RSIperiod=14;         // RSI 계산 기간
input int      Smooth=8;             // 평활 기간 RSI
input ENUM_MA_METHOD meth=MODE_SMMA// 평활법
//---- RSI 플롯
#property indicator_label1  "RSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//---- RSI_Smoothed 플롯
#property indicator_label2  "RSI_Smoothed"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrNavy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- 지표 버퍼
double         RSIBuffer[];          // 여기에 RSI 값을 저장합니다
double         RSI_SmoothedBuffer[]; // 다음은 RSI의 평활값입니다
int            RSIhandle;            // RSI 지표에 핸들 연결
//+------------------------------------------------------------------+
//| 사용자 지정 지표 초기화 함수                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- 지표 버퍼 매핑
   SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
   IndicatorSetString(INDICATOR_SHORTNAME,"iRSI");
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- 
   RSIhandle=iRSI(NULL,0,RSIperiod,PRICE_CLOSE);
//---
  }
//+------------------------------------------------------------------+
//| 사용자 지정 지표 반복 함수                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]
                 )
 
  {
//---  마지막 오류 값 재설정
   ResetLastError();
//--- RSIBuffer []에서 RSI 지표 데이터 가져오기
   int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
   if(copied<=0)
     {
      Print("지표 RSI 값을 복사할 수 없습니다. Error = ",
            GetLastError(),",  copied =",copied);
      return(0);
     }
//--- RSI 값을 사용하여 평균값 지표 생성
   int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
   copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
   if(copied<=0)
     {
      Print("RSI의 평활 지표를 복사할 수 없습니다. Error = ",
            GetLastError(),",  copied =",copied);
      return(0);
     }
//--- 다음 번 호출에 대해 prev_calculated 값을 반환
   return(rates_total);
  }