보조지표 게시글

링 버퍼를 활용한 DEMA 계산기 - MetaTrader 5용 지표

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

소개

CDEMAOnRingBuffer 클래스는 기술 지표인 이중 지수 이동 평균(Double Exponential Moving Average, DEMA)을 링 버퍼 알고리즘을 사용하여 계산하기 위해 설계되었습니다.

클래스 선언

class CDEMAOnRingBuffer : public CArrayRing

파일 포함

#include <IncOnRingBuffer\CDEMAnRingBuffer.mqh>

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

클래스 메서드

//--- 초기화 메서드:
bool Init(                                // 에러 발생 시 false, 성공 시 true를 반환
   int            period      = 12,       // DEMA 기간
   ENUM_MA_METHOD 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& price[],         // 계산을 위한 배열
   );
//--- 배열의 요소를 기반으로 한 계산 메서드:
double MainOnValue(              // 지정된 요소(bar)의 DEMA 값을 반환
   const int    rates_total,     // 배열 크기
   const int    prev_calculated, // 처리된 배열 요소
   const int    begin,           // 배열의 유의미한 데이터 시작 위치
const double value,           // 요소(bar) 값
const int    index            // 요소(bar) 인덱스
   );

//--- 데이터에 접근하는 메서드:
int                 BarsRequired(); // 지표를 그리기 위해 필요한 바 수를 반환
string              Name();         // 지표 이름 반환
int                 Period();       // 기간 반환
int                 Size();         // 링 버퍼의 크기 반환
double              MA(int index);  // 이동 평균 값을 반환, 인덱스는 시계열과 동일

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

//--- DEMA 지표 계산 메서드 클래스:
#include <IncOnRingBuffer\CDEMAOnRingBuffer.mqh>
CDEMAOnRingBuffer dema;

...
//+------------------------------------------------------------------+
//| 사용자 정의 지표 반복 함수                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // price[] 배열의 크기
                 const int prev_calculated,  // 이전 호출에서 처리된 바
                 const int begin,            // 유의미한 데이터 시작 위치
                 const double& price[])      // 계산을 위한 배열
  {
//--- 시계열 기반 지표 계산:
    dema.MainOnArray(rates_total,prev_calculated,price);

...
//---                         

연관 포스트

댓글 (0)