원칙적으로 이 함수는 MATLAB에 있습니다. 제가 틀리지 않은 경우 Matlab 컴파일러를 사용하여 DLL을 만들 수 있습니다. 따라서 이 DLL을 참조하는 칠면조를 만듭니다.
dll보다 세상이 더 심플해진 것 같아요.
이 디지털 필터를 구축하기 위해 최소화해야 하는 기능은 다음과 같습니다.
이 설정에서 필터는 기록 데이터에서만 작동할 수 있음을 알 수 있습니다. 현재 시점의 추세선 값을 계산하려면 이 추세의 이전 값뿐만 아니라 한 단계 앞으로 t[i+1]도 알아야 합니다. 역사에 대한 이러한 필터는 인용문(topikstarter가 데모로 첫 번째 게시물에서 가져온 것)과 부드러운 곡선의 정확한 일치를 보여주고 인용문의 오른쪽 가장자리에 뻔뻔스럽게 다시 그립니다.
인터넷에서 찾은 또 다른 내용은 다음과 같습니다.
이 필터를 만들기 위한 준비된 레시피를 찾을 수 없습니다. 실제로 VR의 오른쪽 가장자리에 대한 기능을 직접 가져와서 구축해 보겠습니다(위 방정식).
매개변수 y[0]에 대한 미분을 취해 보겠습니다. 현재 값을 0과 같게 하면 원하는 HP 필터(하위 방정식)에 대한 재귀 표현식을 즉시 얻을 수 있습니다. 필터의 평활화 속성이 평활화 매개변수 w에 어떻게 의존하는지 봅시다.
여기에서 녹색 선은 kotir이고 검은색 선은 w=0.5 등입니다. 모든 것이 올바르게 작동하는 것을 볼 수 있습니다. 피할 수 없는 위상 지연이 있습니다. 더 커질수록 앤티 앨리어싱이 더 강해지고 오른쪽 가장자리가 다시 그려지지 않습니다. 이제 MQL로 코딩할 수도 있습니다.
//+------------------------------------------------------------------+
//| Moving Average HP.mq4 |
//| Code by Neutron |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_color1 Blue
#property indicator_width1 3
extern double w=0.1;
int Start,i,m;
double MA[5000],Y[5000];
int start()
{
Start=5000;
MA[Start]=Open[Start];
MA[Start-1]=Open[Start-1];
for (i=Start-2;i>=0;i--) MA[i]=w*(Open[i]-2.*MA[i+1]+MA[i+2])+2.*MA[i+1]-MA[i+2];
}
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MA);
return(0);
}
결과는 다음과 같습니다.
파란색 - HP, 녹색 - kotir, 빨간색 - 2차 워터아웃 필터(비교용).
실제로 이 필터는 선형 추세를 정직하게 포착하려고 합니다. 그렇지 않으면 안됩니다. 게시물 상단의 기능을 보면 따옴표(첫 번째 합계)에서 이동 평균의 편차를 최소화하기 위한 요구 사항 외에도 2차 미분(2차 합)! 그러나 선의 2차 도함수는 0과 같으며 이를 최소화하기 위한 요구 사항은 임의의 입력 데이터 벡터에 대한 추세선에 대한 최대 흡인 요구 사항과 동일합니다. 접근 방식이 마음에 들었습니다.
추신: 함수에 대한 표현에서 두 번째가 아닌 첫 번째 도함수(상단 방정식)의 최소화가 필요한 경우 지수 평균 EMA(하단 방정식)에 대한 순환 이동 공식을 얻습니다.
지수 평균은 가능한 모든 이동 평균 중에서 가장 부드러운 것으로 밝혀졌습니다!
안녕하세요 친애하는 프로그래머!
내 생각에 칠면조를 쓰는 간단한 작업을 누가 해결할 것입니까? Hodrick-Prescott 필터로 행을 필터링하는 칠면조를 작성해야 합니다. 원칙적으로 이 함수는 MATLAB에 있습니다. 제가 틀리지 않은 경우 Matlab 컴파일러를 사용하여 DLL을 만들 수 있습니다. 따라서 이 DLL을 참조하는 칠면조를 만듭니다. 입력에서 행의 길이, 평활화 매개변수와 같은 매개변수를 적용합니다. 출력에서 추세 구성 요소(차트에 그리기)와 순환 구성 요소(오실레이터)를 얻습니다.
MATLAB Compiler와 MQL4도 이해하지 못하기 때문에 스스로 할 수 없습니다.
그래프에서 유로달러 H4의 분해. 보시다시피 거의 역사를 통틀어 가격 움직임의 특징은 추세를 돌파 한 후 가격이 이전 극값과 추세의 차이만큼의 거리로 이동했다는 것입니다. 간단히 말해서 진폭은 거의 같은. 예외는 최신 데이터이지만 극단적인 경우도 있습니다. 그런 칠면조는 원칙적으로 데이터 포인트 수가 적으면 다시 그려야 하지만, 가령 2000개로 늘리면 다시 그리는 데 문제가 없을 것이라고 생각합니다.