안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 링 버퍼를 활용하여 TEMA(Triple Exponential Moving Average)를 계산하는 방법에 대해 이야기해보려고 합니다.
설명
CTEMAOnRingBuffer 클래스는 링 버퍼 알고리즘을 이용하여 TEMA 지표를 계산하도록 설계되었습니다. TEMA는 가격의 변동성을 부드럽게 표현해주는 중요한 도구로, 트레이더들이 추세를 파악하는 데 매우 유용합니다. TEMA에 대한 자세한 정보는 여기서 확인하세요.
클래스 선언
class CTEMAOnRingBuffer : public CArrayRing
타이틀
#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>
CTEMAOnRingBuffer.mqh 파일은 MQL5\Include\IncOnRingBuffer 폴더에 위치해야 합니다. 이 폴더에는 클래스 예제와 함께 링 버퍼 관련 파일이 있어야 하니 참고하세요.
클래스 메서드
//--- 초기화 메서드: bool Init(// 에러 발생 시 false, 성공 시 true 반환 int period = 12, // TEMA 기간 ENUM_MA_METHOD method = MODE_EMA, // 스무딩 방법 int size_buffer = 256, // 링 버퍼 크기 bool as_series = false // 시간 시리즈 여부 );
//--- 시간 시리즈 또는 지표 버퍼를 기반으로 한 계산 메서드: int MainOnArray(// 처리된 요소의 수를 반환 const int rates_total, // 배열 크기 const int prev_calculated, // 이전 호출에서 처리된 요소 const double& price[]);
//--- 배열의 개별 요소를 기반으로 한 계산 메서드: double MainOnValue(// 특정 요소에 대한 TEMA 값을 반환 const int rates_total, const int prev_calculated, const int begin, const double value, const int index);
//--- 데이터 접근 메서드: int BarsRequired(); // 지표를 그리기 위한 필요한 바 수 반환 string Name(); // 지표 이름 반환 int Period(); // 기간 반환 int Size(); // 링 버퍼 크기 반환 double MA(int index); // 이동 평균 값 반환 double DEMA(int index); // DEMA 값 반환
링 버퍼에서 계산된 데이터를 일반 배열처럼 사용할 수 있습니다. 예를 들어:
//--- TEMA 지표 계산 클래스: #include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh> CTEMAOnRingBuffer tema; ... //+------------------------------------------------------------------+ //| 커스텀 지표 반복 함수 | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double& price[]) { //--- 시간 시리즈 기반으로 지표 계산: tema.MainOnArray(rates_total, prev_calculated, price); ... //---연관 포스트