さて前回は、見直した選定方法で、最適化の目的関数/期間、WF期間を求めたところまで書きました。今回は、選択した組合せで評価した結果、「符号付R2乗」が正数になるのかを、「ブートストラップ法」で検定した様子を書いてみたいと思います。
くどいですが、以前のブログ記事で考えた、「ウォークフォワード分析」工程で最適化の目的関数/期間、WF期間を選択する手順を大雑把におさらいすると、以下の手順。
【選定の流れ】
-----------------------------
1.最適化期間の目的関数の結果とWF期間純益の「偏差値」を求める
2.R2乗に符号をつける
3.符号付R2乗値のシャープレシオを求める
4.「符号付R2乗値シャープレシオ」のスキャン結果から堅牢ものを選ぶ
5.ブートストラップ法で「符号付R2乗値」が0以下でない事を確認する
-----------------------------
前回の記事では、上記の「1.」~「4.」までを実施して、通貨ペア毎に目的関数/期間、WF期間を選んだところまででした。今回の記事は、上記「5.」についてです。
さて、突如あらわる「ブートストラップ法」という単語。
これは、最近購入して、まだ読み終わってない以下の書籍に出てた検定/推定方法。
「テクニカル分析の迷信」 9,800円
だから、高いっちゅーねん。。。
論理の飛躍が無いという意味では解りやすいんだけど、
くどいです。
でも今まで、よくわからないまま本に載ってた統計学の手法の理屈を少し理解できたと思うし、「科学的」な思考方法も、くどさのおかげで少しは身についたと思います。。
それはともかく内容は、テクニカル分析を、主観的なものと客観的なものにわけてて、「ヘッド・アンド・ショルダー」を槍玉にあげて、評価できない事を主な理由に主観的なテクニカル分析を否定。
そして科学的論法に基づいた仮説検定/区間推定、データマイニング等々。
#この本で言う「データマイニング」とは、「パフォーマンスを競わせ、勝てるルールを選び出すこと」だそう。。
堅牢かどうかはわからない気がするんだけど。。。 最後まで読も。
さて、本題に戻って。
【ブートストラップ法って何?】
-----------------------------
「ブートストラップ法」は上記書籍に載っていた方法で、採取したデータ群の傾向の場合に期待値がゼロより大きい事を証明するための方法。書籍上はトレード結果をこの「ブートストラップ法」で検証して、偶然出た利益なのか、期待値がゼロより大きいかを判定していた。
#他にも「モンテカルロ・パーミュテーション法」という手法の記載もあった。
理屈としては、データ群の期待値が「ゼロ以下である」という仮説を立てて、この仮説が棄却されれば結果的に、ゼロより大きいと立証されるという流れ。これをモンテカルロ法みたく、元データから乱数で大量にデータを生成して、生成されたデータ群(サンプル分布と呼ぶ)からp値と信頼区間(下限値)を求めて判定する。
-----------------------------
手順としては、以下の様な流れ。
【ブートストラップ法による検定/推定の流れ】
------------------------
1.オリジナルデータの平均値を求める
※書籍ではトレード結果の検証で使っているけど、このトレード結果を取得するのに、
一旦「トレンド除去」したチャートで、トレードした結果のデータを使うらしい。
●「トレンド除去」のイメージは以下のHPの雰囲気
・MathWorks - 「例: データの線形トレンドの除去」
●「トレンド除去」をする背景/意図は以下の記事の内容参照
・豊嶋さんのブログ
2.ゼロセンタリングする
オリジナルの各データから上記平均値をひく(p値を求める場合のみ)
3.上記「2.」のデータ群から、復元方式でオリジナルデータの数だけサンプリングして、
平均を求める。(復元方式なので同じデータが複数回使われる事もある)
4.上記「3.」をたくさん(書籍上は5000回)繰り返して、「サンプル分布」を生成する。
5.サンプル分布のうち、オリジナルデータの平均値を上回るデータ数を数えて、
その数が「サンプル分布」内のデータ数(例でいうと5000個)の何%に相当するかが、
p値。
6.ゼロセンタリングせずに、上記「3.」~「4.」を行って、上位5%と下位5%を除いた
データのうち、最小値が90%信頼区間(下限値)
------------------------
イメージにすると以下の様な流れ。
【ブートストラップ法による検定/推定のイメージ】
-------------------------------
●サンプル分布を作成する
まずオリジナルデータのヒストグラムを滑らかにして、「サンプル分布」を生成する。
#上記手順の「3.」「4.」の部分
↓
●p値を求める
p値が意味するイメージとしては以下の様な感じ。
#上記手順「2.ゼロセンタリング」してるから、平均はゼロ近辺になる。
つまり、データ特性から言って、偶然元データの平均値になる確率がp値。
ばらつきが大きいと偶然元データ平均値になる確率が高くなる。その確率
が低いと、偶然じゃないという理屈。
が低いと、偶然じゃないという理屈。
●信頼区間を求める
信頼区間のイメージは以下の様な感じ。
#こっちは前述の「2.ゼロセンタリング」されてないので、得られた「サンプル分布」の平均値は、
オリジナルデータの平均値に近い値になる
オリジナルデータの平均値に近い値になる
この場合、信頼区間(下限値)がゼロより大きければ、オリジナルデータの平均が偶然正数
になった可能性が棄却される。
になった可能性が棄却される。
じゃあ、求めたp値と信頼区間での具体的な判定方法としては、以下の様なイメージらしい。
●結果を判定する指針
「おそらく有意」 :p値10%、信頼区間80%
「統計的に有意」:p値 5%、信頼区間90%
「非常に有意」 :p値 1%、信頼区間98%
-------------------------------
間違えてたら、誰か指摘ください。。。
さて、前振りが長くなったけど本題に。
【ブートストラップ法でR2を評価】
-------------------------------
この「ブートストラップ法」を使って、前回のブログに記載した作業で採取した符号付R2を通貨ペア毎に評価して、ゼロより大きい事が言えたらよしとするという段取り。
入力データとしては、前回選んだ最適化の目的関数/期間、WF期間の組合せで得られる、セグメント毎のR2データ。つまり、前回のブログ記事の表で言うと、以下の表の”R2Signed”。
これを、10万回シミュレーションして作成したサンプル分布を元に、p値と90%信頼区間を計算した通貨ペア毎の結果が以下の表。
上記表で、数字を青色で塗った箇所は「統計的に有意」で、黄色で塗った箇所は「おそらく有意」。
つまり、GBPJPY・USDJPYを中心にポートフォリオを組んで、USDCHFを補助的に追加可能といった雰囲気。他は、偶然符号付R2乗値が正数になったという評価結果。。
-------------------------------
この評価は、正数になったのが偶然かどうかを評価しているので、堅牢かどうかはまた別の問題。
#なので、以前のブログ記事で指摘頂いた「アウトサンプル評価」が必要ということ。
さて、今回の最後は、上記「ブートストラップ法」による評価をする為に作ったツールリリースのお知らせです。
【ブートストラップ法ツールリリース】
----------------------------
前述の「ブートストラップ法」評価で使ったツールをダウンロードできる様に以下のブログで公開しました。
※使い方とかも記載してます。
●ツールの出力結果イメージ
===========================================================
o Original average of data,21.695636 → 入力ファイルの平均値
o p-value(percentage),2.949000 → p値(パーセント表記)
o Confidence interval(lowest) , 21.167290 → 信頼区間(下限値)
o Confidence interval(highest) , 40.349455 → 信頼区間(上限値)
----------------------------------------------------------------------
o Average data of simulation,21.695818 → 指定された10万回シミュレーションして
得られたサンプル分布の平均値
o +2sigma data of simulation,43.636596 → 前述サンプル分布平均+標準偏差×2
o Highest data of simulation,77.179867 → 前述サンプル分布の最大値
o -2sigma data of simulation,-0.244959 → 前述サンプル分布平均-標準偏差×2
o Lowest data of simulation,-21.882980 → 前述サンプル分布の最小値
===========================================================
----------------------------
ちなみに、つっこみはいつでもお待ちしております。
そして、アウトサンプル評価方法に悩みながら「FXシステムトレード初心者奮闘記」は、ポートフォリオの組み立てとパフォーマンス評価に進むのでした。
#NW過負荷試験したらMT4用EA共通部品の設計バグ見つけた。。レアケースではあるけど。。
こんにちわ、COMFFEREDってahahaFxさんの会社だったんですね。
返信削除ブートストラップ法ツールを試してみたのですがp値だけが0.000000となってしまいます。
データ元や入力値等いろいろ変えてみましたが結果は変わらずでした。
時間があれば見ていただけませんでしょうか。
ちなみにモンテカルロ法のツールも使ってみました。
簡単だし、自分で計算するよりはるかに速くてびっくりしました!
こんな便利なソフトを作っていただきありがとうございます。
田中清さん
返信削除ブログ、拝見させていただいてます♪
> こんにちわ、COMFFEREDってahahaFxさんの会社だったんですね。
法人ではくて、自営業なんですけどね(^^ゞ
> ブートストラップ法ツールを試してみたのですがp値だけが0.000000となってしまいます。
> データ元や入力値等いろいろ変えてみましたが結果は変わらずでした。
> 時間があれば見ていただけませんでしょうか。
新しいデータで動かしてみたのですが、再現しなかったので、差し支えなければ、データ送っていただけないでしょうか? メアドは後ほどTwitterのDMでお送りします。
モンテカルロ法のツール、使っていただいて、とても嬉しいです(*^。^*)