거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Telegram에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
조회수:
32
평가:
(6)
게시됨:
FFD.mq5 (3.38 KB) 조회
\MQL5\Include\
FFDEngine.mqh (10.63 KB) 조회
MQL5 프리랜스 이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

원시 외환 및 선물 가격은 비정역성을 띠고 있습니다. 이를 기반으로 훈련된 표준 회귀 및 분류 모델은 심각한 선행 편향과 허위 상관관계에 직면하게 됩니다. 이에 대한 단순한 해결책인 정수 차분법은 비정역성을 제거하지만, 그 과정에서 가격의 모든 기억 정보를 파괴하여 예측 모델에 필수적인 자기상관 구조 자체를 상실하게 만듭니다.

Advances in Financial Machine Learning 』(López de Prado, 2018) 제5장에서 소개된 고정 폭 분수 차분법(FFD)은 정역성을 확보하는 데 필요한 최소한의 비정수 차수 d ∈ (0, 1) 로 차분을 계산함으로써 이 문제를 해결하며, 동시에 가격의 기억 정보를 최대한 보존합니다. 본 제출물은 해당 기법의 실전급 MQL5 구현체를 제공합니다.

FFD 지표: 원시 가격(위) 대 고정 FFD 시계열(아래)

FFD 출력을 보여주는 두 개의 패널: 비정역성 원시 가격 (a)와 정역성 FFD 시계열 (b), 룩백 윈도우가 표시되어 있음


구성 요소

  • FFDEngine.mqhCFFDEngine 클래스를 포함하는 헤더 전용 라이브러리입니다. Init(), Compute() (단일 바), ComputeBuffer() ( prev_calculated 최적화가 적용된 전체 지표 버퍼)를 제공합니다. OnInit() 이후에는 동적 메모리 할당이 발생하지 않습니다.
  • FFD.mq5CFFDEngine을 래핑하는 사용자 정의 지표입니다. 별도의 차트 창에 FFD 시계열을 그립니다. 모든 ENUM_APPLIED_PRICE 값을 지원합니다.

알고리즘 작동 원리

가중치 벡터는 다음의 재귀 관계식(AFML 식 5.4)에 의해 정의됩니다:

w[0] = 1 w[k] = -w[k-1] * (d - k + 1) / k, k = 1, 2, ...

|w[k]| < 임계값이 되면 반복이 중단됩니다. 그런 다음 벡터를 역순으로 배열하여 룩백 창에서 가장 오래된 가격에 가장 작은 가중치를, 가장 최근의 가격에 1.0을 할당합니다. i번째 바의 FFD 값은 역순으로 배열된 가중치 벡터와 로그 가격 창 [i−width, …, i] 의 내적입니다.

d = 0.4이고 임계값 = 1e-5일 때, 창 너비는 1,457 바입니다. 임계값 = 1e-3일 때는 54 바입니다. 임계값은 정적성-기억력의 상충 관계를 조절합니다. 값이 작을수록 더 넓은 룩백 범위를 요구하는 대가로 더 많은 기억력을 보존합니다.

입력 매개변수

매개변수 기본값 설명
InpD 0.4 분수 차분 차수. 일반적인 범위: 0.1–0.9. 0.5보다 큰 값은 정수에 가까운 차분값을 생성하고, 0.1보다 작은 값은 원가치에 가까운 가격을 생성합니다. 최적의 d는 선택된 유의수준에서 ADF 검정을 통과하는 최소값입니다. Python을 이용한 검색 절차에 대해서는 관련 기사를 참조하십시오.
InpThreshold 1e-5 가중치 임계값 τ. |w[k]| < τ일 때 반복 계산이 중지됩니다. 값이 작을수록 창 폭이 넓어지고 메모리 효율이 향상되지만, 첫 번째 유효한 출력을 얻기까지 더 많은 과거 바 데이터가 필요합니다. 권장 범위: 1e-4 ~ 1e-5.
InpUseLog true 차분 연산 전에 ln(가격)을 적용합니다. 원시 가격 시계열(종가, 시가, 고가, 저가)에 권장됩니다. 입력이 이미 수익률 또는 로그 수익률 시계열인 경우에만 false로 설정하십시오.
InpPrice PRICE_CLOSE 적용되는 가격 유형입니다. PRICE_OPEN, PRICE_HIGH, PRICE_LOW, PRICE_CLOSE, PRICE_MEDIAN, PRICE_TYPICAL, PRICE_WEIGHTED 등 모든 ENUM_APPLIED_PRICE 값을 허용합니다.

설치

  1. FFDEngine.mqh 파일을 MQL5\Include\ 폴더(또는 CodeBase 다운로드 시 지정된 하위 폴더 — 아래의 파일 위치 참조)에 복사하십시오.
  2. FFD.mq5 파일을 MQL5\Indicators\Downloads\ 폴더에 복사하십시오(CodeBase 다운로드 시 해당 위치에 자동으로 저장됨).
  3. MetaEditor에서 두 파일을 모두 컴파일하십시오. 지표는 #property strict 하에서 경고 없이 컴파일되어야 합니다.
  4. FFD를 차트에 연결하십시오. 룩백 창(너비 + 1봉)이 채워지면 메인 차트 아래에 지표 창이 나타납니다.

자신만의 EA 또는 지표에서 CFFDEngine 사용하기

FFDEngine.mqh는 헤더 전용 라이브러리입니다. 이 파일을 포함시키고 OnInit() 내에서 Init()을 한 번 호출하십시오:

#include <FFDEngine.mqh>

//--- 고정 폭 분수 차분 연산 엔진의 전역 인스턴스
CFFDEngine g_engine;

//+------------------------------------------------------------------+
//| 전문가 초기화 함수                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- d=0.4, 임계값=1e-5, 로그 변환 활성화 상태로 FFD 엔진을 초기화합니다.
//--- 이 구성은 EA 초기화 단계에서 정적 메모리 가중치 윈도우를 생성합니다.
   if(!g_engine.Init(0.4, 1 e-5, true))
     {
      Print("FFD engine init failed");
      return(INIT_FAILED);
     }
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| 전문가 틱 함수                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 엔진에 쿼리를 보내 과거 바가 정확히 몇 개 필요한지 확인합니다
//--- 임계값을 기준으로 유효한 FFD 값을 계산하기 위해
   int need = g_engine.GetMinBars();
   double close[];

//--- 필요한 기간의 과거 시세 데이터를 가져옵니다.
//--- 기록이 아직 동기화되지 않았거나 불충분한 경우, 오류를 방지하기 위해 실행을 건너뜁니다.
   if(CopyClose(_Symbol, _Period, 0, need, close) < need)
      return;

//--- 배열 인덱스가 시간순과 일치하도록 합니다(가장 오래된 막대가 인덱스 0에 위치).
//--- 역방향 FFD 가중치 벡터 행렬 변환과 올바르게 정렬하기 위해
   ArraySetAsSeries(close, false);

//--- 현재 활성 바에 대한 정적 분수 차분 출력값을 계산합니다.
   double ffd_value = g_engine.Compute(close, need);

//--- 모델의 특징으로 ffd_value를 사용하세요.
  }

Python을 이용한 교차 검증

동반 파일인 FFDValidation.mq5 (기사 다운로드에서 제공)는 FFD 값을 CSV 파일로 내보냅니다. Python 스크립트 ffd_cross_validate.py는 afml 라이브러리를 사용하여 동일한 값을 재계산하고 바 단위로 비교합니다. d = 0.4임계값 = 1e-5 조건에서 EURUSD H1 차트의 5,000 바를 분석한 결과, 최대 절대 오차는 1e-12 미만입니다.

성능 관련 참고 사항

  • 가중치 벡터 할당: OnInit() 에서 한 번 수행됩니다. 틱 경로에서는 할당이 없습니다.
  • 봉별 계산: O(width) 내적. 최신 하드웨어에서 1,457개 요소에 대한 내적 계산은 50 μs 이내에 완료됩니다.
  • ComputeBuffer()prev_calculated 인수를 사용하여 이미 계산된 바를 건너뜁니다. 각 틱마다 현재 미완성된 바만 재계산됩니다.

참고 문헌 및 관련 논문

  • López de Prado, M. (2018). 『금융 머신러닝의 발전(Advances in Financial Machine Learning)』, 제5장 (분수 미분), pp. 76–95. Wiley.
  • 전체 이론, Python 구현 및 ADF 기반 매개변수 탐색: ML을 위한 특징 공학 — 2부: MQL5에서 고정 폭 분수 미분 구현, Patrick M. Njoroge 저.
  • 보완 검증 도구: FFDValidation.mq5ffd_cross_validate.py — 기사 다운로드 패키지에 포함되어 있습니다.

MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/72499

장기 추세 TRIX 오실레이터 장기 추세 TRIX 오실레이터

이중 TRIX 및 LWMA 필터링을 기반으로 한 장기 모멘텀 및 추세 오실레이터.

Institutional Kinematic Price Physics (Velocity and Acceleration) Institutional Kinematic Price Physics (Velocity and Acceleration)

미분법을 가격 변동에 적용하여 진정한 시장 속도(1차 미분)와 시장 가속도(2차 미분)를 도출함으로써, 추세 소진이 발생하기 전에 이를 예측하는 정량적 물리 엔진입니다.

Session Boxes Session Boxes

Session Boxes is a custom indicator for MetaTrader 5 that draws color-coded rectangular boxes on the chart representing the high-low range of the Asia, London, and New York trading sessions. The indicator uses H1 data internally and supports configurable session hours in GMT along with a broker server offset parameter

Gold FVG 파인더 Gold FVG 파인더

이 지표는 차트상에서 불균형 구간(Fair Value Gap)을 찾아내고, 가격이 해당 구간으로 되돌아올 때 화살표로 신호를 보냅니다. 금(Gold), 외환(Forex) 및 M5에서 H4까지의 시간대에서 거래되는 모든 유동성 높은 상품에 적합합니다.