보조지표 게시글

링 버퍼를 활용한 프랙탈 그리기 클래스 - MetaTrader 5 지표

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

설명

CFractalsOnRingBuffer 클래스는 프랙탈 기술 지표를 계산하기 위해 링 버퍼 알고리즘을 사용하여 설계되었습니다.

클래스 선언

class CFractalsOnRingBuffer

제목

#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>

파일 CFractalsOnRingBuffer.mqh은 MQL5\Include\IncOnRingBuffer 폴더에 위치해야 합니다. 이 폴더에 사용 예제와 함께 두 개의 파일이 첨부되어 있습니다. 링 버퍼 클래스 파일도 이 폴더에 있어야 합니다.

클래스 메서드

//--- 초기화 메서드:
bool Init(                      // 에러 시 false 반환, 성공 시 true 반환
   int  bars_right  = 2,        // 극대값 오른쪽의 바 수
   int  bars_left   = 2,        // 극대값 왼쪽의 바 수
   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[],           // 최소값 배열
   );
//--- 고가 배열을 기반으로 한 상향 프랙탈 계산 메서드:
double MainOnHigh(               // index-bars_right 요소의 상향 프랙탈 값을 반환
   const int     rates_total,     // 배열의 크기
   const int     prev_calculated, // 배열의 처리된 요소
   const int     begin,           // 유의미한 배열 데이터의 시작 위치
   const double high,            // 현재 바의 최대값
   const int     index            // 현재 요소(바)의 인덱스
   );
//--- 저가 배열을 기반으로 한 하향 프랙탈 계산 메서드:
double MainOnLow(                // index-bars_right 요소의 하향 프랙탈 값을 반환
   const int     rates_total,     // 배열의 크기
   const int     prev_calculated, // 배열의 처리된 요소
   const int     begin,           // 유의미한 배열 데이터의 시작 위치
   const double low,             // 현재 바의 최소값
   const int     index            // 현재 요소(바)의 인덱스
   );
//--- 데이터 접근 메서드:
int    BarsRequired();  // 지표를 그리기 위해 필요한 바 수 반환
string Name();          // 지표 이름 반환
string NameUpper()      // 상향 프랙탈 이름 반환
string NameLower()      // 하향 프랙탈 이름 반환
int    BarsRight()      // 극대값 오른쪽의 바 수 반환
int    BarsLeft()       // 극대값 왼쪽의 바 수 반환
int    Size();          // 링 버퍼의 크기 반환

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

//--- 프랙탈 지표 계산 메서드가 포함된 클래스:
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;

...

//+------------------------------------------------------------------+
//| 사용자 정의 지표 반복 함수                              |
//+------------------------------------------------------------------+
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[])
  {
//--- 가격 시간 시리즈를 기반으로 지표 계산:
   fractals.MainOnArray(rates_total,prev_calculated,high,low);

...

//--- 링 버퍼 "fractals"의 데이터 사용,
//    예를 들어, 지표 버퍼에 데이터 복사:
   for(int i=start;i<rates_total-BarsRight && !IsStopped();i++)
     {
      UpperBuffer[i] = fractals.upper[rates_total-1-i]; // 상향 프랙탈
      LowerBuffer[i] = fractals.lower[rates_total-1-i]; // 하향 프랙탈
     }

...

//--- 다음 호출을 위한 prev_calculated 반환 값:
   return(rates_total);
  }

링 버퍼의 인덱싱은 시간 시리즈와 동일하다는 점에 유의하세요.

예시

  1. 지표는 가격 시간 시리즈를 기반으로 Test_Fractals_OnArrayRB.mq5 파일을 계산합니다. MainOnArray() 메서드의 사용이 시연됩니다.
  2. Test_Fractals_OnValueRB.mq5 파일은 MainOnValue() 메서드의 사용을 보여줍니다. 처음에는 프랙탈 지표를 계산하고 그립니다. 이후 이 지표의 링 버퍼를 기반으로 또 다른 프랙탈을 그립니다.


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



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

 

코드 작성 시 MetaQuotes Software Corp.Integer  및 GODZILLA의 개발 내용을 사용했습니다.

연관 포스트

댓글 (0)