2011/09/30

初本番に向けて - 最適化の目的関数/期間、WF期間をスキャンしてみた



さて前回は、定期的な最適化に向けたウォークフォワード分析での最適化の目的関数/期間、WF期間の選定方法を再検討してみたところまで書きました。今回は、実際に実施している様子を書いてみたいと思います。

まず、前回の手順を大雑把におさらいすると、以下の手順。

【選定の流れ】
-----------------------------
1.最適化期間の目的関数の結果とWF期間純益の「偏差値」を求める
2.R2乗に符号をつける
3.符号付R2乗値のシャープレシオを求める
4.「符号付R2乗値シャープレシオ」のスキャン結果から堅牢ものを選ぶ
5.ブートストラップ法で「符号付R2乗値」が0以下でない事を確認する
-----------------------------


ただし、


前回のブログ記事コメントの通り、もう一度やり方を見直す予定です。。。

と、ともかく今回は当初の予定に沿って、上記「1.」~「4.」の具体的な計画と実施した結果を書いてみたいと思います。
まず、実施するにあたって具体的な計画(つまり決めないといけない事)を立てて見た。

【実施計画】
-----------------------------
1.目的関数の洗い出し
  今回スキャンするにあたって、対象にした目的関数の一覧。これは以前の記事からの抜粋に、
  ベンチマークとして「純益」を足した感じ。以下をスキャンする対象にした。
  #計算式は、以前の記事を参照
1.純益
2.ProfitFactor
3.悲観的PF
4.悲観的PF(-最大利益)
5.悲観的年率
6.悲観的年率(-最大利益)
7.超悲観的PF
これに、それぞれ周囲平均(最適化パラメータの周囲の目的関数計算結果を平均した値)
を追加したので、都合14パターン。
2.WF期間のスキャン対象
  12ヶ月、8ヶ月、4ヶ月の3種類。
  決め方は、最低3種類用意したかったのと、最大でも1年かなぁって感覚。
  そして、各値の間隔を均一にしたかったってレベル。
3.最適化期間のスキャン対象
  24ヶ月(2年)~60ヶ月(5年)を6ヶ月単位で。
  決め方は、10年分のデータで検証するので、半分の5年以内にしないと
  ウォークフォワード期間で未検証になる空白期間が出来てしまうのと、
  今回の売買ルールだと、売買回数が1年で30回に満たない回数なので、
  短すぎるから、2年以上にした。
4.対象通貨ペア
  AUDUSD、EURUSD、GBPJPY、GBPUSD、USDCHF、
  USDJPYの6通貨ペア。
  選定基準は、「多市場多期間最適化検証」でギリギリ合格になった通貨ペア。
  つまり、今まで「ウォークフォワード分析」で対象にしていた通貨ペアと同じ。
-----------------------------

このウォークフォワード分析の計算、データベース上にプログラムを組んで、結果をエクセルに取り込んでさらに集計するという流れ。データベースで、R2乗を求めるのがこれまた面倒。。。

でもやらない訳にはいかないので、プログラム作りましたよ。。。
#誰か、SQL-Serverのストアドとテーブル定義等一式を効率的に人に渡す方法知らないでしょうか?
 DBバックアップをそのまま渡すと、個人情報(PCアカウント名とかフォルダ名とか)が
 入っている気がするので避けたい。。 さりとて大量にあるストアドを全部個別ファイルに
 出力するのも、入れる側にとって煩雑過ぎて無理がある。。


まずは、前述の【選定の流れ】内の「1.」~「3.」を実施した結果の抜粋。

【スキャン結果の一覧】
-----------------------------
以下は、USDJPYの結果の抜粋。本当は1通貨ペアで300行弱ある。
#14目的関数×WF期間3種×最適化期間7種

●項目説明
 WfSpan:WF期間(月数)
 OptSpan:最適化期間(月数)
 ScoreType:目的関数毎に割り付けた番号
 R2SingedAvg:符号付R2乗の平均値
 R2SignedStdDevP:符号付R2乗の標準偏差
 R2SignedSharpRatio:符号付R2乗シャープレシオ(「R2SingedAvg」÷「R2SignedStdDevP」)

これを他の5通貨ペアでも同様に実施。
-----------------------------

次に、明らかに有効(もしくはダメ)な目的関数があるかどうかを見るために、
目的関数毎に平均を出してみた。

【最適化目的関数別に集計結果】
-----------------------------
集計項目は、「符号付R2乗平均値」「符号付R2乗の標準偏差」「符号付R2乗シャープレシオ」を、全通貨ペア、全期間組合せでそれぞれ平均した値。

●項目説明
 行ラベル:目的関数で、前述の「1.目的関数の洗い出し」で付与した番号。
      11番以降は、それぞれの周囲平均

「符号付R2乗シャープレシオ」を見る限り、「悲観的PF(-最大利益)周囲平均」が唯一の正数だけど、他と比べて劇的にいいかというとそういうわけでもなさそう。逆に、あんまり良くないのは、「悲観的年率」とその派生系。意外なのは、ベンチマークとした「純益」がそれほど悪くない点。






だから何やねん??




い、いや、つまり。。。。
「これが一番いい!」という目的関数は無いという、漠然とした結論。。。
-----------------------------

今度は、全体像を把握する為に通貨ペア毎各項目のベストな値を精査してみた。

【通貨ペア毎のベストな値】
-----------------------------
それぞれの項目毎にベストな組合せでの値を、通貨ペア単位で一覧化してみた。
「符号付R2乗平均」は0.3とかあるかなと思ったけど、結構低い。。。。 
通貨ペア単位の「符号付R2乗シャープレシオ」を見ると、AUDUSDとGBPUSDが他と比較して低い値。つまり、今回のトレードルールで言うと、「市場変化への追従性」が低いって事かな??

-----------------------------

さて次は、前述の手順「4.『符号付R2乗値シャープレシオのスキャン結果から堅牢ものを選ぶ」を実際にやってみたところ。

【「符号付R2乗値シャープレシオ」のスキャン結果から堅牢ものを選ぶ】
----------------------------------
一例として、景気づけに成績がよさそうな「USDJPY」を詳細に集計してみた。

●項目説明
 正数率:スキャン結果のうち、「符号付R2乗値シャープレシオ」が正数になった比率(%)
 正数平均:スキャン結果のうち、「符号付R2乗値シャープレシオ」が正数になった値の
       「符号付R2乗値シャープレシオ」の平均
 全体平均:スキャン結果全体での「符号付R2乗値シャープレシオ」平均

ここから堅牢そうな最適化目的関数と期間を選ぶんだけど、ここはわりと裁量的。
表の右側のマークは、●が決定したもの。○は候補にしたもの。

選ぶ時の流れは、まず「正数率」で上位2位~3位を選んでその中から、「正数平均」と「全体平均」が高いものを選んだ。

こうやって選んだ結果、USDJPYの場合は、以下の様に。

最適化目的関数:悲観的PF
WF期間:12ヶ月
最適化期間:24ヶ月

そして、選んだセットで、セグメント毎の「符号付R2乗」は以下の表。

 ※「SlopeA」は近似回帰線の傾き、「Correl」は相関係数。

なんか、「符号付R2乗」≒「再現性指数」を見るとイマイチな。。。
というか、定期的な最適化による「市場変化への追従」
は有効なの??
----------------------------------
同じ様な段取りで他の通貨ペアでも実施して、一覧化したのが以下の表。

●項目説明
 ・表タイトルのR2は「符号付R2乗値」の事
 ・「最大ほにゃらら」は、各項目のベストな値。
 ・「R2シャープレシオ最大値比率」は「R2シャープレシオ」の最大値に対して、今回選んだ組合せの比率。
  
この表で見ると、明らかにAUDUSDとGBPUSDの成績が悪い。後、「R2シャープレシオ最大値比率」で見ても極端に比率が低い。この「R2シャープレシオ最大値比率」が低いという事は、スキャンした結果のばらつきの多さを現している様な気がする。 

●所感
 目的関数は結構ばらばらになったのが印象的だけど、PFとその派生系がいい感じ。
 
●なぜR2シャープレシオがベストな組合せを使わないのか
 今回の主旨は、堅牢な組合せをもっと論理的に求める事であって、テストで最良の結果を
 求める事じゃないから。もしベストな組合せを選ぶと、外れ値になってしまう可能性が
 高くなる様な気がしたから。
------------------------------------

今までは、スキャンした数が少ないものの、最良の結果を選んでいたのでカーブフィッティングしていた可能性が高い。しかも、1回の最適化で評価するパラメータセットは1つだけ。
つまり、評価データが少ないので、将来有効かどうかに非常に疑問が残っていた。

今回の取り組みでは、1回のスキャンのパラメータセット全て(今回は100セット)を総合的に
評価してるし、目的関数/WF期間/最適化期間の組合せの外れ値を除外できる様な工夫をした









つもりです。








そして、どんなパフォーマンスになるのか気になりながら「FXシステムトレード初心者奮闘記」は、当初予定に沿って「ブートストラップ法による検証」に続くのでした。
#スマホによるリモートアクセス、今のところ特に問題なし!

0 件のコメント:

コメントを投稿