보조지표 게시글

링 버퍼를 활용한 MACD 계산 클래스 - 메타트레이더5 지표 활용하기

첨부파일
1361.zip (9.66 KB, 다운로드 0회)

설명

CMACDOnRingBuffer 클래스는 링 버퍼 알고리즘을 사용하여 기술 지표인 이동 평균 수렴/발산(MACD)을 계산하는 데 설계되었습니다. 더 자세한 내용은 여기를 참조하세요.

클래스 선언

class CMACDOnRingBuffer

파일 포함

#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>

CMACDOnRingBuffer.mqh 파일은 MQL5\Include\IncOnRingBuffer 폴더에 위치해야 합니다. 이 폴더에서 클래스가 사용하는 예제 파일 두 개가 첨부되어 있습니다. 링 버퍼 클래스와 이동 평균 클래스 파일도 이 폴더에 있어야 합니다.

클래스 메서드

//--- 초기화 메서드:
bool Init(                                  // 오류가 발생하면 false 반환, 성공하면 true
   int            fast_period   = 12,       // 빠른 이동 평균 기간
   int            slow_period   = 26,       // 느린 이동 평균 기간
   int            signal_period = 9,        // 신호 이동 평균 기간
   ENUM_MA_METHOD fast_method   = MODE_EMA, // 빠른 이동 평균 방법
   ENUM_MA_METHOD slow_method   = MODE_EMA, // 느린 이동 평균 방법
   ENUM_MA_METHOD signal_method = MODE_SMA, // 신호 이동 평균 방법
   int            size_buffer   = 256,      // 링 버퍼의 크기
   bool           as_series     = false     // true면 시계열, false면 일반 인덱스
   );
//--- 시계열 또는 지표 버퍼 기반 계산 메서드:
int MainOnArray(                  // 처리된 요소 수를 반환
   const int     rates_total,     // 배열 크기
   const int     prev_calculated, // 이전 호출에서 처리된 요소 수
   const double &array[]          // 입력 값 배열
   );
//--- 개별 배열 요소 기반 계산 메서드:
double MainOnValue(              // 설정된 요소에 대한 MACD 값 반환
   const int    rates_total,     // 배열 크기
   const int    prev_calculated, // 처리된 배열 요소 수
   const int    begin,           // 배열의 중요한 데이터 시작 지점
   const double value,           // 배열 요소 값
   const int    index            // 요소 인덱스
   );
//--- 데이터 접근 메서드:
int    BarsRequired();   // 지표를 그리기 위해 필요한 바 수 반환
string Name()            // 지표 이름 반환
string NameMain()            // 지표의 주 라인 이름 반환
string NameSignal()          // 지표 신호 라인 이름 반환
string FastMethod()      // 빠른 라인 스무딩 방법을 텍스트 형식으로 반환
string SlowMethod()      // 느린 라인 스무딩 방법을 텍스트 형식으로 반환
string SignalMethod()      // 신호 라인 스무딩 방법을 텍스트 형식으로 반환
int    FastPeriod()      // 빠른 라인 스무딩 기간 반환
int    SlowPeriod()      // 느린 라인 스무딩 기간 반환
int    SignalPeriod()      // 신호 라인 스무딩 기간 반환
int    Size();           // 링 버퍼의 크기 반환

링 버퍼에서 계산된 지표 데이터를 일반 배열처럼 접근할 수 있습니다. 예를 들어:

//--- MACD 지표 계산 메서드를 가진 클래스:
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>
CMACDOnRingBuffer macd;

...
//+------------------------------------------------------------------+
//| 사용자 정의 지표 반복 함수                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- 가격 시계열 기반 지표 계산:
   macd.MainOnArray(rates_total,prev_calculated,price);

...
//--- "macd" 링 버퍼의 데이터 사용,
//    지표 버퍼에 데이터 복사:
   for(int i=start;i<rates_total;i++)
     {
      MainBuffer[i]   = macd[rates_total-1-i];          // 지표 히스토그램
      SignalBuffer[i] = macd.signal[rates_total-1-i];   // 지표 신호 라인
     }
//--- 다음 호출을 위한 prev_calculated 반환:
   return(rates_total);
  }

링 버퍼의 인덱싱은 시간 시계열와 동일합니다.

예제

  1. Test_MACD_OnArrayRB.mq5 파일은 가격 시계열을 기반으로 지표를 계산합니다. MainOnArray() 메서드의 사용 예시가 포함되어 있습니다.
  2. Test_MACD_OnValueRB.mq5 파일은 MainOnValue() 메서드의 사용을 보여줍니다. 처음에 MACD 지표가 계산되고 그려집니다. 그 후, 이 지표의 링 버퍼를 기반으로 또 다른 MACD 지표가 그려집니다.


Test_MACD_OnArrayRB.mq5의 작업 결과, 링 버퍼 크기 256 요소



Test_MACD_OnValueRB.mq5의 작업 결과, 링 버퍼 크기 256 요소

 

코드 작성 시 MetaQuotes Software Corp.Integer 와 GODZILLA의 개발 결과물이 사용되었습니다.

연관 포스트

댓글 (0)