ChartIndicatorAdd

지정된 핸들이 있는 지표를 지정된 차트 창에 추가. 지표 및 차트는 동일한 심볼과 시간대에 생성되어야 합니다.

bool  ChartIndicatorAdd(
   long  chart_id,                 // 차트 ID
   int   sub_window                // 하위창 번호
   int   indicator_handle          // 지표의 핸들
   );

매개변수

chart_id

[in]  차트 ID. 0은 현재 차트를 의미합니다.

sub_window

[in]  차트 하위창의 번호 0은 주 차트 창을 의미합니다. 새 창에 지표를 추가하려면 변수가 마지막 기존 창의 인덱스, 즉 CHART_WINDOWS_TOTAL와 동일한 만큼 커야 합니다. 변수의 값이 CHART_WINDOWS_TOTAL보다 크면 새 창이 생성되지 않고 지표가 추가되지 않습니다.

indicator_handle

[in]  지표의 핸들.

값 반환

이 함수는 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 오류에 대한 정보를 얻기 위해서는, GetLastError() 기능을 호출. 오류 4114는 차트와 추가된 지표가 기호나 시간대에 따라 다르다는 것을 의미합니다.

주의

별도의 하위 창에 작성되어야 하는 지표 (예를 들어, 내장형 iMACD 또는 지정된#property indicator_separate_window 속성을 가진 지표)가 기본 차트 창에 적용되면 지표 목록에 계속 존재하더라도 표시되지 않을 수 있습니다. 즉, 지표의 척도가 가격 차트의 척도와 다르며 적용된 지표의 값이 가격 차트의 표시된 범위에 맞지 않습니다. 이런 경우, GetLastError()는 오류의 부재를 나타내는 0코드를 반환합니다. 이러한 "보이지 않는" 지표의 값은 데이터 윈도우에서 볼 수 있으며 다른 MQL5 애플리 케이션에서 수신할 수 있습니다.

예를 들어:

#property 설명 "엑스퍼트 어드바이저는 ChartIndicatorAdd() 기능을 사용하여 작업을 시연합니다."
#property 설명 "차트에서 시작한 후 (저널에 오류를 수신하고), 열기"
#property 설명 "엑스퍼트 어드바이저의 속성을 확인하고 올바른 <symbol> 및 <period> 변수를 지정합니다."
#property 설명 "MACD 지표가 차트에 추가됩니다."
 
//--- 변수 입력
input string          symbol="AUDUSD";    // 심볼 이름
input ENUM_TIMEFRAMES period=PERIOD_M12;  // 시간 플레임
input int    fast_ema_period=12;          // 빠른 MACD 주기
input int    slow_ema_period=26;          // 느린 MACD 주기
input int      signal_period=9;           // 시그널 주기
input ENUM_APPLIED_PRICE apr=PRICE_CLOSE// MACD의 가격 유형 calculation
 
int indicator_handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| 엑스퍼트 초기화 함수                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
//--- 차트에 지표를 추가하려고 합니다
   if(!AddIndicator())
     {
      //--- AddIndicator() 기능이 차트에서 지표 추가를 거부했습니다
      int answer=MessageBox("차트에 MACD를 추가하시겠습니까?",
                            "지표를 추가하기 위한 잘못된 심볼 및 시간 프레임",
                            MB_YESNO // "예" 및 "아니오" 선택 버튼이 표시됩니다
                            );
      //--- 사용자가 여전히 ChartIndicatorAdd()의 잘못된 사용을 주장하는 경우
      if(answer==IDYES)
        {
         //--- 우선, 그것에 대한 저널에 등록할 것입니다
         PrintFormat("주의! %s: MACD(%s/%s) 지표를 %s/%s 차트에 추가를 시도. 오류 4114를 수신",
                     __FUNCTION__,symbol,EnumToString(period),_Symbol,EnumToString(_Period));
         //--- 지표를 추가할 때 새 하위 창의 번호를 수신
         int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
         //--- 오류 발생 시도를 합니다
         if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
            PrintFormat("MACD 지표를 %d 차트 창에 추가하는 데 실패하였습니다. 오류 코드  %d",
                        subwindow,GetLastError());
        }
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 엑스퍼트 틱 함수                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
// 엑스퍼트 어드바이저가 아무것도 수행하지 않음
  }
//+------------------------------------------------------------------+
//| 차트에서 지표 확인 및 추가 함수      |
//+------------------------------------------------------------------+
bool AddIndicator()
  {
//--- 메시지 표시됨
   string message;
//--- 지표 심볼과 차트 심볼이 서로 일치하는지 확인
   if(symbol!=_Symbol)
     {
      message="Demo_ChartIndicatorAdd() 기능 사용을 표시:";
      message=message+"\r\n";
      message=message+"차트의 다른 심볼에 계산된 지표를 추가할 수 없습니다.";
      message=message+"\r\n";
      message=message+"엑스퍼트 어드바이저의 속성에서 차트 심볼을 지정 - "+_Symbol+".";
      Alert(message);
      //--- 조기 종료, 지표가 차트에 추가되지 않음
      return false;
     }
//--- 지표와 차트의 시간 프레임이 서로 일치하는지 확인
   if(period!=_Period)
     {
      message="차트의 다른 시간 프레임에 계산된 지표를 추가할 수 없습니다.";
      message=message+"\r\n";
      message=message+"엑스퍼트 어드바이저의 속성에서 차트 시간 프레임을 지정 - "+EnumToString(_Period)+".";
      Alert(message);
      //--- 조기 종료, 지표가 차트에 추가되지 않음
      return false;
     }
//--- 모든 점검 완료됨, 심볼 및 지표 시간 프레임이 차트에 일치
   if(indicator_handle==INVALID_HANDLE)
     {
      Print(__FUNCTION__,"  MACD 지표 생성");
      indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
      if(indicator_handle==INVALID_HANDLE)
        {
         Print("MACD 지표 생성하는 데 실패하였습니다. 오류 코드 ",GetLastError());
        }
     }
//--- 오류 코드 재설정
   ResetLastError();
//--- 차트에 지표 적용
   Print(__FUNCTION__,"  차트에 MACD 지표 추가");
   Print("MACD 에 다음에 생성됨 ",symbol,"/",EnumToString(period));
//--- MACD 지표가 추가되는 새 하위 창의 번호를 수신
   int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   PrintFormat("MACD 지표를 %d 차트 창에 추가",subwindow);
   if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
     {
      PrintFormat("MACD 지표를 %d 차트 창에 추가하는 데 실패하였습니다. 오류 코드  %d",
                  subwindow,GetLastError());
     }
//--- 지표가 성공적으로 추가됨
   return(true);
  }

추가 참조

ChartIndicatorDelete(), ChartIndicatorName(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate()