ラベル A1.FXトレーディング・プラン時代 の投稿を表示しています。 すべての投稿を表示
ラベル A1.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



ではでは~


2014/02/20

ポートフォリオのリスク配分(資金管理/レバレッジスペースモデル)



以前のブログで、ラルフ・ビンスの資金管理大全という書籍を読み始めた話しを書きました。  今回は、無事読み終わった(笑)ので、その中で紹介されていた、ポートフォリオのピークパフォーマンスを得られる、リスク配分・リスク量の求め方について、書いてみたいと思います。

今回、ポートフォリオ単位の「オプティマルf(※)」を求める事で、「自分がとってるリスク量がオプティマルfと比べてどの位置にいるのか」を把握しつつ、実際に取るリスク量を決める為の、指針・基準を把握できるのだと思います。 

※ 「オプティマルf」 : 複利運用でピークパフォーマンスを得られる初期リスク量。 複利運用の場合、リスク量を増やしていくと、あるポイントまではリターンも増加していくが、それ以降はリターンが減少していく。



1.「現代ポートフォリオ理論」との関係



ラルフ・ビンスの資金管理大全には、教科書に出てきそうな現代ポートフォリオ理論」(MPT)も出てきます。 しかし、それでは欠陥があるとし、より良い方法を考えた、というスタンスです。 (MPTと複利・オプティマルfとの統合についても詳細に書かれていますが)


2.「現代ポートフォリオ理論」のデメリット


現代ポートフォリオ理論(MPT)のデメリットとしては、相関係数に依存しているが、実際の市場は、肝心なときに、市場間の相関係数が高くなる傾向がある (つまり、肝心なときに相関係数がアテにならない)という点を上げています。

そこでラルフ・ビンスの資金管理大全」が提唱している「新しい枠組み(レバレッジスペースモデル)」では、「相関係数」の代わりに、「2つのシナリオビン分割された実際の分布。 トレード結果の様なイメージ)が同時に発生する確率」を使う、というアイデアです。
# 正直、一瞬「相関係数と何が違うんだ」と思いました(笑)


「新しい枠組み(レバレッジスペースモデル)」のもう一つのメリットとしては、「いかなる分布にも対応できる」という点も挙げられていました。

3.新しい枠組み(レバレッジスペースモデル)


さて、その「新しい枠組み」での、ポートフォリオのリスク配分を求める方法について見ていきたいと思います。 複利運用が前提でピークパフォーマンスが得られる、リスク配分・リスク量が求まります。 

大雑把に言うと、資産(≒幾何平均リターン)を最大にする、銘柄単位のf値(初期リスク)の組み合わせを、最適化して選ぶ、という事になります。

たとえば、2銘柄の場合、以下のグラフでZ軸が一番大きくなる(高くなる)、コイン1のf値と、コイン2のf値をの組み合わせを探します。




4.最大化する目的関数


じゃぁ、任意のf値(初期リスク)の組み合わせを決めたとして、「何を最大化」するのか、という目的関数の計算式をイメージしたのが、以下の図です。  




最大化するのは「リターンの幾何平均」です。 実際の計算式は汎用的に考えられていて、とても難しい(笑)ので割愛します。  上の図は、その計算式を当てはめる、一つのアプローチだと思ってください。

この図は、3銘柄から構成されるポートフォリオを、任意のf値(初期リスク)の組み合わせで、3日間運用した場合の計算例です。  最終損益を計算するには、日単位に各銘柄の損益を足し算し、求まった日単位収益を(複利運用なので)掛け算して求めます。 計算結果の112.32%は、当初資金が3日後に1.1232倍になった、という意味です。

日単位で一旦足し算するゆえんは、同時に複数銘柄をトレードする場合、発注時にロット数が決まるので、銘柄の収益を全て掛け算した収益にならない、というイメージです。 

計算例


上図では、3銘柄の合計を日単位で求めると、1日目はゼロ%、2日目は4%、3日目は8%で、それぞれに100%を足してから、全てを掛け算する事で、112.32%という結果が求まります。

書籍の計算式では、「幾何平均リターン」を最大化する事になっていて、同時確率という考え方なので、厳密には、日単位で1/3日乗してから、掛け算するのがが正しい(結果的に104%^(1/3日)と同じ)のですが、最適化する上では一緒だと思うので、割愛しました。

ちなみに今回、「日単位」で説明しましたが、実際は、日単位である必要はなく、統一されていれば、任意の期間でOKです。


5.銘柄単位・日単位の収益を計算


先に全体イメージを説明したかったので、飛ばしてきましたが、上図中の銘柄・日単位の収益の計算方法です(銘柄A1日目の「3%」の計算方法)。



<計算式>

銘柄・日単位収益 = f値 × (ある1トレードの)損益額 ÷ ある銘柄の全テスト(※)結果で最大の1トレードでの損失額(絶対値)

※ 単利でのトレード結果損益額の一覧。 パーセントベースであれば、複利計算のテスト結果でもOKと思います。


任意のf値を決めた場合、単利での全テスト結果うち、最大の損失となったトレードの損失額(これをBLと呼ぶ)を求めます。

全テスト結果の各トレードの損益を、前述のBLの絶対値で割り算し、その結果にf値を掛けます。
つまり、1トレードの最大損失が、資産に占める割合がf値(初期リスク)になる様、正規化するイメージです。


書籍では、トレード結果を使うのは一つの例として紹介されていますが、それは、この「新しい枠組み(レバレッジスペースモデル)」の使い方の一例に過ぎません。  新しい枠組みでは、もっと同一期間内に起きる、もっと抽象的な事象を定義し、それぞれの事象の同時発生確率を決めて計算する様な当てはめ方もできます。


6.適切な配分の最適化


さて、任意のf値の組み合わせの元で、最大化したい「最終資産」(厳密には幾何平均リターン)の計算方法まで説明したので、次はどうやってf値の組み合わせを探すのか、という話しです。

書籍で紹介されている方法は、「遺伝的アルゴリズム」を使って、全ての組み合わせから、ピークパフォーマンス(つまり、資産が最大≒幾何平均リターン最大)になる、f値の組み合わせを探す方法です(笑)

f値は、ゼロ~1の任意の値なので、借りに0.1%刻みにした場合は、1000通りあります。
これを銘柄数乗した数の組み合わせがあるので、借りに4銘柄であっても、1000^4通りの組み合わせから見つける必要があります。
# 私の場合、今の所28銘柄からの選択なので、1000^28通りになるので、全部精査するのは無理です・・・orz


要は、全精査するのは現実的じゃないので、「遺伝的アルゴリズム」で、効率的に最適化をするのがいいんじゃない?って事です(笑)


7.実際にやってみると


実際に12年分データを述べ28銘柄でやってみると、「遺伝的アルゴリズム」を使っても、収束するのに数時間かかります。 以下は、最適化結果をパフォーマンス分析した結果です。





最適化結果を見てみると、年率+101%の収益ですが、最大ドローダウンが95%という(笑)

実際に運用するには、リスク量が大きすぎると思うので、ラルフ・ビンスの資金管理大全」では、リスク量を低減させる方法(希薄化)について書かれているのだと思います。 実は、この「希薄化」の部分も面白く、大切だと感じました。 

ちなみに、この「オプティマルf」よりリスク量を減らしても、リターンが増える事はありません。  一見、あたりまえの様ですが、実は結構重要なポイントだと思います。

つまり、「オプティマルf」よりもリスク量を減らす事は、自分が定義したリスクを許容できる様にするためであって、リターンを増やすためではない、という事なのだと思います。 


数学は得意ではないのに、難解な計算式多数掲載の書籍を四苦八苦しながら読み解いた結果なので、勘違いがあるとは思います。 ご指摘いただければ幸いです♪



ではでは~


(2014/2/25追記)
この最適化・集計をする、「無料ソフトウェア・ダウンロード」を始めました → 「Test Analyzer




2013/09/10

ロット数を決める方法(資金管理)について



さて前回、予備のトレード用PCがWinXPなのでAWSに移行しようとしている話を書きました。 今回はうって変わって、「資金管理」の話です。


最近のライブ口座のパフォーマンスを見ていると、「もうちょっとリスク量を増やしてもいいのではないか?」 という素朴な疑問を感じてきました。

そこで、ずーっと前に挫折した、ラルフ・ビンスの資金管理大全」という書籍を、最近また読み始めました。 でも、まだ読み終わっていません(笑)

読み始めると、新たな発見があるもので、「お~!!」っと思った事を書いてみます。
え? 気づいてなかったの?という突っ込みはご遠慮ください(笑)


(縦軸が0.6から始まってるので注意してくださいね~)



グラフは、初期投資資金を1としたときの、「口座残高の推移」です。  プラス収支で、とても綺麗でウハウハな感じですが、残念ながら、乱数を使って、プラスの結果になる様に生成した、擬似的なトレード結果のデータです(^_^;)  ちなみに、固定比率のサイジングで、複利効果を狙っている前提です。


それはそれとして、もうちょっとリスクを取ったら、もっと最終利益一番右側の時点の残高が良くなると思いませんでしょうか?


そこで、謎の数値f=0.02を5倍にする事で、リスク量を5倍にしてみたのが、以下のグラフです。




一番右側を見れば解るとおり、最終利益が良くなりました(*^^)v


じゃあ、鋼の心臓を持っているとして、もっとリスクを取れば、最終利益ももっと良くなるじゃないか?  

えーい、さらに倍!






残念ながら、最終損益がマイナスになってしまいました・・・orz



同じデータを元にしているにも係わらず、全体的なリスク量を増やしただけで、今までプラス収支だったものが、マイナス収支になってしまっています。



このリスク量(f)の値をいろいろ変えてみて、最終利益がどの様に移り変わっていくかをグラフ化してみました。






リスク量を増やしていけば、ある一定量までは最終損益が増えていくのですが、0.1を頂点に、その後は最終損益は下がっていってます。 


この、一番「最終損益」が高くなるポイントを「オプティマルf」と読ぶそうです。   これ以上リスク量を増やしても意味が無いですよね~


当然、元のデータが変われば、オプティマルfの値も変わってきます。   なので実際は、この「オプティマルfの値」も、時間と共にきっと変わっていくと思うので、オーバ・リスクにならない様に、安全を見て、少し左側の「f」を使ってサイジングをするのがいいんだと思います。




ちなみに、シミュレーションに関連した計算式にも目から鱗が落ちて。。。。



これらのシミュレーションをする時は、1回のトレードで、口座残高が何%上下するかを求めます。  そして決めた数字を”足すのではなく”1を足して「掛け算」していく必要があります。
複利効果を狙った、定率サイジングなので


つまり、N回トレードして、X%資金が増加したとすると、

1トレード当りの幾何平均1トレードで資金が何倍になるか)は、



幾何平均={1+(X÷100)}^(1/N)



で求まります。  つまり、トレード回数が同じであれば、この幾何平均が大きい方が収益性が高いので、「幾何平均を最大化」する工夫をする事になります。



さて、この「幾何平均」は、以下の計算式で近似的に求まるそうです。




幾何平均=(算術平均^2-標準偏差^2)^(1/2)




つまり「算術平均値」が同じ場合、「標準偏差」が小さい方が、収益性が高い、という事ですね。
なので、リスク量を増やしていくと、標準偏差も大きくなるので、幾何平均(≒収益性)が低下するポイントが出てくる、という事なのだと思います。





今は、メンタル的に許容できる最大ドローダウン率という、かなり主観的な値を元に、ロット数を計算しているので、このオプティマルfの考え方を使って、もっと論理的にトータルリスク量を求めてみようかと思った次第でした。


ちなみに、「掛け算」の繰り返しで最終損益を計算するので、トレード・データの順序を入れ替えても、最終的な損益は変わらない、という小学生レベルの事に目から鱗を落としていたのはナイショです。




2012/01/08

初本番に向けて - トレーディング・プラン見直しと本番開始!!



さて前回は、MT4用EAの全てのテストを完了し、共通部品のバグ修正版を正式リリースしたところまででした。今回は、EA運用に当たって一度作成したトレーディング・プランその後の検討内容を反映した内容について書いてみたいと思います。

さて、そもそも前回のトレーディング・プランの内容は以下の記事。

そしてその後、以下の記事をきっかけに、プランの見直しを始めた。

【プラン見直しの背景整理】
------------------

内容は、今までの「最適化の目的関数/期間、WF期間を決める手順」に今一歩納得してなかったのを、Phaiさんが考案した「再現性指数」をヒントに手順を再検討した内容。

そしてその後、以下のブログ記事内で検討し、プラン修正に必要なネタが揃った。

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

そして、修正が必要な箇所を整理すると以下。

【プラン要修正箇所】
------------------
1.トレード対象通貨ペア
2.【売買ルール(旧SmoothMADI)】の「5.サイジング」
3.【運用計画】/「1.定期的な最適化」
4.【運用計画】/「2.監視項目」/「●システム停止検討基準」
5.上記運用方法見直しに伴って変化した各種推定値やシステム停止基準の各種値と、
  テスト結果
------------------

【トレード対象通貨ペア】
----------------------------
過去8年の「多市場多期間最適化」の結果を元に2年毎に、平均利益上位6通貨ペアを選ぶ。
上位6通貨ペアの過去8年間での利益テスト数率が40%を下回るか、平均利益がマイナスになれば、システムを停止。検証の結果、2012年末までは以下の通貨ペア。
AUDUSD、EURUSD、GBPJPY、GBPUSD、USDCHF、USDJPY
----------------------------

【売買ルール(旧SmoothMADI)
----------------------------
1.発注
  独自インジケータのSmoothMADIを利用。
  独自長期MAが上向きで、短期独自MAが長期独自MAを上回っている状態になればロング
  独自長期MAが下向きで、短期独自MAが長期独自MAを下回っている状態になればショート
2.注文方法
  逆指値で、前バーの高値/安値
3.トレーリング
  (ロングポジションの場合。ショートポジションの場合は逆)
  以下の二つの価格のうち、よりタイトな方
  ・最初の独自長期MAとSmoothMABandの-2σの価格差を、独自長期MAから引いた価格
  ・SmoothMABandの-2σ
4.自発的手仕舞い
  ドテン
5.サイジング
  資金残高の0.66%÷初期リスク(最低0.01ロット)
  最大ロット数:証拠金残のうち、ストップアウトレベルに10%のマージンをとった後の
         証拠金の30%
6.その他
  使用時間足:4H足
----------------------------

【推定年率/最大ドローダウン】
----------------------------
推定年率         :0.99%~4.08%(実測値ピーク:16%)
推定最大ドローダウン :6.3%~19.1%
----------------------------

【開始計画】
----------------------------
----------------------------

【運用計画】
----------------------------
1.定期的な最適化
  最適化対象:短期独自MA(8~17、ステップ:1)
        長期独自MA(24~51、ステップ:3)
  最適化目的関数:超悲観的PF

  2年毎に直近6年分のデータを元に、最適化間隔と最適化期間を決める。
  ●求め方
   最適化スキャン結果から以下の手順で求める
   1.最適化期間の目的関数の結果とWF期間純益の「偏差値」を求める
   2.R2乗に符号をつける
   3.符号付R2乗値のシャープレシオを求める
   4.「符号付R2乗値シャープレシオ」のスキャン結果から堅牢ものを選ぶ
     正数率が高い目的関数を上位2~3つ選び、その中で正数の平均と全体平均が高い
     期間を選ぶ。
   5.最適期間は24ヶ月~36ヶ月を6ヶ月単位、WF期間は4ヶ月~12ヶ月を
     4ヶ月単位から決める。
  ●2012年末までの最適化期間(2011年1月基点)
   AUDUSD → 最適化間隔:12ヶ月、最適化期間:30ヶ月
   EURUSD → 最適化間隔:12ヶ月、最適化期間:36ヶ月
   GBPJPY → 最適化間隔: 8ヶ月、最適化期間:24ヶ月
   GBPUSD → 最適化間隔:12ヶ月、最適化期間:36ヶ月
   USDCHF → 最適化間隔:12ヶ月、最適化期間:24ヶ月
   USDJPY → 最適化間隔:12ヶ月、最適化期間:30ヶ月
2.監視項目
  ●システム停止基準
   ・13連敗
   ・最大ドローダウン:「20%」超過
   ・月間損益:「-4.5%」を下回った場合
   ・年間損益:「-9%」を下回った場合
   ・年間最大ドローダウンが:「11%」を超過した場合
   ・年間勝率が:「33%」を下回った場合
   ・3年間連敗した場合
  ●システム停止検討基準
   ・過去50トレードのProfitFactorが0.15を下回った場合
   ・「95%信頼区間」下限値が上昇傾向である事
  ●システム異常監視
   ・証拠金不足、原因不明なエラー、バグ検出、MT4ダウン、サーバ異常、リ
    トライアウト時に、ログ出力及びメール送信にて通知。
   ・NW異常はmyfxbookもしくはUltraVNC停止及び、LiveMessengerで
    MT4用アカウントオフライン状態にて検出(携帯からできる)。
    バグ検出時は新規発注停止。
  ●災害発生時
   ライフラインに大きな影響を及ぼす様な災害の場合は、手動で全て手仕舞いし、
   起動中MT4を停止させる。
3.その他運用計画
  ・パラメータ変更時 ・・・ 新規注文から適用対象
   新規発注時にログから新パラメータが適用されているか確認する。※新規追加
  ・EA入れ替え時(バグ対応等)
   日中帯の家にいる時間帯に実施。10分程度監視し、誤発注が発生していないか
   確認する。 ※新規追加
  ・マーケットが閉じている時はPC定期メンテナンス(WindowsUpdate等)
   具体的には、土曜日午後に実施しPCを停止。日曜日晩にPC起動。
   ※新規追加
  ・インタネット長時間障害/通信機器故障が発生した場合は、UQ-WiMAXでの通信に
   切り替える。
  ・PCが故障した場合は、予備用PCで運用を再開する。
----------------------------

【停止計画】
----------------------------
上記各種監視の結果、システム停止と判断された場合、システム停止時は、通常ルールにて手仕舞うまで待つ。(但し新規発注はしない)
ポジションが全て無くなった際、MT4の停止を行う。
----------------------------

【テスト結果(ウォークフォワード期間)】
----------------------------
●概略
 

●年単位結果

●月単位詳細
----------------------------

記事にしていない点で簡略化や見直しもあるけど、上記の通りに決定~
デモ口座で運用してると、以前のプランだと監視項目が多すぎて実運用に耐えれなさそうなのが解った。

実はペンディングで残っていた、「信託保全」についてFX業者に詳細確認済み。
FX口座も開設し、10%の資金を振り込みも完了している。
myfxbookにライブ口座用の設定も完了している。
スマホも購入してスマホ経由での障害対応/運用試験も完了している。
UQ-WiMAXの加入と設定、ISP障害時の自動NW切替も設定してテスト済み。
#テスト期間中、本当にISP緊急メンテでNW自動切換えが発生した!(^^)!
不要なデモ環境は停止させた。
計画通りに最適化を行い、本番用MT4に新パラメータ設定完了。




そして、MT4を起動!!




2012/1/5 19:16

本番開始!!!!!




ついにシストレ開始したんや~

嬉しい!!
オチ無いけど、今回も許して~


そして、無事シストレ本番開始して「FXシステムトレード初心者奮闘記」は、総合テスト中のハプニングや、環境構築、MT4について新たにわかった事等に続くのでした。
#実は予備機の最適化パラメータ設定忘れてて、1/7に慌てて設定。2日間程度片肺運転でした^_^;
#今まで
Twitterやブログコメントくださった方々のアドバイスや応援で無事ここまでたどり着く事ができ、感謝しております。

2011/05/07

FXトレーディング・プラン時代 - プランを1つにまとめる



さて前回は、プランに組み込むべき要素を精査/検討している様子を書きました。今回は今まで検討してきたことを1つにまとめた計画書となる内容を書いて、FXトレーディング・プラン時代は終わりにしようと思います。

さっそく、計画を列挙。

【トレード対象通貨ペア】
----------------------------
AUDUSD、GBPJPY、USDCHF、USDJPY
----------------------------

【売買ルール(旧SmoothMADI)
----------------------------
1.発注
  独自インジケータのSmoothMADIを利用。
  独自長期MAが上向きで、短期独自MAが長期独自MAを上回っている状態になればロング
  独自長期MAが下向きで、短期独自MAが長期独自MAを下回っている状態になればショート
2.注文方法
  逆指値で、前バーの高値/安値
3.トレーリング
  (ロングポジションの場合。ショートポジションの場合は逆)
  以下の二つの価格のうち、よりタイトな方
  ・最初の独自長期MAとSmoothMABandの-2σの価格差を、独自長期MAから引いた価格
  ・SmoothMABandの-2σ
4.自発的手仕舞い
  ドテン
5.サイジング
  資金残高のN%÷初期リスク(最低0.01ロット)
  N:AUDUSD/USDCHF=0.9%、GBPJPY/USDJPY=1.1%
  最大ロット数:証拠金残のうち、ストップアウトレベルに10%のマージンをとった後の
          証拠金の30%
6.その他
  使用時間足:4H足
----------------------------

【推定年率/最大ドローダウン】
----------------------------
推定年率         :1.63%~4.88%(実測値ピーク:17%)
推定最大ドローダウン :9.7%~19.5%
----------------------------

【開始計画】
----------------------------
※以前の記事から若干の修正あり
----------------------------

【運用計画】
----------------------------
1.定期的な最適化
  最適化対象:短期独自MA(8~17、ステップ:1)
        長期独自MA(24~51、ステップ:3)
  最適化目的関数:悲観的PF(-最大利益)
  AUDUSD → 最適化間隔:8ヶ月、最適化期間:48ヶ月
  GBPJPY → 最適化間隔:12ヶ月、最適化期間:64ヶ月/52ヶ月の平均
  USDCHF → 最適化間隔:12ヶ月、最適化期間:32ヶ月
  USDJPY → 最適化間隔:12ヶ月、最適化期間:32ヶ月
2.監視項目
  ●システム停止基準
   ・15連敗
   ・最大ドローダウン:「20%」超過
   ・月間損益:「-4%」を下回った場合 ★ 2011/7/3 13:34誤りを訂正 ★
   ・年間損益:「-8%」を下回った場合
   ・年間最大ドローダウンが:「10%」を超過した場合
   ・年間勝率が:「30%」を下回った場合
   ・t-検定:過去50トレード95%危険率t-検定P値が5%を下回った場合
   ・3年間連敗した場合
  ●システム停止検討基準
   ・過去50トレードのProfitFactorが0.4を下回った場合
   ・「95%信頼区間」下限値が上昇傾向で、0に近づいていっている事
   ・ForexTester2と実トレードの相関関係
    ・過去50トレードと日単位累積損益(%)の相関係数が0.7を下回った場合
    ・相関係数が0.7以上で、ForexTester2で95%信頼区間P値が5%を
     下回った場合
   ・ポートフォリオで、GBPJPY/USDJPYとAUDUSD/USDCHFの月間損益の過去2年分
    相関係数相関係数が0.4を上回った場合。
  ●システム異常監視
   ・証拠金不足、原因不明なエラー、バグ検出、MT4ダウン、サーバ異常、リ
    トライアウト時に、ログ出力及びメール送信にて通知。
   ・NW異常はUltraVNC停止及び、LiveMessengerでMT4用アカウントオフライン状態
    にて検出(携帯からできる)。バグ検出時は新規発注停止。
  ●災害発生時
   ライフラインに大きな影響を及ぼす様な災害の場合は、手動で全て手仕舞いし、
   起動中MT4を停止させる。
3.その他運用計画
  ・パラメータ変更時 ・・・ 新規注文から適用対象
   新規発注時にログから新パラメータが適用されているか確認する。※新規追加
  ・EA入れ替え時(バグ対応等)
   日中帯の家にいる時間帯に実施。10分程度監視し、誤発注が発生していないか
   確認する。 ※新規追加
  ・マーケットが閉じている時はPC定期メンテナンス(WindowsUpdate等)
   具体的には、土曜日午後に実施しPCを停止。日曜日晩にPC起動。
   ※新規追加
  ・インタネット長時間障害/通信機器故障が発生した場合は、UQ-WiMAXでの通信に
   切り替える。
  ・PCが故障した場合は、普段使いのPCで運用を再開する。
   (なので普段使いPCにも本番用のMT4環境を設定しておく必要あり)
----------------------------

【停止計画】
----------------------------
上記各種監視の結果、システム停止と判断された場合、システム停止時は、通常ルールにて手仕舞うまで待つ。(但し新規発注はしない)
ポジションが全て無くなった際、MT4の停止を行う。※一部追加
----------------------------

【テスト結果(ウォークフォワード期間)
----------------------------
●概略

●年単位結果
●月単位詳細

●ウォークフォワード分析結果概略
----------------------------



という事で、トレーディング・プラン工程完了!!
#今まで考えてたことを纏めると結構盛りだくさんになってしまった。。

なんの為に、今まで書いてたことと同じ事を、あらためて書いたかというと、









自分のため
#だって、これさえ読めば、実際運用してる時にどうすればいいかすぐわかるし。。



そして、相変わらずのオチなし状態で「FXシステムトレード初心者奮闘記」の「トレーディング・プラン」工程は完了し、どこにいくんだっけ?? ・・・・そうそう「MT4用EA開発時代」に戻るのでした。
#実はEA開発があんまり進んでない。。でもデモ口座でリトライ成功に満足!しかも、今のところクリティカルなエラーは、操作ミス以外で発生してない!