안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 5에서 링 버퍼를 활용하여 OsMA(이동 평균 오실레이터) 지표를 계산하는 방법에 대해 알아보겠습니다.
지표 설명
COsMAOnRingBuffer 클래스는 링 버퍼 알고리즘을 이용해 OsMA 지표를 계산하도록 설계되었습니다. OsMA는 가격의 이동 평균과 이동 평균의 차이를 나타내는 지표로, 시장의 추세를 파악하는 데 유용합니다.
클래스 선언
class COsMAOnRingBuffer : public CArrayRing
파일 포함
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>COsMAOnRingBuffer.mqh 파일은 MQL5\Include\IncOnRingBuffer 폴더에 위치해야 하며, 이 폴더에는 링 버퍼, MACD 및 이동 평균 클래스와 관련된 다른 파일도 포함되어야 합니다.
클래스 메서드
//--- 초기화 메서드: 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 );
//--- 시간 시리즈 또는 지표 버퍼 기반의 계산 메서드: int MainOnArray(// 처리된 요소 수 반환 const int rates_total, // 배열 크기 const int prev_calculated, // 이전 호출에서 처리된 요소 수 const double &array[] // 입력 값 배열 );
//--- 개별 시리즈 요소 기반의 계산 메서드: double MainOnValue(// OsMA 값 반환 const int rates_total, // 배열 크기 const int prev_calculated, // 처리된 배열 요소 const int begin, // 배열의 시작 위치 const double value, // 배열의 중요한 요소 const int index // 요소 인덱스 );
링 버퍼에서 계산된 지표 데이터를 일반 배열처럼 접근하여 사용할 수 있습니다. 예를 들어:
//--- OsMA 지표 계산을 위한 클래스: #include <IncOnRingBuffer\COsMAOnRingBuffer.mqh> COsMAOnRingBuffer osma; ... //+------------------------------------------------------------------+ //| 사용자 정의 지표 반복 함수| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- 가격 시간 시리즈 기반의 지표 계산: osma.MainOnArray(rates_total, prev_calculated, price); ... //---
댓글 0