이번 포스팅에서는 MetaTrader 5에서 사용하는 캔들 크기 지표에 대해 알아보겠습니다. 이 지표는 바의 크기를 반영하며, 크기는 다음 공식으로 계산됩니다: "차감"에서 "피감"을 뺀 값입니다. 여기서 "피감"과 "차감"은 네 가지 값(시가, 고가, 저가, 종가) 중 하나일 수 있습니다.
캔들 크기를 표시할 바의 수는 입력 매개변수(InpNumberOfBars)에서 제한할 수 있습니다. 이 숫자는 새로운 바가 열려도 변하지 않습니다.
바와 그래픽 객체의 동기화에 대하여
그래픽 객체 관리
객체의 이름은 m_arr_names[] 배열에 저장되며, 그 크기는 InpNumberOfBars 입력과 동일합니다. 왜 단순 문자열 변수 대신 배열을 사용하는 걸까요? 이는 미래를 대비한 일종의 예비 공간입니다.
객체 이름 형성
각 'index' 바에 해당하는 객체의 이름은 다음 공식으로 형성됩니다:
name[index] = m_prefix + ("high_" 또는 "low_") + TimeToString(time[index])
모든 객체 삭제가 필요할 때
- 차트에서 지표를 제거할 때;
- 터미널을 닫을 때 (지표가 차트에서 실행 중일 경우);
- 템플릿을 로드할 때, 지표가 이 차트에서 실행 중일 경우;
- 지표가 실행 중인 차트를 닫을 때;
- 이전 프로필의 차트 중 하나에서 지표가 실행 중일 경우 프로필을 변경할 때;
- 지표가 실행 중인 차트의 심볼 및/또는 시간 프레임을 변경할 때;
- 지표 입력을 변경할 때.
따라서, 생성된 그래픽 객체를 완전히 삭제합니다:
- OnDeinit()에서;
- OnInit()에서 (혹시라도 삭제되지 않은 고아 객체가 있을 경우);
- OnCalculate()에서, prev_calculated==0인 경우.
우리는 또한 m_arr_names[] 배열을 정리합니다:
- OnCalculate()에서, prev_calculated==0이거나 prev_calculated!=rates_total인 경우.
그래픽 객체의 일정한 수 유지:
새로운 바가 나타나면 prev_calculated!=rates_total 조건이 발생합니다. 이 경우, 모든 객체가 삭제되고 m_arr_names[] 배열이 정리됩니다.