2010年12月7日火曜日

為替相場はランダムウォーク (Random Walk)ではない!

いつもいろいろとWebで情報集めをしているのですが、しばらく前から「ランダムウォーク」というキーワードが気になっていろいろ調べています。というのも、もしも仮に相場がランダムウォークであれば、今自分がやっている検証が根本から意味がないという事になるからです。どうか「ランダムウォークでないでくれ」と思いながらいろいろ情報集めをしたのですが、いろいろ調べてみるとしっかりと研究している人たちが「ランダムウォークです」と結論付けたケースもあれば、「そうではありません」と結論付けた研究者もいるといった具合でした。

いろいろサイトを巡回しているとランダムウォークにより擬似的に作られたデータであっても、あたかもトレンドが発生したように見えたりして本物データと見分けが付きません。

そこでまずは自分でも「ランダムウォークデータを作ってみよう」と考えました。

現在私が検証しているデータは16通貨ペア、2001年から2010年の途中までの1時間足というものです。これらのファイルは全部で16x10年=160個(実際にはデータが無い年が若干あるので150個程度)で、各通貨ペア/年毎に別ファイルに保存して利用しています。

まずはこれらのそれぞれのファイル毎に足毎のリターン平均と標準偏差を求めました。例えば以下のような感じです。

EURUSD/2001 AVG= -0.000011, SD=  0.001283
GBPUSD/2001 AVG= -0.000008, SD=  0.001486
USDJPY/2001 AVG=  0.002737, SD=  0.156111

それに基づいて5秒に一回ランダムウォークをさせてみてデータを生成してみました。ランダムウォークは以下のように行いました。
現在のプライス = 5秒前のプライス + 正規乱数(@5秒枠に調整済みAVGとSD)
※5秒枠に調整済みAVG=上記で得られえたAVG÷(60分×12) (この調整の計算はこれでよいのかいまひとつ不安)
※5秒枠に調整済みSD=上記で得られたSD÷SQRT(60分×12)

各足(1時間)毎に始値から720回ランダムウォークを行い高値と安値を決定します。そして720回目のランダムウォークを終わった時点のプライスが終値ということになります。

以下はそのランダムウォークにより生成したデータの一例ですが、パッと見実際のデータと区別が付きません!

次に最近検証している回帰線の傾きでエントリーしてNCトレーリングでエグジットするという戦略でランダムウォークデータに対してこの戦略を適用した場合と、実際の2001年から2010年までのデータに対してこの戦略を適用した場合を比較してみました。

この戦略は期間Xの回帰線の傾きが下降から上昇に転じたらロングエントリーしてあとはファクターYのNCトレーリングを行ってストップに引っかかったらエグジットするというものです。(ショートはこの逆) 同時に最大一つのポジションを固定サイズでトレードし、エグジット後には次のトレードチャンスが来るまで待機します。 スプリットは0.025%(例えば1ドル100円ならば2.5pips分、1ポンド150円ならば3.75pips分ということになります)でシミュレートしました。

検証したパラメータは以下の通りです。
期間Xは20~30、刻み1
ファクターYは3.0~5.0を刻み0.25

合計でざっくりと 11期間 × 16通貨 × 10年 ×9ファクタ ≒15000とおりのパラメータ・データの組み合わせで行いました。以下がその結果で「ランダムウォークだと儲からないが本物の実データなら少し儲かる」という結果が出ました。(平均損益も上記のスプリットと同様に%ベースで計算しています)

実データの場合:
16通貨ペア全部、全パラメータ、全期間平均
1トレードあたりの平均損益:+0.028%、標準偏差=0.102%
プロフィットファクタ平均:1.10

ランダムウォークデータの場合:
16通貨ペア全部、全パラメータ、全期間平均
1トレードあたりの平均損益:-0.015%、標準偏差=0.126%
プロフィットファクタ平均:0.97

ランダムウォークデータの平均損益は理想的(?)にはスプリット分である-0.025%になるはずですがデータ数が足りないのかそこまでの精度はないようです。(今回のデータ数は上記のとおり15,000程度です。あと原因として考えられるのはプログラムのバグですが…)  以前今回の意図とは全く別の意図で検証したランダムシミュレーションにおいて、データ数=150,000程度(今回の10倍)に対して-0.025%の桁までがきっちりと計算できた事がありますので今回はサンプル数が少ないという事かなぁと思っています。

通貨ペア毎の結果は以下のような感じで、この結果を見る限りにおいて為替相場はランダムウォークではないと言えるのではないでしょうか。 (※この結果は今後も検証を続けて行こうと思えるもので個人的にはとてもうれしい結果です!)

実データの場合(通貨ペア毎、全パラメータ、全期間平均):※平均損益は1トレードあたりの損益平均
EURUSD:平均損益= 0.033%、 PF= 1.13
GBPUSD:平均損益= 0.024%、 PF= 1.10
USDCHF:平均損益= 0.024%、 PF= 1.12
USDJPY:平均損益= 0.030%、 PF= 1.13
EURJPY:平均損益= 0.051%、 PF= 1.18
GBPCHF:平均損益= -0.004%、 PF= 0.97
GBPJPY:平均損益= 0.055%、 PF= 1.19
CHFJPY:平均損益= 0.001%、 PF= 1.01
USDCAD:平均損益= 0.001%、 PF= 1.03
AUDUSD:平均損益= 0.054%、 PF= 1.16
AUDJPY:平均損益= 0.047%、 PF= 1.10
EURCAD:平均損益= -0.016%、 PF= 0.99
EURCHF:平均損益= 0.011%、 PF= 1.04
EURGBP:平均損益= 0.008%、 PF= 1.04
NZDJPY:平均損益= 0.100%、 PF= 1.25
NZDUSD:平均損益= 0.062%、 PF= 1.19

ランダムウォークデータの場合(通貨ペア毎、全パラメータ全期間平均):
EURUSD:平均損益= -0.027%、 PF= 0.96
GBPUSD:平均損益= -0.009%、 PF= 0.94
USDCHF:平均損益= -0.045%、 PF= 0.92
USDJPY:平均損益= -0.016%、 PF= 0.98
EURJPY:平均損益= -0.007%、 PF= 1.03
GBPCHF:平均損益= -0.046%、 PF= 0.87
GBPJPY:平均損益= 0.010%、 PF= 1.03
CHFJPY:平均損益= 0.038%、 PF= 1.12
USDCAD:平均損益= 0.038%、 PF= 1.12
AUDUSD:平均損益= 0.010%、 PF= 1.06
AUDJPY:平均損益= -0.031%、 PF= 0.99
EURCAD:平均損益= -0.033%、 PF= 0.93
EURCHF:平均損益= -0.026%、 PF= 0.87
EURGBP:平均損益= -0.045%、 PF= 0.83
NZDJPY:平均損益= -0.047%、 PF= 0.92
NZDUSD:平均損益= -0.006%、 PF= 1.00






























0 件のコメント: