FXボーグ | テクニカル実験室

テクニカル分析を使った自動売買プログラムの開発に挑戦!

スポンサーリンク

「システマティックトレード」に書いてある予測値を標準化する手順。

システマティックトレード」では複数のトレードルール(インジケーター)を合成して「複合予測値」というものを作ります。この複合予測値を使うと一つの投資対象のシャープレシオの平均がなんと「0.40」になるそうです。(ちなみに、この著者のシステムは1.0だそうです。)

今回はこの複合予測値で使用する「予測値の標準化方法」をこちらのサンプルコードを参考に調べてみました。 

f:id:fxborg:20161007011721p:plain

EMA(16日)とEMA(64日)のクロスによる予測値。

予測値の標準化

複数の異なるトレードルールがあって、それぞれ別方向のサインが出ていた場合には、どちらのサインを優先させたら良いでしょうか?

それにはまず、それぞれのインジケーターの数値(スケール)を揃える必要があります。

題材としてEMA交差システムを基にして3種類のトレードルールを作ります。

▼短期16、長期64

f:id:fxborg:20161007031309p:plain

▼短期32、長期128

f:id:fxborg:20161007031026p:plain

▼短期64、長期256

f:id:fxborg:20161007031124p:plain

パラメータを変更し、EMAの交差するタイミングとEMA間の距離が異なるシステムが出来上がりました。まずは、各システムの予測値を求めます。

ボラティリティ調整前の予測値

短期と長期のEMAの距離を測定し、これを予測値として使用します。距離が大きいほど予測値が大きい(トレンドが強い)という意味になります。

▼短期16、長期64

f:id:fxborg:20161007032448p:plain

▼短期32、長期128

f:id:fxborg:20161007032530p:plain

▼短期64、長期256

f:id:fxborg:20161007032625p:plain

この段階ではあまり差が大きくありません。ボラティリティによる標準化を行うとガラリと変わってきます。

ボラティリティ調整後の予測値

次に25日間のボラティリティによる標準化を行います。この部分のコードをみるとボラティリティには、単純日時リターンの指数ウェイト標準偏差(25日)を使用しているようです。

▼短期16、長期64

f:id:fxborg:20161007034117p:plain

▼短期32、長期128

f:id:fxborg:20161007034147p:plain

▼短期64、長期256

 

f:id:fxborg:20161007034234p:plain

これで、それぞれの予測値の特徴がはっきりしてきました。最後に ±20の範囲にリスケーリングします。

予測値のリスケーリング

ここで予測値をー20~+20の範囲にフィットさせるのですが、上のチャートを見てわかる通り、EMAの期間によってスケールが異なります。このリスケーリング方法がポイントなので、書籍からそのまま引用します。

自分のトレードルールを作ろうと思ったら、予測値の平均絶対値がおよそ10になるようにそれらをリスケールする必要がある。

 

そのためには、まずそのトレード戦略をバックテストする必要がある。ただし、バックテストで必要なのは予測値のみであって、パフォーマンスを見る必要はない。そして、できるだけ多くの投資対象の平均を取るのが良い。

 

バックテストでは、予測値の平均絶対値を測定するか、あるいは目測で平均絶対予測値を推定する。これらの値は投資対象感で長期にわたっておよそ同じ値でなければならない。

 

同じでない場合、あなたのトレードルールはうまく規定されておらず、ボラティリティに対しても正しく正規化されていないことになる。

 

平均絶対予測値が求まったら、10をその数値で割る。得られた数値がそのトレードルールの予測値スカラーである。したがって、例えば平均絶対値が0.3であれば、スカラーは10/0.3=33.33となる。

システマティックトレード 付録D フレームワーク」より引用

 

▼短期16、長期64

f:id:fxborg:20161007034843p:plain

▼短期32、長期128

f:id:fxborg:20161007034929p:plain

▼短期64、長期256

f:id:fxborg:20161007035030p:plain

 ±20の予測値の出来上がりです。はみ出たところはカットします。

 最後に

今回は「システマティックトレード」に乗っている予測値の標準化について調べてみました。インジケーターも予測値と同じように適切な範囲にリスケーリングする必要があります。これまでいろいろな方法を試してきましたがなかなか難しいテーマです。

今回の方法はパラメーターごとに固定的なウェイト値を用意するので、手間は掛かるのですが一度決まってしまえば計算の必要がないという点は面白いなと感じました。


こちらからどうぞ

ewmac.py (Python3化しています)
data/CRUDE_W_price.csv