2009/08/06

離散ウェーブレット変換(Haar)


先回のまとめ内に記載したので今回のお題は、データの変換作業の一例としてウェーブレット変換を取り上げてみました。
※ウェーブレット変換で何ができるの?
ウェーブレットには大きく分けると連続ウェーブレットと離散ウェーブレットがあります。
連続ウェーブレット変換
データの周波数の時間的変化を解析することに使用されている。
(はっきり理解できていません・・・・)
参考サイト
短時間フーリエ変換と連続ウェーブレット変換
離散ウェーブレット変換
データの圧縮、ノイズの除去、多重解像度解析に使われている。
参考サイト

   離散ウェーブレット変換 - Wikipedia

http://wwwmp.jwu.ac.jp/mine/SemPPT/2005sem/2005FoundationOfWaveletTransformRevised.pdf
      
今回は、離散ウェーブレット変換の代表であるHaar(以下Haar)を指標化してみました。
※Haarで何をしたいのか?
相場が作る波形を分解し必要な波形を取り出したい。
補足:複雑な波形は、実は単純な波形の組み合わせでできています。
※今回は、Haar理論の説明は省きます。興味がある方は、上記リンクなどを参考にしてください。
下記に添付したファイルにある【DWTHaar.mq4】をもちいて説明します。
選択事項
①波形をどれだけ分割(周波数ごとに)するかを決めます。
【extern int N = 7;】N値が分割数になります。
例)N=3の場合 【高周波数成分中周波数成分低周波数成分】に分割されます。
例)N=5の場合 【高高周波数成分高中周波数成分中周波数成分低中周波数成分低低周波数成分】に分割されます。
※【重要事項】
    N値を上げると細分化が可能になりますが、その際のデータ量が2のN乗必要になり、その分処理能力が落ちてしまいます。
例)N=3の場合のデータ量8:N=5の場合32:N=7の場合128:N=10の場合1024:N=15の場合32768になります。
②どの波形が必要か決定する。
まず、N値最小値に最高周波数成分が対応しN値最大値に最低周波数が対応しています。
【extern int HBs = 3;//高周波カット位置】【extern int LBs = 4;//低周波カット位置】を示しています。ただし、カット位置の数値は含みます。
例)N=3で【HBs=3:LBs=3】の場合【中周波数成分】を出力します。
例)N=5で【HBs=3:LBs=4】の場合【中周波数成分+低中周波数成分】が出力されます。
※一度試してみると分かりやすいと思います。
③その他パラメーター
【Shift = 0】は、検証用のシフトです。シフトしていくと理解しやすいと思います。
※ここまで【DWTHaar.mq4】を試してみると【あれ?】と思うことがあると思います。
今までの指標のように、全期間で指標が表示されません。どうして?
この指標は、あくまでも適用期間(2のN乗)のデータの変換作業を行っているだけだからです。
また、完全に周波数ごとに分解しているのではなく、あいまいに分解していることもわかると思います。
【DWTHaar.mq4】の活用方法
いろいろな活用方法があるかとは思いますが、今回はシンプルな活用方法を提案したいと思います。
【DWTHaar_M.mq4】は、【DWTHaar.mq4】の最新のデータが、期間の平均からどの程度乖離しているかというものです。
※N値を上げた状態で使用すると、(若しくはデータ数が多いと)処理に時間がかかりますので注意してください。
まとめ
今回使用したデータは、初値を使用しています。お好みに応じて変更してください。
また、DWT(離散ウェーブレット変換)は、解析精度を上げると処理能力が、多く必要となります。
それを回避する方法に、高速ウェーブレット変換というものもあるそうです。興味がある方は、検証されてはどうでしょうか?