엘리엇 파동 이론에 기반한 거래 전략 - 페이지 287

 
올리 olyakish


모두 좋은 저녁
이 알고리즘에 대해 자세히 알려주세요.

미리 감사드립니다


나는 말하고 있다.

중앙값 필터를 가격 곡선에 반복적으로 적용합니다. 그것은 무엇입니까? 홀수 크기(>=3)의 창을 가져와 원래 곡선의 모든 값에 대해 실행합니다. 각 현재 지점에서 창에 해당하는 지점을 값별로 정렬합니다. 정렬된 배열에서 현재 지점의 평균(배열 중앙에 위치한다는 의미에서) 값을 할당합니다. 결과에 동일한 필터를 적용합니다. 우리는 이것을 여러 번 반복합니다(보통 20-30번이면 충분합니다).
저항 수준을 얻으려면 가격 곡선을 거꾸로 뒤집고 똑같이하십시오. 그런 다음 결과를 되돌립니다.
그게 다야!
...



작은 질문
1000개 보고서(막대)의 기록을 가져왔다고 가정해 보겠습니다.
창 3
1000.999의 경우 창이 더 작기 때문에 계산하지 않는 것으로 나타났습니다. 첫 번째 계산은 998 보고서에 도달했을 때만 이루어집니다(998.999 및 1000 보고서의 데이터가 있음).
첫 번째 패스에서 얻은 998 결과
두 번째 패스 동안 우리는 이미 996에서 일어나며 보고서는 이미 이전 실행에 의해 형성된 어레이에 있습니다.
세 번째 실행에서 우리는 994에서 일어납니다 ...
등 ...
즉, 30번 실행하면 960개 값의 배열을 얻습니다.

내가 당신을 잘못 이해했나요?
 
올리 키시


작은 질문
1000개 보고서(막대)의 기록을 가져왔다고 가정해 보겠습니다.
창 3
1000.999의 경우 창이 더 작기 때문에 계산하지 않는 것으로 나타났습니다. 첫 번째 계산은 998 보고서에 도달했을 때만 이루어집니다(998.999 및 1000 보고서의 데이터가 있음).
첫 번째 패스에서 얻은 998 결과
두 번째 패스 동안 우리는 이미 996에서 일어나며 보고서는 이미 이전 실행에 의해 형성된 어레이에 있습니다.
세 번째 실행에서 우리는 994에서 일어납니다 ...
등 ...
즉, 30번 실행하면 960개 값의 배열을 얻습니다.

내가 당신을 잘못 이해했나요?



확실히 그런 방식은 아닙니다. 기술적으로 약간 다르게 수행됩니다. 필터를 적용하기 전에 필터 창 너비의 절반만큼 양방향으로 원본 배열을 확장합니다. 새 배열의 가장자리에서 형성된 빈 공간은 상수, 즉 원래 시리즈의 가장자리에서 마지막 값으로 채워지거나 원래 시리즈의 극단 값과 대칭으로 채워집니다. 이 경우 1000포인트의 원래 배열에 필터를 적용한 후 다시 1000포인트를 얻게 됩니다. 다음 필터링에서는 모든 것이 반복됩니다.
물론 이 경우 가장자리에서 왜곡이 발생할 수 있습니다. 그러나 모든 창 필터(및 실제로 모든 필터)에는 중앙값을 포함하여 위상 지연이 있기 때문에 이 문제에서 벗어날 수 없습니다. 일반적으로 이것이 자연이 작동하는 방식입니다.
당신이 설명한대로 할 수는 있지만 원래 배열의 가장자리에 도달하지 않거나 확장을 사용하지 않지만 결과의 극단값을 신뢰할 수 있다고 생각할 수 없습니다.
이것은 나쁜 소식입니다.
좋은 소식은 중앙값 필터가 선형 필터 만큼 에지 효과에 민감하지 않다는 것입니다. 내가 직접 볼 수 있었던 몇 가지 예는 가장자리 왜곡이 작거나 어떤 경우에는 전혀 그렇지 않다는 것을 보여줍니다.

추신. 네... 지금도 생각이 났습니다. 필터는 재귀적으로 적용될 수 있습니다. 무슨 일이 일어 났는지 - 나는 그것을 시도하지 않았지만 더 빠를 것입니다.
 
Andre69, 제안하신 중간 필터 알고리즘을 구현했습니다. 세 번째 실행 후에는 부드러운 곡선의 모양이 변경되지 않는 것으로 나타났습니다. 다양한 창 크기(최대 10,000개 샘플)에서 이 효과를 테스트했습니다.
거래 응용 프로그램의 경우 "왼쪽 창"의 사용이 우리에게 정확합니다. 이것은 현재 포인트가 현재 값의 완전히 왼쪽에 위치한 창 중앙에서 값을 할당받는 경우입니다. 물론 이 경우에도 위상지연(delay) 현상이 발생하지만 세상은 이렇게 작동합니다 :-)
 
중성자 에게

Andre69, 제안하신 중간 필터 알고리즘을 구현했습니다. 세 번째 실행 후에는 부드러운 곡선의 모양이 변경되지 않는 것으로 나타났습니다. 다양한 창 크기(최대 10,000개 샘플)에서 이 효과를 테스트했습니다.
거래 응용 프로그램의 경우 "왼쪽 창"의 사용이 우리에게 정확합니다. 이것은 현재 포인트가 현재 값의 완전히 왼쪽에 위치한 창 중앙에서 값을 할당받는 경우입니다. 물론 이 경우에도 위상지연(delay) 현상이 발생하지만 세상은 이렇게 작동합니다 :-)


예 ... 불일치가 나타납니다. 확인을 시작했습니다. 마침내 중앙값 필터링에 사용하는 코드를 살펴보았습니다. N년 전(N>5) 그래프를 표시하는 하나의 작은 프로그램에 대해 작성했습니다. 이제 나는 이 프로그램을 모든 종류의 연구를 위한 시험장 으로 사용하기 시작했습니다. 이것은 편리하며 코드의 이전 부분을 살펴보지 않았습니다. 모든 것이 작동하고 좋습니다... 이제 보니... 그리고 갑자기 중간 필터링이라고 생각했던 기능이 제대로 작동하지 않는다는 것을 알게 되었습니다! 본의 아니게 잘못된 정보에 대해 격렬하고 죄송합니다! 나는 고개를 숙인다.
왜 그리고 왜 내가 제때에 그것을 했는지 - 신이시여 나는 기억하지 못합니다.
고전적인 중앙값은 정렬된 배열의 중심 값을 취할 때입니다. 어떤 이유로 이 특별한 경우에는 중앙값과 이전 값 사이의 평균을 취했습니다. 아마 그때, 아주 오래전에, 나는 어떤 이유에서 그것을 필요로 했을 것입니다. 물론 이것은 엄격한 의미에서 중앙값은 아니지만 비선형 필터로 밝혀졌습니다. 내가 클래식 버전으로 돌아왔을 때, 모든 것이 당신이 설명한 대로 밝혀졌습니다. 내 버전에서 곡선은 필터가 적용될 때마다 변경되고 결국에는 직선이 되는 경향이 있습니다(수백 번의 필터링 후). 필터 창이 클수록 더 빨리 발생합니다.
더 이상의 불일치가 없도록 C로 코드를 제공합니다.
모든 것이 간단합니다. 누구나 알아낼 수 있기를 바랍니다.
//---------------------------------------------------------------------------
void __fastcall TPlotForm2D_WL::FilterCurveMedian(int Flen)
{
 //количество точек кривой
 int NN=Chart1->Series[IndexUpDown->Position-1]->Count();
 
 //объявляем временные массивы и выделяем память под них
 double* TempArray=new double[NN+(Flen/2)*2];
 double* ResultArray= new double[NN];
 double* XArray=new double[NN];
 double* MedArray=new double[Flen];

 //заполняем массив значений Х точками текущей кривой
 for(int i=0;i<NN;++i)
  XArray[i]=Chart1->Series[IndexUpDown->Position-1]->
                           XValues->Value[i];

 double Start=2*Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[0];
 double End=2*Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[NN-1];

 int k=0;

 //заполняем временный массив значениями Y точками текущей кривой
 for(int i=Flen/2;i>0;--i) //симметричное расширение влево
  TempArray[k++]=Start-Chart1->Series[IndexUpDown->Position-1]->
                                      YValues->Value[i];
 for(int i=0;i<NN;++i)
  TempArray[k++]=Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[i];
 for(int i=NN-1;i>=NN-Flen/2;--i)//симметричное расширение вправо
  TempArray[k++]=End-Chart1->Series[IndexUpDown->Position-1]->
                                YValues->Value[i];

 //собственно фильтрация
 for(int i=Flen/2;i<NN+Flen/2;++i)
  {
   for(int j=-Flen/2;j<=Flen/2;++j)
    MedArray[j+Flen/2]=TempArray[i+j];
   ::sort(MedArray,MedArray+Flen);
   //Это то, что я написал когда-то. Уже не помню, почему так.
   //Но это работает!!!!!!!!!!
   ResultArray[i-Flen/2]=(MedArray[Flen/2]+MedArray[Flen/2-1])/2;
   //А эта строчка - классический медианный фильтр.
   //И это не работает, так как хотелось бы. ???? Sorry
   //ResultArray[i-Flen/2]=MedArray[Flen/2];
  }


 //дальше вывод и удаление временных массивов
 AddFastLine();

 for(int i=0;i<NN;++i)
  Chart1->Series[Chart1->SeriesCount()-1]->
          AddXY(XArray[i],ResultArray[i],"",clBlue);

 SwitchOnCurve(PlotForm2D_WL->Chart1->SeriesCount()-1);

 delete [] TempArray;
 delete [] ResultArray;
 delete [] XArray;
 delete [] MedArray;

 if(PlotForm2D_WL->Visible)
  PlotForm2D_WL->Visible = false;
 PlotForm2D_WL->Show();

}
//---------------------------------------------------------------------------



"왼쪽 창"에 관해서는 - 괜찮습니다. 그러나 지금은 이것이 세부 사항이라고 생각합니다.

다시 한번 사과드립니다.

 
북풍 으로
...하지만 이 과학적 작업을 받는 데 진지하게 관심이 있는 경우 저희(info@disserr.ru)에게 편지를 보내주세요. 가능하면 아카이브에서 요청한 작업을 전달해 드리겠습니다...


이 작품에 대한 소식이 있지 않을까요?
 
Северный Ветер 으로
...하지만 이 과학적 작업을 받는 데 진지하게 관심이 있는 경우 저희(info@disserr.ru)에게 편지를 보내주세요. 가능하면 아카이브에서 요청한 작업을 전달해 드리겠습니다...


이 작품에 대한 소식이 있지 않을까요?

답변을 게시한 후 추가 조치를 취하지 않았습니다.
논문 자료를 찾는 방법을 보여주었습니다.
나는 재료가 지불 될 수 있음을 경고합니다.
 
2 안드레69

MatLab과 치열한 위치전을 펼치고 있습니다.
우선 가격 계열과 지표 값 계열의 웨이블릿 확장만 보기로 했습니다. DWT에 대한 놀라움을 찾지 못했습니다. 모든 것이 다소 명확합니다.
CWT의 경우 지표의 분해도 상당히 이해할 수 있는 구조를 가지고 있었습니다. 그러나 가격 시리즈는이 그림을 제공했습니다.


일반적으로 이 그림의 구조는 예를 들어 Andre69 의 141페이지 28.06.07 20:43 게시물에 있는 그림과 크게 다릅니다. 그 이유를 알고 싶습니다.
반면에 너무 규칙적인 구조를 가지고 있습니다. 왜요 ?
이 분석은 일련의 1024개 샘플에 대해 수행되었습니다.
스케일 설정: 최소=1, 단계=1, 최대=512. 디마이어 웨이블릿

PS 그건 그렇고, 언급 된 게시물은 웨이블릿에 대한 끝없는 시리즈의 마지막 게시물이었습니다. :-)
후속작에 대해 알고 싶습니다. 해야 한다?
 
유리크스에게
일반적으로 이 그림의 구조는 예를 들어 Andre69 의 141페이지 28.06.07 20:43 게시물의 그림과 크게 다릅니다. 그 이유를 알고 싶습니다.
반면에 너무 규칙적인 구조를 가지고 있습니다. 왜요 ?


유라와 같은 규칙적인 구조는 본질적으로 연구 중인 VR의 끝에서 필연적으로 발생하는 가장자리 효과를 가지고 있습니다. 이러한 효과는 피할 수 없습니다. 그러나 해결 중인 문제의 조건이 허용하는 경우 VR의 각 끝에 시리즈의 여러 구성원을 남길 수 있으며(구성원의 수는 샘플링 창의 너비와 같음) 계산에 참여할 수 있습니다. 그러나 시각화에는 사용되지 않습니다. 이 절차 후에 사진이 적절하고 등방성이 됩니다.
 

그러나 해결 중인 문제의 조건이 허용하는 경우 시리즈의 여러 구성원이 VR의 각 끝에 남을 수 있으며 계산에는 참여하지만 시각화에는 사용되지 않습니다. 이 절차 후에 사진이 적절하고 등방성이 됩니다.


설명에 대해 Sergey에게 감사드립니다. 당신이 쓰는 것을 수행하는 방법을 알아내는 것만 남아 있습니다.
Wavelet Toolbox를 이해하면서 어떻게든 그런 기회를 찾지 못했습니다. 내가 뭔가를 놓쳤거나 손으로 만 할 수 있습니까?
 
n/N<<1 조건을 충족하여 이 효과를 최소화할 수 있습니다. 여기서 n 은 창 크기(귀하의 경우에는 n = Max )이고 N 은 BP 구성원 수(1024)입니다. 0.01<<1이라고 가정하면 기존 시리즈의 경우 Max <10입니다.
이 경우 표시된 결과가 올바르게 표시됩니다.