ラベル 8. FX売買システム・多市場多期間最適化時代 の投稿を表示しています。 すべての投稿を表示
ラベル 8. FX売買システム・多市場多期間最適化時代 の投稿を表示しています。 すべての投稿を表示

2014/06/15

具体的な最適化手法(2) 堅牢なパラメータ値の選択



さて前回は、パラメータ値の最適化やシステム評価(≒パフォーマンス評価)の具体的な計算方法について書きました。  今回は、パラメータ値の最適化で、その評価値を元に、堅牢なパラメータ値を機械的に選ぶ工夫について書いてみたいと思います。

やりたい事自体は、色んなシストレの本で書いてある事と同じなのですが、今回記事の特徴は、機械的に計算するための工夫、といったところです。  前回記事の様に、「これだ!」とスッキリしている訳ではなく、もっと良い方法があるんじゃないか、とも思いながら、最近思いついた最善策、といったところでしょうか。  今はこの方法で、定期的な最適化をしています。


1.やりたい事


最適化の目的関数(年率オプティマルfレシオなど)評価値が最大になる、パラメータ値の組み合わせを見つけたい、という事です。 ただ、単純に評価値が最大になる組み合わせを選ぶのではなく、「堅牢」なパラメータ値の組み合わせを「機械的」に求めたいわけです。

たとえば、単一パラメータ変数と評価値の関係が、以下の様なグラフであった場合、高い値の方がいいのはいいのですが、多少パラメータ値を変更しても、評価値への影響が少ない方の値を選びたいわけです。



もちろん、パラメータの値そのものに意味があって、それを狙った戦略なのであれば、最適化などせず、そのパラメータ値固定でトレードするのがいいと思います。


2.サンプル・データ


これから使う、説明用のサンプル・データの説明です。 パラメータがAとBの2種類あり、パラメータ値の組み合わせと、評価値(年率オプティマルfレシオ)の関係が、以下の表の通りだったとします。 
















図1.サンプルデータ1


色が付いているマス目の値は、評価値で、値が大きい順に、「緑→黄色→赤」という風に色分けされています。 (エクセルで、表を選択状態にして、「条件付き書式」→「カラースケール」で簡単にできます)

この中では、評価値が最大になるのは、パラメータA=12、B=120の評価値174ですが、赤丸がついている、A=22、B=240を、機械的に選びたい、という事です。(多少パラメータ値が前後しても、高い評価値を維持できるので)

ちなみに、わざとパラメータA=12の列、パラメータB=120の行も高い値になる様なデータにしています。


3.選択手順


人が目で見て選ぶ、というやり方も当然ありますし、機械的に選んだら、何か特別なものが選ばれる、という訳でもありません。

ただ、機械的に選べたほうが、曖昧さが無いですし、プログラミングが可能になるので、自動化ができるのが良い、という事です。

具体的な手順は以下の通りです。

手順1.パラメータ毎に、評価値の中央値をとる
例えば、パラメータA=22の列について中央値をとる場合は、パラメータA=22における、パラメータBが100~280の評価値の、中央値をとります。
手順2.パラメータ毎の中央値を、前後のパラメータ値で平均する
例えば、パラメータA=22の中央値は153ですが、前後のパラメータ値については、A=20の場合は150、A=24だと150になり、それら3つの値の平均します。 具体的には、A=22における、平均値は(153+150+150)÷3=151 です。
手順3.「手順2」で求めた平均値が最大のパラメータ値を選ぶ
この場合、パラメータAの各値について実際にやってみると、以下の様になり、パラメータA=22が選ばれます。


図2.パラメータA集計結果


「中央値」だとA=12が最大だったのが、前後の平均値をとる事で、A=22という、期待したとおりのパラメータ値を選ぶ事ができました。

手順4.他のパラメータ変数も同様。 選ばれた値の組み合わせが「最適化結果」
全てのパラメータ変数(この場合はB)にたいして、前述「手順1」~「手順3」を計算し、パラメータ変数毎の最適なパラメータ値を選ぶ。  選ばれたパラメータ値の組み合わせが、機械的に選んだ最適化結果のパラメータ・セットです。
パラメータBについて同様にすると、以下の様になり、B=240が選ばれます。


従って、パラメータA=22、B=240が最適化結果になり、当初選びたかったパラメータ値が選ばれました。
説明しやすい様に、ある程度作為的にデータを作成した事もあって、期待通りの結果になりましたが、単純に最大値を選んだ時との違いを、イメージできましたでしょうか?


 4.簡単な実験


ここまでは、わりと滑らかなサンプル・データを使ってきました。 実際にはノイズも加わると思うので、このサンプル・データの「評価値」に、ノイズを加えたらどうなるか、実験してみました。
■ ノイズの加え方
全評価値に、-2σ~+2σの乱数の値を足します。 擬似的な外れ値として、評価値が最大となっているA=12、B=120の値を、「固定:平均+4σ」と「固定:2倍」にした2パターンで実施しました。
10パターンのノイズを生成し、期待したパラメータ値の組み合わせ(A=12、B=240)周囲1マス以内が選ばれれば、成功とみなしました。  
(つまり、A=20~24かつ、B=220~240であれば成功)

ついでに、4パターンのパラメータ値の選択方法も比較してみました。 表内の数値は、前述の基準で「成功」と判断されたパターン数です。 つまり10パターンのうち、どの程度成功したか、という表です。

以下「④中央値 前後平均」が今回紹介した方法です。




今回の手法だと、ノイズを加えても、ある程度成功している事がわかります。  「②平均 前後平均」も割りといい感じですが、やはり極大な外れ値には弱い、という事かもしれません。 また、「前後平均」は、「平均値」と「中央値」の両方で、効果があった様に見えます。


 5.考察


今回、実験につかったサンプル・データは1種類だけとはいい、まぁ、いい結果じゃないかな、と思います。 すでにこの手法での最適化を行って運用開始していますが、この記事でやった検証はしていなくて、今回初めてでです(笑)

今回の手順のミソは、パラメータ変数毎の集計、「中央値」で集計、前後の値を平均してから評価、の3点です。 前後の値を平均してから評価する手法は、「アルゴリズムトレーディング入門」で紹介されていました。

補足ですが、「平均値」よりも「中央値」を使う事で、外れ値の影響を抑えることができる様です。 これは10個の乱数の値を使って100回中95回、「中央値」を使った方が「平均値」を使った時よりも良い結果になりました。

具体的には、10個の乱数に「平均+3σ」のデータ1つを追加した時、それぞれの値の影響が小さく済んだ、という事で確認しました。   実際、前述「4.簡単な実験」でも、「平均値」を使うよりも「中央値」を使った方が良い結果になっています。


6.さいごに


ここまで3回の記事にわたって、パラメータ値の最適化について書いてきました。 今まで悶々としていた最適化ですが、割と自分的にはスッキリしました。  最大化したい事と配慮したい事を分けて考える事で、スッキリしたのだと思います。

もちろん今後、もっといい方法が見つかると嬉しいですけどね♪ そんな事も期待して、最近「機械学習」の本を読み始めました(笑)

あと、手前味噌ですが、今回の一連の最適化を行う無料ソフトを公開しています。是非、ダウンロードしてみてください。 ご意見いただければ、幸いです。

■ 無料ソフトウェア・ダウンロード → Test Analyzer

このソフトは、「T2OFレシオ(≒年率オプティマルfレシオ)」を目的関数として、今回のパラメータ値選択方法で最適化する、MT4用の無料ソフトです。



ではでは~


【 P.S. 】 ブログ「FXシステムトレード奮闘記」の「過去記事 一覧」を作成しました♪



2014/06/12

具体的な最適化手法(1) 目的関数



(2014/6/25 19:20 計算式修正)
さて前回は、システム評価・最適化をマネージメントに絡めて考察しました。  今回はその考察結果を元に、最適化やシステム評価(≒パフォーマンス評価)の具体的な手法について書いてみます。



1.おさらい


前回、資産の最大化を目指す「目的関数(≒パフォーマンス評価方法)」として、「オプティマルfにおける幾何平均」がよい、と考えましたが、付随して配慮すべき点もありましたので、どういったシステムを良い、と考えるのかを、一旦整理します。


  ■ 目的関数の特性

  1. オプティマルfにおける幾何平均が高いほどよい
  2. 同じ「オプティマルfにおける幾何平均」であれば、オプティマルfは低いほどよい
  3. オプティマルfにおける幾何平均」÷オプティマルfが同じでも、「オプティマルfにおける幾何平均」が高いほどよい
「オプティマルf」については、過去ブログ記事の「ロット数を決める方法(資金管理)について」を参照ください。 この記事での、複利運用で資産を最大化するリスク量(初期リスク%)が、「オプティマルf」です。 (リスク量が一定以上大きくなると、リターンが減少していきます)



2.目的関数の計算式


評価値(年率オプティマルfレシオ) =
 平方根[ { (オプティマルfにおける複利年率+100%)^2-1 } ÷ オプティマルf ]   (式1)
(2014/6/25 計算式修正)

ずばり、これがいいのではないか、と思っています。  例えば、オプティマルfが初期リスク10%で、その時の複利年率が+30%であった場合は、以下の様に計算されます。


   評価値 = 平方根[ {(30%+100%)^2-1} ÷ 10% ]
         = 平方根[ { (0.3+1)^2-1 } ÷ 0.1 ]
         = 平方根[ (1.3^2-1) ÷ 0.1 ] (2014/9/27 修正)
         = 平方根(0.69÷0.1) (2014/9/27 修正)
         = 2.6268 (2014/9/27 修正)


便宜上、この目的関数(パフォーマンス評価指標)を命名したいので、「年率オプティマルfレシオ」(略してAROFレシオ:Annual rate at Optimal-f Ratio、あろっふれしお?
という名前にしてみました(笑)    

最適化の為だけの評価であれば、同一期間のパフォーマンスを比較できればよいので、以下の計算式でも問題ないと思います。 自分が最近見直した最適化作業では、簡便的にこの式を使っています。
#むしろ、下記(式2)が先に思いついて、ブログを書きながら、前述の(式1)に変形させた、といった流れです(笑)


   評価値(T2OFレシオ) = (最終資産倍率^2-1) ÷ オプティマルf   (式2)
   (2014/6/25 計算式修正)

さきほどと同じ条件で、かつ、検証結果が3年分の評価結果だとすると、評価値は以下の様になります。

   評価値 = {( 1.3倍/年^3年 )^2 -1} ÷0.3
         = (2.197^2-1) ÷ 0.3
         = (4.8268-1) ÷ 0.3 
         = 12.756

ついでにこれも、「T2OFレシオ」(TWR^2 at Optimal-f Ratio)と、命名しました(笑)



3.計算式の背景


もし条件が「オプティマルfにおける幾何平均」であれば話は簡単なのですが、冒頭「目的関数の特性」にある、他の2つの条件を表現する必要があります。  単純に考えると、「幾何平均÷オプティマルf」が思いついたのですが、3番目の条件を満たせなくなります。

なので、倍率で表現した「幾何平均」を2乗すれば、条件をクリアできる、と思いついたわけです。 要は、前述の(式2)です。
#幾何平均が「+10%」であれば、1.1を2乗する

そして、(式2)を、もうちょっと意味がありそうな値として年率換算し、平方根をとることで、レベルをあわせ、(式1)に変形しました。 

「じゃあ、2乗じゃなくて、3乗や1.5乗じゃだめなのか?」 という疑問も、当然湧いてくると思うのですが、ダメな理由は何も思いつきません(笑)



4.考察


このパフォーマンス評価方法の欠点は、期待値がマイナスのシステムを評価できない点にあります。  これは、そもそも「オプティマルf」を求める際、期待値がマイナスだと、オプティマルfはゼロ(つまりトレードしない)がベストですので、実質的にオプティマルfが求まらないためです。

あと、「オプティマルf」を求めるのが面倒、という欠点もあります。  エクセルであれば「ソルバー」を使えば、簡単に求まります。  プログラムで求める場合は、「2分探索木」のアルゴリズムを使って、任意に決めた一定レベルの精度にたどり着くまで計算する、という方法があり、私はそうしています。

ちなみに、「オプティマルfなんて、ケリーの公式で簡単に求まるじゃないか」という意見もありそうですが、ラルフ・ビンスの資金管理大全」では、以下の様に、実質的に否定されています。


「 利益が常に同額でないとき、かつ/または、損失が常に同額でないときにはケリーの公式は適用できない。 適用しても正しいオプティマルfの値は得られない。 」 (「ラルフ・ビンスの資金管理大全」より

なので、裏をかえすと、固定値幅でTP/SLを指定して、他に決済ルールが無い場合は、「ケリーの公式」が使えるという事だと思います。



5.最後に


ここまでで、前回ブログ記事でいう「資産を最大化してくれるか?」という観点で評価するための、目的関数の計算方法について書いてきました。  つまり、パラメータ値の最適化時は、この「年率オプティマルfレシオ」(もしくはT2OFレシオ)が最大になるパラメータ値を選ぶ事になります。 

ただし実際には、「堅牢なパラメータ値か?(局所解に陥っていないか?)」という配慮も必要になり、その取組みが、オーバー・フィッティングを避けれるかどうかを左右するのだと思います。

次回は、この方法を具体的に書いてみたいと思います。 たぶん(笑)




ではでは~



2014/06/09

システム評価・最適化とマネージメント



さて、前回は「ポートフォリオのリスク配分」というテーマで、「ラルフ・ビンスの資金管理大全」という書籍で紹介されていた、新たなモデルについて書きました。

今回は、パラメータ(たとえば移動平均線の期間とか)の最適化の目的関数(≒システム評価方法)とマネージメントの関係について書いてみたいと思います。


1.考察のキッカケ


今まで、(移動平均線の計算期間とかの)パラメータ最適化の時の目的関数について、いろいろ試行錯誤をして、幾つかの計算式(例えばシャープレシオとか)の候補の中から、実際にウォークフォワードテストをしてみて上手くいきそうな目的関数を選んで、使っていました。

ただ、なぜその計算式で上手くいくと思うのか、なぜ良いと思うのか、という点で、実は悶々としていて、今一歩確信を持てなかったのも事実です。

しかし、ラルフ・ビンスの資金管理大全」を読んでいると、以下の様な記述をキッカケに、頭の中がスッキリしました。




「 オプティマルfにおける幾何平均が大きいほど、またオプティマルfが小さいほど優れたシステムである 」 (「ラルフ・ビンスの資金管理大全」より)



2.サンプル・データで比較



今まで、資産曲線は滑らかに右肩上がりなのが良い、と考えてきました。 なので、「最適化の目的関数」を検討する際も、この「滑らかさ」と「収益性」のバランスを表現できそうな計算式を、候補に挙げてきました。 ただ、資産曲線の滑らかさを目指す理由は、リスク量を増やすと、それだけリターンも増えるし、増やしやすい、という事なのだと思います。


さて、前述の「オプティマルfにおける幾何平均」を目的関数にするとどうなるのか、という話しです。  私が最初に思ったことは、「一部の偶然で極端なリターンがあったら、過大評価されるんじゃないのか?」 というものでした。

そこで、幾何平均が同じ2つのサンプル・データを使って、比較してみました。  システムAは「1.1と1/1.1のデータが8回に、2が一つで、都合17トレード」、システムBは「(2*1.1)^(1/16)が16トレード分と、1/1.1が1トレード」 です。






2つとも同じ幾何平均ですが、見た目、あきらかに「システムB」の方がいいでしょう(笑)

実際、それぞれのオプティマルf(資産を最大にする初期リスク%)を求めて、資産曲線を作ってみると、雲泥の差が生じるのが解ります。





みた目からして資産曲線が滑らかな「システムB」の方が、リスク量を増やした場合の効果を得やすく、リスク量を高くできた(オプティマルfが高い)結果、幾何平均(≒収益)がとても良くなる、という事だと思います。

つまり、「オプティマルfにおける幾何平均」を評価することは、資産曲線の滑らかさを評価する事にもなる、という事だと思いましたし、これこそが目的関数であるべきだと、今までモヤモヤしていた事が、とてもスッキリしました。


3.目的関数に関する考察1



けっきょく冒頭にも書いた事の繰り返しになってしまうのですが、システムを評価(もしくはパラメータ最適化)するには、どんな目的関数がよいのか? という点に関する考察です。

資産曲線が滑らかで、リスク・リワードが良いシステムを高く評価するのが良い、という事の目的は、資産を最大化する事ができるシステムを識別する、という事だと思うので、結局、資産を最大化させる、「オプティマルfにおける幾何平均が高いほど良い」という観点に帰着するのだと思います。

ただ冒頭で引用紹介したとおり、同じ幾何平均だと、オプティマルfは小さい方がよい、という条件はつくのですが。。  あと、「幾何平均÷オプティマルf」が同じだった場合だと、幾何平均が高い方がいいのだと思います。

なので、システム評価・最適化では、資産の最大化を目指すので、結局、マネージメントと表裏一体なんだなぁ~と思った事が、今回、書きたかった点のひとつです。



4.目的関数に関する考察2



じゃぁ、他のシステム評価方法(≒目的関数)は無意味なのか? という疑問が沸くと思うのですが、私は以下の様に整理してみました。

パラメータ最適化の目的関数(≒システム評価方法)を検討するにあたっては、結局、以下の3つぐらいの観点があって、それらを分けて考える必要があるな、と思いました。


 ■ 目的関数(≒システム評価方法)の観点

  1. 資産を最大化してくれるか?
  2. (自分が気にしている)リスクに対してリワードがよいか?
  3. 堅牢なパラメータ値か?(局所解に陥っていないか?)


つまり、色々な評価方法があるけど、どの観点を評価しているのか? というのを見極める必要があるのだと思います。

そして、上記「1.」の観点については、複利で運用するのであれば、「オプティマルfにおける幾何平均」がベストだと思いました。 
#前述の通り、もう少し配慮すべき事はありますが

上記「2.」は、結局、自分の主観的な好みを定量的に表現してくれるか?という事になるのではないか、と思います。 なので、資産の最大化だけを目指すのであれば、考えなくていいのかもしれません。 要は、主観的な、自分好みの資産曲線の美しさ、という観点です。 

上記「3.」の観点については、パラメータ最適化の際は「1.」に、もう一工夫が必要な観点だと思います。 ただ、それは「オプティマルfにおける幾何平均」が最大になる事を期待しての、目的関数における工夫である方がいいんじゃないかなぁ、って思っています。




いろいろ取り留めの無い事を書きましたが、今の所は「こう考えて整理したらスッキリした~」という事なので、生暖かく見守って頂ければ幸いですm(__)m



ではでは~


2011/11/14

初本番に向けて - 2009年/2010年の検証結果と通貨ペアの選定



さて前回は、問題の被疑箇所第一候補である「ポートフォリオの組み方」について試行錯誤した結果、結局ポートフォリオ対象候補の6通貨ペアを均等にする事したものの、通貨ペアの入れ替え要否の疑問発生と、2009年/2010年の成績が良くないという問題の切り分けが必要という事がわかったところまで書きました。
今回は、問題切り分けのため、2009年/2010年の「多市場多期間検証」/「多市場多期間最適化」の実施結果と、通貨ペア選定を考察している様子を書いてみたいと思います。


さて、まずすることは「多市場多期間検証」の実施。

【多市場多期間検証】
---------------------------
これで2009年~2010年の成績が芳しくない理由が、市場状況によるものかどうかの大枠がわかるはず。以下の検証結果は、2001年~2010年の結果。


これは、パラメータを12/36に固定して検証した結果。
一番下の表の2009年~2010年の結果を見ると、他の期間と比較して、不調な期間だったのがわかる。「合計」しかり、利益が出た通貨ペア数しかり。
#利益出たの、たった4/14通貨ペアだけ。。

2009年/2010年の成績が良くない原因は、市場がルールにとって芳しくない状況だったからと言えそう。
#つまりカーブフィッティングが原因じゃないという事。
---------------------------


いい感じ!


さて次は、「多市場多期間最適化」を実施。。




んん????



EURJPY~GBPUSDの結果が、2003年~2004年と2005年~2006年と全く同じやんけ!!!



ありえへん。。



つまり、以下の記事の該当箇所も誤り。





すみませんm(__)m



ともかく、一旦2001年~2008年の「多市場多期間最適化」の結果から。

【多市場多期間最適化(2001年~2008年)】
---------------------------
以下は、再度データ採取して再集計した結果。



結果を見てみると。

●確認観点
 1.利益テスト数率20%以上、堅牢なシステムは40%以上
   「40%」は割ってしまったものの、「40%」に肉薄
   している状態に変わらず、とりあえず合格といったレベル。
 2.「平均利益がプラス」
   残念ながら、マイナス幅が拡大。。。
   条件クリアしたのは5/14通貨ペアで、前回の6通貨ペアから減ってる(涙)
   #GBPJPYが不合格に。。
---------------------------


本当に堅牢なのか不安が。。


と、ともかく前回予告通り、2009年~2010年の評価を実施してみた。

【多市場多期間最適化】
---------------------------
これで2009年~2010年の成績が悪ければ、トレードルールが市場状況にあってない時期だったと結論付ける。

以下の検証結果は、2001年~2010年の結果。

最初の表の「セグメント5」の数値(※)のとおり、多市場多期間検証」の結果と同じ傾向を示していて、市場がルールにとって芳しくない状況という結果になった。
※「利益テスト数率」と「平均利益」等で顕著に現れている。

なので、2009年~2010年のウォークフォワード分析アウトサンプル評価でパフォーマンスが優れない理由が、カーブフィッティング起因じゃないって事!。




しかし。



2番目の表のUSDCHFの結果に注目。

元々この14通貨ペアからポートフォリオ組み込み対象を6通貨ペアに絞り込みは、2001年~2008年の検証結果を元に、利益テスト率が40%以上で、平均利益がプラスであったのが6通貨ペアだったから。
(前述の通り、実際には5通貨ペアだったけど。。)

しかし2010年までの10年間を評価すると、USDCHFの平均利益はマイナスに。

だとすると、2011年の本番からはUSDCHFは対象から外さないといけない。。
#マイナス組の中では一番いいけど。

前回の記事の通り、直近8年間のデータを元に条件にあう通貨ペアを抽出してみた結果は5通貨ペア。 → AUDUSD、EURUSD、GBPJPY、GBPUSD、USDJPY

ちなみに、直近6年で絞込みをすると、4通貨ペア。 → EURUSD、GBPJPY、GBPUSD、USDJPY

じゃあ、直近4年間で絞込みをすると、7通貨ペア。 → AUDJPY、AUDUSD、EURUSD、GBPJPY,GBPUSD、USDCHF、USDJPY
---------------------------




さてどうしよう。。。



【通貨ペア選定方法の考察】
----------------------------
前回やっと、純粋なアウトサンプルデータを採取できたと思ってたら、どうも違うみたい。
つまり、通貨ペア選定の時点でカーブフィッティングしてる可能性があるかも。

結果的に、2009年~2010年で条件にあう通貨ペアは、以下の3通貨ペア
 → AUDUSD、GBPJPY、USDJPY

ここで思い出したのが、前回のブログ記事で、ポートフォリオの組み込み方を比較検討したところ、同じ最大同時リスク4%を取る前提でも、4通貨ペアの成績よりも、6通貨ペアの方が全般的に成績が良かった点。

なので、同じ6通貨ペア数にするために平均利益がマイナスの内、上位3つを追加で選ぶと。
 → EURUSD、GBPUSD、NZDJPY
 
つまり、上位6通貨選ぶとすると、USDCHFだけがハズレで、正解はNZDJPYで、5勝1敗。



なかなかええんでないの???



なので、やっぱり過去8年の「多市場多期間最適化」の結果を元に2年毎に、上位6通貨ペアを選んでいく。

そして、上位6通貨ペアの過去8年間での利益テスト数率が40%を下回るか、平均利益がマイナスになれば、システムを停止。
そして、2011年からのポートフォリオ組み込み対象は、前回と変わらない結果に。
#AUDUSD /EURUSD/GBPJPY/GBPUSD/USDCHF/USDJPY
----------------------------



さて、2009年~2010年の成績がイマイチだった原因も、ポートフォリオに組み込む通貨ペア選定方法も決まったところで、問題はトレーディング・プランをどうするのかという点。


つまり、想定する年率や最大ドローダウンをどうするのか。


【トレーディング・プラン作成を考察する】
----------------------------
本来であればアウトサンプル評価を元に計算するけど、インサンプルで8年分のデータと2年分が必要。本来であれば、2009年~2010年だけが純粋なアウトサンプル評価結果といえる状態。

ただ、この2009年~2010年は不調の年。

利益が出てるとはいえ、ほぼ横ばいで、偶然の域を出ない収益。
ドローダウンもまた小さい。
#しかも実は本来不合格だったGBPJPYも含めてるし。

今回のルールだと、プランを作成するにはやっぱり2年では少なすぎる。

そして推定年率と最大ドローダウンやシステム停止基準を求めるに当たって、
どういう風にデータを擬似アウトサンプル化データを生成するか考えてみた。

案1.前回の結果をそのまま使う
   どのデータも悲観的に見積もっているので、その中で吸収できるという
   考え方。
 
案2.2009年~2010年で結果的にベストだったポートフォリオとの差分から求める。
   一見もっともらしいけど、得られた調整用の係数の精度は高く無いと思うので、
   結構偶然性に左右される気がする。
 
案3.5/6として考える
   単に全般的にパフォーマンスが5/6に悪化する(約83%)になると
   考える。前述の通り、6通貨ペアを選ぶとき、通貨ペア選択ミスがあるとすると、
   2009年~2010年で、1通貨ペアだけという理由。
   
   考え方はシンプル。
 
案4.「案3」を派生
   過去10年分の2年毎に選んだ通貨ペアの正解率を求めて、「案3.」
   と同じ考え方を適用する。
   
   つまり、アウトサンプルのセグメント以外をインサンプルとして
   ベスト6通貨ペアを選んで、アウトサンプルの正解率を求める。
   
   「案3.」よりサンプルが多くなるので信憑性は少し高まる。
   
   ●セグメント毎の正解率結果
    Seg1:5/6
    Seg2:3/6
    Seg3:3/6
    Seg4:4/6
    Seg5:5/6
   
    正解率 = 20÷30 = 67%
   
案5.上記「案2.」+「案4.」
   多分これが一番信憑性が高いアウトサンプルが得られるはず。
   つまり各アウトサンプルセグメント以外のセグメントを元に通貨ペアを選択する。
   
   うーん。。面倒。。。
   
   
   しかし!!
   
   
   実は、インサンプルの通貨ペアを精査してみたところ、今までとの違いは
   結局Seg2(2003年~2004年)で、AUDUSDの替わりに、
   NZDJPYになるだけ。しかしNZDJPYはSeg1のデータが無い
   ので、選定として適切かどうかが不明。
   #NZDUSDも同様。
   
   結局次点となると、AUDUSDになってしまって、結果論的に、
   全てアウトサンプルで評価したことになってる。
   
   
   結果論とはいえ、よかった~!!
   
●結論
 結局結果論的だけど、「案5.」がベスト。
----------------------------




通貨ペア選定方法も決定したし、

プラン作成ネタも揃った!






そして、ほっとしながら「FXシステムトレード初心者奮闘記」は、プラン作成か、トレードルール変更評価か、MT4用EAの総合評価結果に進むのでした。
#MT4EA動作環境の、擬似ISP障害発生時のスマホによる対応リハーサル完了!!かなり試行錯誤やったぞ。

2011/03/22

FX売買システム多市場多期間最適化時代 - 「旧SmoothMADIシステム」での最適化目的関数



さて前回は、 堅牢性が高かった「旧SmoothMADIシステム 」の最適化効果を検証したところ、「新SmoothMADIシステム 」で堅牢そうだった、最適化目的関数「悲観的PF(-最大利益)」周辺平均だと、最適化効果が出ていなかった事が判明したところまで話しました。
今回は、許しを請いても叶えられず、旧SmoothMADIシステム 」でも最適化用目的関数の比較検証を行った様子を書いてみたいと思います。


許してくれぬか。。


つまりシステム毎に、一番いい目的関数が変わる可能性があるって事ね。。
し、しょうがないからまた最適化用目的関数の検証比較をするしかないなぁ。

そうは言っても効率化したいので、以下の4つの目的関数に絞り込んだ。
このシステムは取引回数が少ないので「(-最大利益)」を除去した目的関数はまず削除。
それと、「新SmoothMADIシステム 」で全くダメだったのも削除。
そして残った最適化用目的関数の一覧。
*各目的関数の計算式はこの記事 

【評価対象の最適化目的関数】
1.悲観的年率(-最大利益)周囲平均
2.悲観的年率(-最大利益)
3.悲観的PF(-最大利益) 周囲平均
  → 前回記事で最適化効果が無かった目的関数。
4.悲観的PF(-最大利益) 


そして、以前と同じ手法 で測定。

【最適化目的関数の検証結果】
ベンチマークは、「多市場多期間検証 」で用いた固定パラメータ(12,36)

*左表は6ヶ月分、右表は2年分

【考察】
---------------------
。。。。。

えーっと、6ヶ月評価で利益が出た通貨ペア数でベンチマークを上回っているのが無いんですけど。。。
2年分の評価では、どれも利益が出た通貨ペア数がベンチマークより下回っている。。

それでも、一番マシなのは、「悲観的PF(-最大利益)」。年率損益平均値/中央値共、ベンチマークを上回っているし、「ウォークフォワード効率」で中央値はベンチマークを上回っている。
---------------------


このシステム、トレード数が少なく、1通貨ペアあたり、2トレード強/月程度。
簡易的な「ウォークフォワード分析 」だとサンプルが少なすぎてよくわからない。。


。。。。。
えーっと、今の段階では何を目的関数にすればいいのか、
はっきり解らないって事でしょうか?


オレは次工程「ウォークフォワード分析 」に行っていいのか?
ということで、目的関数を「悲観的PF(-最大利益)」とした場合の、最適化効果とリスクの考察。

【評価結果(悲観的PF(-最大利益))


【考察】
---------------------
1.最適化効果について
  最適化前:-1.02%
  最適化後:27.77%
  差分   :28.79%

  ガイドラインの15%より十分に大きいので問題なし。
  というか、効果が大きすぎて逆に不安。

2.リスクについて
  以前と同じ様な計算式で最大ドローダウンを元に計算。
  リスク=最大ドローダウン(-24,015)÷(4通貨ペア÷14通貨ペア)
     =6861US$=当初資金(5万US$)の約14%

  20%にも満たないので、十分許容範囲で問題なし。
---------------------

ということで、アルゴリズムトレーディング入門」に沿うと、次工程である「ウォークフォワード分析」に進んでいい事になる。

しかし、疑い深いオレ。一抹の疑問が。
今回は簡易的な方法で、最適化用目的関数を決めたが、本当はどれがベストか不明。


つまり、ウォークフォワード分析 」で、いろんな目的関数を試す必要があるという事。
かといって、本工程である「多市場多期間最適化 」よりも検証時間がかかるのは目に見えてる。

ウォークフォワード分析 」の計画を立てる時は、効率化を相当考慮しないと。
ついに、データベースの本格的な活用に着手せなあかんなぁ。
ということは、SQL を勉強しないと。。

FXを始めてからトレード以外で学んだこと。
英語 → ForexTester2の使い方 → Delphi言語 → Excel → 確率統計をちょこっと。
そして、今回やろうとしているのはデータベースとSQL 







オレは一体どこに向かっているんだ??


今日でついに、FX初トレードから1年たってしまったが、正しい方向に進んでいるんだろうか。

正しいんだよね?ね?
正しいと言ってくれ!!

頼む!!



誰も答えれる訳無いわなぁ。。

そして新たに学ぶべき事が増え、次回の「FXシステムトレード初心者奮闘記」では、ついに次工程である、「ウォークフォワード分析 」に進むのでした。



2011/03/21

FX売買システム多市場多期間最適化時代 - 「旧SmoothMADIシステム」vs「新SmoothMADIシステム」その2



さて前回は、 堅牢性の観点で「新SmoothMADIシステム 」と「旧SmoothMADIシステム 」を比較し、旧SmoothMADIシステム 」の方が堅牢性が高い事が解りました。
今回は、堅牢性が高かった旧SmoothMADIシステム が次工程である「ウォークフォワード分析 」に進めるかどうか確認するために、最適化効果とリスクを評価する様子を書いてみたいと思います。

【評価観点】(以前の記事と重複)
-------------------------
1.通貨ペア全体や過半数のセグメントにわたる「リスク調整済みの平均利益」が
  プラスで、リスクも許容範囲内にあること
2.最適化によって対象通貨ペアの過半数や、過半数の評価期間でパフォーマンスが
  大幅に向上していること。
  要は、そもそも最適化の効果があったかどうか。
3.「年率調整済みリターン」が統計学的に有意な向上があったか
  ガイドラインとして、15%程度。
-------------------------

前回、 ベストだった目的関数である「悲観的PF(-最大利益)」周辺平均を使って最適化。

【評価結果】

そして、観点毎に考察

【上記「1.」の観点】
――――――――――――――――――――――――――――――
観点:通貨ペア全体や過半数のセグメントにわたる「リスク調整済みの平均利益」が
    プラスで、リスクも許容範囲内にあること

   「リスク調整済みの平均利益」の過半数がプラスな点はおっけー。
   リスクを前回と同様の計算をすると。
   リスク=最大ドローダウン(-37,966)×(4通貨ペア÷14通貨ペア)
      =10,847US$=当初資金の22%弱。
   20%台前半で特に問題なし。

   →なので、この観点は問題なし。
------------------------------

【上記「2.」の観点】
------------------------------
観点:最適化によって対象通貨ペアの過半数や、過半数の評価期間でパフォーマンスが
    大幅に向上していること。

   これも特に問題なし。
------------------------------

【上記「3.」の観点】
------------------------------
観点:「年率調整済みリターン」が統計学的に有意な向上があったか
    ガイドラインとして、15%程度。

    最適化前:-1.02%
    最適化後:+6.55%
    差分  :+7.57%

    箸にも棒にもかからない。。。
------------------------------


要は、最適化効果があんまりない

って事なんですが。。。


旧SmoothMADIシステム 」:堅牢性は高いが、最適化効果がない。
新SmoothMADIシステム 」:堅牢性は劣るが、最適化効果がある。



どっちを選べばええんやろ???



ん?
そういや、「新SmoothMADIシステム 」の時、比較した最適化用の目的関数、微妙な差異やったなぁ。。。
という事は、もしかして、また他の目的関数と比較/評価せなあかんのか???






もう許してください。



そして検証追加にショックを受けながら、次回の「FXシステムトレード初心者奮闘記」では、「旧SmoothMADIシステム 」の「多市場多期間最適化 」で最適化目的関数比較に進むのでした。