エリオット波動理論に基づくトレーディング戦略 - ページ 287

 
までolyakish


皆さん、こんばんは。
このアルゴリズムの子供たちを教えてください。

ありがとうございました。


言っているのです。

価格カーブに多重中央値フィルターを適用している。何ですか?奇数サイズ(>=3)のウィンドウを取り、元の曲線のすべての値を通して実行します。現在のポイントごとに、ウィンドウに含まれるポイントを値順でソートします。現在の点には、ソートされた配列の中から平均値(配列の中央に位置するという意味)が割り当てられる。得られた結果に対して、もう一度、同じフィルターをかけてみる。それを何度も(通常は20~30回で十分)繰り返す。
抵抗線を求めるには、価格カーブを上下反転させて同じことをします。そして、得られた結果を逆に反転させる。
以上です。
...



ちょっと質問です。
仮に1000件のレポート(バー)の履歴があるとすると
ウィンドウ3
1000,999ウィンドウの結果を計算せず、998番目のレポートに到達した時点で最初の計算を行う(998,999レポートと1000レポートのデータが存在する)。
最初のパスでは、998の結果が得られました。
2回目には、前回の実行時に作成した配列を使用して、996件のレポートを作成します。
3本目では994.
等々
つまり、30回実行すると、960個の値の配列が得られます

もしかしたら、私はあなたのことを正しく理解していなかったのかもしれませんね。
 
toolyakish

<br/ translate="no"> A quick question
1000レポート(バー)の履歴を取ったとします
window 3
1000,999はウィンドウより小さいのでカウントしないことがわかり、最初の計算は998レポート(998、999と1000レポートのデータがある)になったときだけ行う
我々は998結果と最初のパスを取得
我々は配列の前の実行によってすでに形成されて996レポートまで取得
第三の実行は994まで取得 ...
等々
i.e. 30回実行した場合、960の値の配列を得た

たぶん、私が誤解しているのでは?



そうではありません。技術的にはもう少し違うやり方があるんです。フィルタを適用する前に、元の配列をフィルタウィンドウの半分の幅で左右に広げます。新しい配列の空いた部分には,定数,つまり元の配列の端から最後の値,あるいは元の配列の極値で対称に埋めることになります.この場合、1000点の元の配列にフィルタを適用すると、再び1000点が得られます。次にフィルターをかけると、すべてが繰り返される。もちろん、この場合、エッジに歪みが発生する可能性があります。しかし、どんな窓フィルターも(どんなフィルターでも)、中央値も含めて位相遅れがあるため、これを避けることはできません。一般的には--それが自然界の仕組みなのです。おっしゃるようにすることもできますが、そうすると元の配列の端まで届きませんし、拡張機能を使うこともできますが、そうすると、結果の端まで届きません。これは悪いニュースです。 良い点は、メディアンフィルターは



リニアフィルターほど エッジ効果に敏感ではないことです。私が見たいくつかの例では、エッジの歪みは小さいか、場合によっては全くない。PS.そうですね...今、もうひとつのアイデアが浮かんだ。このフィルターは再帰的に適用することができる。試していないのでわかりませんが、カウントが早くなるのではないでしょうか。
 
Andre69さん、ご指摘のメディアンフィルターアルゴリズムを実装してみました。3回目以降は、平滑化された曲線の形状が変化しないことがわかります。この効果を幅広いウィンドウサイズ(最大10000サンプル)で検証してみました。
トレーディングの用途で言えば、「左ウィンドウ」を使うのが正しい。つまり、現在のポイントの値が、現在の値の左側にあるウィンドウの中心から割り当てられる。もちろん、これには位相の遅れ(ラグ)が生じますが、それが世の常です:-)
 
toNeutron

Andre69さん、ご指摘のメディアンフィルターアルゴリズムを実装してみました。3回目以降は、平滑化された曲線の形状が変化しないことがわかります。この効果を幅広いウィンドウサイズ(最大10000サンプル)で確認しました。<br/ translate="no"> トレーディングでの応用としては、現在のポイントがウィンドウの中心からFULLで左にある値を割り当てる場合、「左ウィンドウ」を使うのが正しいです。もちろん、これには位相の遅れ(ラグ)が生じますが、それが世の常です:-)


そうですね...それは腑に落ちない。チェックを開始。ようやく、中央値フィルタリングに使っている私のコードを調べました。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)に書いていただければ、可能な限りアーカイブから依頼作品をお届けします...。


この作品について、何かニュースはありますか?

その回答が発表された後、私はそれ以上の措置を講じなかった。
先ほど、論文資料を探そうとする方法を示しました。
素材が有償になる可能性があることを警告しておく。
 
2Andre69

MatLabで激しいポジション争いをする。
まずは、価格の系列と指標値の系列のウェーブレット分解だけを見てみることにしました。DWTについては、特に驚きもなく、すべてがだいたい理解できました。
CWTの場合も、指標分解は非常に明確であった。しかし、価格シリーズでは以下のような図式が出来上がっている。


この写真の構造は、一般的に言って、例えば、Andre69さんの 28.06.07 20:43のページの投稿にある写真とは大きく異なります。141.その理由を理解したいと思います。
その一方で、規則正しい構造を持ちすぎています。なぜ?
この解析は、1024個のサンプルに対して行われました。
スケール設定:Min=1、Step=1、Max=512。DMeyerウェーブレット

PS ところで、上記の投稿は、ウェーブレットに関する果てしないシリーズの最終回でした。:-)
継続について知りたい。すべき?
 
to Yurixx
この絵の一般的な構造は、例えば141ページの投稿Andre69 28.06.07 20:43の絵とはかなり異なっています。141.その理由を理解したいと思います。
その一方で、規則正しい構造を持ちすぎています。なぜ?


由良 このような規則正しい構造は、研究対象のBPの端にどうしても発生するエッジ効果の性質に由来するものです。 そのような影響を避けることは不可能です。しかし、解くべき問題の条件によって許されるなら、VRの両端から、計算には参加するが、可視化には使用しない系列のいくつかの項を残すことができます(サンプルウィンドウ幅に等しい項数です)。この処置の後、画像は適切かつ等方的になります。
 
<br / translate="no"> しかし、解決すべき問題の条件が許すなら、BPの両端にいくつかの行メンバーを残して、計算に参加させることができますが、可視化には使用しません。この処置の後、画像は適切かつ等方的になります。


セルゲイさん、わかりやすい説明ありがとうございます。あとは、書いたことをどうやるかを考えるだけです。
Parsing Wavelet Toolbox そこには、そのような機能は見当たりませんでした。もしかしたら、私が何か見落としているのか、それとも手動でしかできないのか?
 
nは ウィンドウサイズ、Nは BPメンバー数(1024 ) です。0.01<<1と仮定すると、利用可能なシリーズではMach<10と なる。
この場合、表示される結果は正しく表示されます。