소개
이번 포스트에서는 MetaTrader 5에서 링 버퍼를 이용하여 평균 방향성 지수(ADX) 지표를 계산하는 CADXOnRingBuffer 클래스를 소개할게요.
CADXOnRingBuffer 클래스 설명
CADXOnRingBuffer 클래스는 링 버퍼 알고리즘을 통해 ADX를 계산하도록 설계되었습니다. 이 클래스는 MQL5의 IncOnRingBuffer 폴더에 위치해야 하며, 사용 예제가 포함된 파일도 함께 제공됩니다.
클래스 선언
class CADXOnRingBuffer필요한 파일
필요한 파일은 CADXOnRingBuffer.mqh이며, 이 파일은 MQL5\Include\IncOnRingBuffer 폴더에 위치해야 합니다. 링 버퍼와 이동 평균 클래스를 위한 파일도 이 폴더에 있어야 합니다.
클래스 메서드
//--- 초기화 메서드: bool Init( // 오류 발생 시 false 반환, 성공 시 true 반환 int ma_period = 14, // 이동 평균 스무딩 주기 ENUM_MA_METHOD ma_method = MODE_EMA, // 이동 평균 스무딩 방법 int size_buffer = 256, // 링 버퍼 크기, 저장할 데이터 수 bool as_series = false // 시계열이면 true, 일반 인덱스는 false );
//--- 시계열 또는 지표 버퍼를 기반으로 한 계산 메서드: int MainOnArray( // 처리된 요소 수 반환 const int rates_total, // 배열 크기 const int prev_calculated, // 이전 호출에서 처리된 요소 수 const double &high[], // 최대 값 배열 const double &low[], // 최소 값 배열 const double &close[] // 종가 배열 );
//--- 배열 요소의 개별 시리즈를 기반으로 한 계산 메서드: double MainOnValue( // 설정된 요소의 ADX 값을 반환 const int rates_total, // 배열 크기 const int prev_calculated, // 배열에서 처리된 요소 const int begin, // 배열의 중요한 값 시작 위치 const double high, // 최대 값 const double low, // 최소 값 const double close, // 종가 const int index // 요소 인덱스 );
//--- 데이터 접근 메서드: int BarsRequired(); // 지표를 그리기 위해 필요한 바 수 반환 string NameADX(); // 지표 이름 반환 string NameNDI(); // 음의 방향성 이동 지표의 이름 반환 string NamePDI(); // 양의 방향성 이동 지표의 이름 반환 string MAMethod(); // 스무딩 방법을 문자열로 반환 int MAPeriod(); // 스무딩 주기 반환 int Size(); // 링 버퍼 크기 반환
링 버퍼에서 계산된 데이터를 일반 배열처럼 사용할 수 있습니다. 예시 코드는 다음과 같습니다:
#include <IncOnRingBuffer\CADXOnRingBuffer.mqh> CADXOnRingBuffer adx; ... //+------------------------------------------------------------------+ //| 사용자 정의 지표 반복 함수 | //+------------------------------------------------------------------+ 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[]) { //--- 지표 계산: adx.MainOnArray(rates_total, prev_calculated, high, low, close); ... //---연관 포스트