SSブログ

セカンドピーク(2) [システムトレード]

パラメータのセカンドピークを検出するためには、かなりの工夫が必要です。いちばん簡単なのは、とにかく配列に押し込んでしまうことです。
しかし、走査範囲や期間、算出指標の数が大きくなると、その選択はできません。

例えば、パラメータ走査範囲が150×50通り、期間が4,200日、算出指標数が18×3(指標、パラメータ1、パラメータ2)で、それを倍精度(8バイト)の配列に格納しようとすると、必要メモリ量はそれだけで13.6GBにもなります。
パラメータ部分を整数型にしても、6.8GBに達します。

メモリを節約するために、期間を進める度にメインピークとセカンドピークを求めれば良いように思われますが(この場合はパラメータを整数型にして1.6MBほどになります)、そうすると膨大な演算時間が掛かってしまいます。

そこで、現行の時系列分析マクロのように、一組のパラメータにおける全期間の指標値を一度に求め、それを全走査範囲に展開することが大前提となります。
その場合、セカンドピークを求めるためには、少なくとも2回の時系列分析が必要になります。

何故ならば、セカンドピークを求めるためには、メインピークの値とその時のパラメータ値が必要であり、それが確定してからでないと決定できないからです。
では、2回の分析のみで、セカンドピークを求めることができるかというと、そこがまた難しい問題となります。

セカンドピークが、単にメインピークの次に大きな指標値でよいのであれば、2回どころか1回の分析のみで、それを求めることができます。
しかし、セカンドピークはあくまでメインピークとは独立した山であり、メインピークの裾野の一部ではないのです。

すなわち、メインピークの次に大きいその値が、単なる2番目に大きな値ではなく、極大値である必要があるわけです。
セカンドピークの値が極大値かどうかを判定するアルゴリズムが、非常に難しくもあり、また楽しくもあるのです。

もしも指標が1種類しかないならば、メインピークの位置でパラメータテーブルを4分割し、それぞれのテーブルのスタート位置がメインピークになるように走査範囲を変換すれば、比較的簡単なアルゴリズムでセカンドピークを求めることができます。
しかし、18種類もの指標に対して、このアルゴリズムを適用することはできません。

少なくとも3回の分析が許されるのであれば、上記のアルゴリズムの応用として、1回目でメインピークの算出、2回目で順走査によるセカンドピークの算出、3回目で逆走査によるセカンドピークの算出を行ない、2回目の結果と3回目の結果を比較することで、正しいセカンドピークが算出できるのではないかと考えています。

ちなみに、何故、順走査と逆走査が必要かといいますと、メインピークよりも後に現れるセカンドピークが極大値かどうかを判定することは比較的容易にできますが、セカンドピークがメインピークよりも手前にある場合、それが極大値かどうかを判定することは、かなり難しいという実感を持っているからです。

しかし、できれば2回の分析に留めたいところです。詳しくは言えませんが、今現在、メインピークよりも手前にあるセカンドピークを検出できそうなアルゴリズムを思い付いています。
ただし、まだ2次元(パラメータが一つ)の話です。これを3次元に拡張した場合、正しく機能するかどうかはまだ分かりません。

この問題はパズル的な色合いが強く、久し振りに頭をフル回転させています。興味のない方にとっては、何を言っているのかチンプンカンプンでしょうが、興味のある方は、ちょっとしたパズルのつもりで考えてみてはいかがでしょうか?
もしも答えが見つかりましたら、教えていただけるとありがたいです(^_^;)

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。