忍者ブログ
最新記事
カテゴリー
ブログ内検索
カスタム検索
TradersShop検索

リンク
プロフィール
HN:
さとしぃ
性別:
男性
趣味:
ゲーム、読書、インターネット

Mail:forexsystecpractice☆gmail.com
☆→@

自己紹介:


06/12/04 立ち上げ。夢のためにFXを06年3月からやっております。

08/05/11 システムトレードの勉強開始。ソフトはMT4を使用。

08/08/06 FXDDにて自動売買を1000ドルの資金で開始。

08/10/09 3000ドルからまさかの大転落。100年に1度の金融危機で生き残ったシステムはたったの三つ。

08/12/09 3000ドルの資金を再投入。 徹底的に本を読み続けています。

09/03/22 7700ドル達成。

09/08/14 1000ドル割れ。

09/12/17 3500ドル復帰。

10/04/09 修行中

14/11/21 パワーアップして再挑戦



アーカイブ
カウンター
RSS
<<   2017   08   >>
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31 
13 June 2012            見せかけの回帰  |  検証  |  C:0  |


こんな感じで、同じ構造でトレンドを持つランダムレートを2列ずつ生成しまくる。

片方を説明変数、もう片方を被説明変数として、決定係数を求める。

これを100回計測してみた。
こうなった。
平均 0.223446
最大 0.692937
最小 0.000231

偶然にも、大きな決定係数が観測されることがあり得る。

対して、トレンドを持たないランダムレートの場合は、
(こういう2系列×100パターン)

平均 0.008859073
最大 0.051156799
最小 0.00000128
こうなる。
新たな謎が出てきてしまったw

なんかの本に載ってて、突然気になったので試してみた。

今わかることは、
トレンドを持った時系列データを回帰分析に用いる場合は注意が必要ですよっと。

拍手[2回]

PR
24 December 2011            最近のお勉強事情  |  検証  |  TB:0  |  C:0  |






さて何のグラフでしょう?

こんなことやってるのは、アルゴリズムの確認のためです。
Rを使えば、あっさり計算結果が求められるし、グラフにするのも容易。

でも、それで全部揃えても、Rの操作がうまくなったという結果だけ。
理解の一歩としては、やはり自分で書いてみて、描いてみる。そういう取り組みが必要だと思っています。

だから、エクセルのワークシートでアルゴリズムの確認を行い、VBAで再現するんです。
 
ちなみに、3つ目のグラフは、ラグナロクオンラインという昔やっていたネットゲームのレアアイテムの出現確率の最尤推定量を知りたかったので試してみました。
(最尤推定量はググッてください。)

確率0.02%の事象が1回生起する確率が最も高くなる事象の試行回数を求めています。
分解すると、
{確率0.02%の事象が1回生起する確率}
を最も高くする試行回数はいくつか?→最尤推定量
を求めます。
最尤推定量として求めるものは、確率(文で言うと”確率0.02%"の確率)を求めるのが一般的なようです。
今回は尤もらしい回数です。

ちなみに、最も尤もらしい試行回数は、171回です。

記事書いてて思ったのですが、
3.28%の確率について、これが観測出来る最尤推定量も求められますよね?

確率3.28%が1回生起する最も尤もらしい試行回数は?それが観測出来る確率は?
→31回で観測出来る確率は37.38%。
じゃあそれが1回生起する最も尤もらしい試行回数とそれが観測出来る確率は、???

繰り返していくと、

ブレながら、ある値に収束していく・・・・

図解してみる。



それぞれの円には、
一回だけ観測する確率、2回だけ観測する確率、、、が入っているはず。。

図解違うかも。こっちっぽい。それぞれが標本だ。



とは言ったものの、標本の母集団の性質が違うので、
どちらかというと、こっちがイメージに合ってるっぽい。

終わり。

答え
①カイ二乗分布
②自己相関と偏自己相関
③、④最尤推定量の関数分布


拍手[1回]

18 September 2011            VARでリスク分析  |  検証  |  TB:0  |  C:0  |
・VAR

世の中的にはVAR(バリュー・アット・リスク)と呼ばれる指標を用いて、
突発的な損失を予想し、それに対して準備金を備えているそうです。


例えば、
三井住友フィナンシャルグループ
や、
東京三菱UFJ銀行(PDF注意)
などの金融機関にとっても一般的なリスク指標として公開しています。
他の大手銀行も同様です。

今だと、証券も結構そんな感じです。

VARは、統計的アプローチから非常に根拠の示しやすい指標として重宝します。
だからこそ、多くの企業で採用されている実情があります。


・基本的な考え方
 基本は、「過去は繰り返す」という態度を取る立場です。
 統計的に起こりうる最大損失を過去のデータから予測しようという試みです。
 損益というものが個々に独立し、同一の確率分布に従うという前提をとります。
 その前提のもと、その損益分布の99%地点の損失額をVARと定義しています。


今回はバックテストデータによりVARを求めてみます。

利用するテストデータは、こちらのテスト結果から使います。
一番信頼しているEAです。




テストデータによる試算および
シミュレーションより求めるモンテカルロ法をテストします。

・テストデータによる試算
2つの考え方があると思います。

①バックテスト時の実現最大損失。
 これは簡単でバックテストのconsecutive lossで良いと思います。

②過去損益の確率分布99%点の損失。
 こちらは、平均損益 - 2.33 * 損益標準偏差 で求めます。
 下記グラフは、バックテスト時の損益確率分布図です。


全体損益における1%を占める損失額を見ます。


・モンテカルロ法
バックテスト時の平均損益およびその標準偏差と
1日の平均トレード数およびその標準偏差を用いて、シミュレーションを行い計算します。

前提とする分布は正規分布です。これはバックテスト時の損益の分布から判断します。




今回は、10000回試行し、テストデータにおける実現値との比較を行いました。
結果は以下の画像です。



まず、シミレーションの結果から見ていきます。
当然、VBAマクロで自動化しています。

・平均損益、平気損益標準偏差
これはさすがに近似しますね。

・VAR/1Day
単純に平気損益と平気損益標準偏差より、99%点のVARを求めています。
テスト時の1トレードにおける最大損失に近い値ですね。
1日あたりの損失のため、1トレードあたりより低い値というのは納得出来る範囲だと思います。
これはテストデータにも書いてありますが、1日一回トレードすること自体が稀なためです。
トレードしない日が発生する確率を考慮しているということです。

・一日最大損失
1日おいて発生した最大損失です。
トレード数が極端な回数となり、かつ損が多かった場合に、このような結果が予想されます。

ライブ口座でも、2011/8/7 に、- 473.1pipsを巨額損失を計上しています。

これを見ると、起き得ることだったことが分かります。

ちなみに、1日の最大損失を算出するようにしたのは私がサラリーマンだからです。
1トレードを基準にVARを求めてもあまり意味が薄いと考えています。

自分がシステムに手を加えられるタイムフレームでVARを利用していくべきでしょう。

・最大連日損失
これも面白い結果が出ました。

ライブ口座でも、2011/8/7より2011/8/15の期間で大ドローダウンがこのシステムに訪れるのですが、
実際の最大連日損失は

- 947.6pips

を計上しています。

これはほぼシミレーションの計算と一致する結果となりました。
これもまた、テスト時から想定されることだったのでしょうか。

・まとめ

じっくり取り組んでみましたが、得るものは多かったと思います。
個人的にはVARをオススメします。

上記のテストから改めて、いまのシステムを信ずるに足る根拠が出来たと思います。


また、1日VARを求めて、システムストップ条件に導入するのも良いかもしれません。
実際、8/7の1日最大損失後もDDが続いたため、8/7時点でシステムストップを行うか、
ロットを最小単位にし、監視状態に入るなどの対応も出来たと思います。

・参考書

VARの概要から始まり、確率の基礎、統計の基礎の記述があり、
VARの計算方法が説明されています。

大きな字でとても読みやすく、どう利用していけば良いのかが理解出来ると思います。
統計についても易しいので、統計とVARをまとめて勉強したい方にも入門書としておすすめです。

拍手[5回]

14 September 2011            MT4で回帰分析のススメ  |  検証  |  TB:0  |  C:2  |
やはりバックテスト&フォワードテストにおいては、
通常のMT4で出力される評価項目だけでは心もとないことが分かってきました。

そこで、兼ねてから検討していた回帰分析を評価項目として出力するようにコードをEAに埋め込みました。

埋め込んだコードの基本的な作りとしては、
①start()関数実行ごとに、OrdersHistoryTotal()関数にて、トレードの増加(残高の変化)をキャッチし、
  取引ごとの資産残高を配列に記録していきます。
②deinit()関数実行時には、その資産残高配列をもとに、回帰分析を行い、評価項目をファイル出力します。

まぁ、こんなもんです。

で、事前に、2011/01/01~2011/08/01で最適化したパラメータセット群で、
2006/10/01~2011/09/11までをテストしてみました。(バックフォワードテスト??)

結果が下記のエクセルです。


ファイル出力したものをエクセルに転記しております。
ソートが効くので、R2でソートした状態です。
試しに、R2の最も高いTEST_NO=1635をテストしてみます。

こんな感じにしておけば、再現性指数のテストでも使いやすい形となると思います。


それではテストしてみますと、



なんという直線。
たしかに、R2はめちゃくちゃ高そうですが・・・・・。

次点の339番を確認してみます。




避けられないDDはありますが、かなり良い直線ですね。
トレード回数が素敵ですね。

また、同じくR2が高く、トレード回数が少ないものは、



似てますね。こちらもいい感じ。


さて、R2の高いものを確認してみましたが、


MT4の標準の評価項目である資産残高で見ていきます。
バックテスト時に資産残高が最も高かったパラメータセットでテストしてみますと、




こうなりました。

標準誤差: 51.64573073 /
R2 : 0.62991803 /
cut : 8837.64660626 /
Inclination  : 9.70851672

バックテストの資産残高だけで選んでいると、
結構ひどいものが選ばれている可能性もあるのかもしれないですね。

まぁ、未知の過去期間と未知の未来期間を含んでいるので厳しいの自明です。


最後に、去年の12月からずっと使い続けているパラメータセットだと、、、




標準誤差 : 52.30667450 /
R2 : 0.96745513 /
cut : 8030.72849178 /
Inclination  : 54.05610452

鉄板でした。
結局、パラメータセットの変更は必要ないという結論に至りました。



・まとめ

個人的に、標準誤差が低いものがいいのではないかと考えていたのですが、
それよりもR2で考えていった方が良さそうな印象です。

R2が高くて、傾きもそれなりに高いパラメータセットがいい感じ。


次は平均含み損益なども出せるようにすると面白いかもしれません。


今回の検証に利用した参考書はこちらです。
私のような高校数学をまるごと放棄してきた人間でも分かりやすく書かれています。
統計基礎、相関、回帰分析(単回帰)までをカバーしています。

拍手[3回]

01 July 2011            再現性指数の検証。  |  検証  |  TB:0  |  C:6  |

システムトレード研究ノート~上級者用~さんの記事「フォワードテストと再現性指数」
がとても興味深かったので、挑戦してみました。

選んだシステムはST-053-12という自作のトレンドフォローEAで、現在ライブ口座で最も良い成績を誇っているシステムです。

以下に前提を

・ソフトウェア
MetaTrader4

・通貨量
 1万通貨で単利です。

・期間
バックテスト期間
2006/10/01-2008/06/21

フォワードテスト期間
2008/6/21-2011/6/28

・対象パラメータ数
18パラメータ

・パラメータのSTEP
それぞれ10~20STEP程度

・手順
①まず、バックテスト期間で、最適化を行います。
②最適化結果の「テスト№」および「パラメータ」をテキストファイルにコピペします。(以降、パラメータファイルと記載)
③ソースを修正します。
  「テスト№」を意味するextern変数を定義します。
  「テスト№」変数の値をもとに、パラメータファイルを検索し、該当テスト№のパラメータを読み込み、既存パラメータに上書くようにします。
④INIT関数部分で、テスト№変数をパラメータファイルに記載のテスト№およびそのパラメータを網羅するように最適化対象を行います。
⑤テスト№変数のみで、最適化!
⑥これで、バックテスト№とフォワードテスト№を結び付けることが出来るようになりました。

・実際のコード(一部)
INIT()

 #再現性指数検証テスト区分。
   if(back_to_foward)
   {
 #パラメータファイルをオープンします。
   int handle = FileOpen(parameter_set_file_name,FILE_CSV|FILE_READ|FILE_WRITE,"\t");
   string param_set = "";
  
   Print("FileOpen = " + handle );
   FileSeek(handle,0,SEEK_SET);
   
  #ポインタがファイルの最終端になるまで。
      while(!FileIsEnding(handle))
      {
   #ファイルを読み込みます。「タブ」区切りで読み込みますので、この場合、現在のポインタから次のタブまで読み込みます。
         param_set = FileReadString(handle);
        
         //Print("####param_set = " + param_set);
         
   #各行の1つ目の値はテスト№となりますので、それがextern変数と同じか?判断します。
         if( StrToDouble(param_set) == back_test_no )
         {
    #同じであれば、パラメータを順次読み込み、既存変数に対して、置き換えていきます。
    #行の最終端まで繰り返しパラメータ読み込みを行います。

            while(!FileIsLineEnding(handle))
            {
               param_set = FileReadString(handle);
               Print("####param_set = " + param_set);
               
      #iMA_Method は、変数名です。読み込んだ文字列が変数名と同じであれば、
      #”iMA_Method=” より以降の文字列をパラメータとして再設定します。
      #読み取り時の関数は、パラメータのデータ型に依存するので、適宜使い分けてください。

               if(StringSubstr(param_set,0,StringLen("iMA_Method")) == "iMA_Method")
               {
                  iMA_Method = StrToInteger(StringSubstr(param_set,StringLen("iMA_Method")+StringLen("=")));
                  Print("iMA_Method = " + iMA_Method);
               }


・パラメータファイルの構成(ダミーパラメータですが)
1■proflevel=4■stoplevel=8■span=6■Leverage=20■slippage=5
2■proflevel=2■stoplevel=3■span=39■Leverage=20■slippage=5
■ = タブ

テスト№ パラメータ1 パラメータ2 パラメータ3
テスト№ パラメータ1 パラメータ2 パラメータ3

といった感じで並んでいます。



~~~~~~~~~~~~~~~~~~~~~~~~~~~

テストをしてみました。
最適化の出力項目について、エクセルにて
バックテストデータをX軸、
フォワードテストデータをY軸で取り、
散布図を作成し、回帰直線、決定係数を出してみました。

・損益
成績

良い感じですね。決定係数も0.6超えということで、「相当凄い」システム認定されましたかね?
ちなみに、下の方に溜まっているのは死んでいるケースですね。

・PF(プロフィットファクター)
PF

これも良い傾向ですが、バックテスト時に比べてPFは下がる傾向が見受けられます。

・平均損益
平均損益

これはシステム側でコントロールしているせいでこのような分布になっています。

・最大DD(資産割合)
DD(割合)

バックテスト時のDDが低いほど、フォワードテスト時のDDも低い割合が出やすくなっています。
上に貯まっているのは死んでいるケースですね。。

・トレード数
トレード数

これはおもしろい分布だと思いました。
どう捉えていいか迷いますが、トレンドフォローは繁忙期と閑散期があるのかもしれないですね。
パラメータと相場状況がトレード数に影響を及ぼしていると考えると、上記の分布もある程度納得できそうです。

・DD(金額)
DD(金額)

ほとんどDD(割合)とおなじですね。
バックテスト時に低かったDDは、ある程度抑えられるが、相場状況によっては死ぬということですかね・・・。

・テスト全体の推移
バックテスト時の最適化の内訳
損益プラス:8374
損益マイナス:2410
損益0:3

フォワードテスト時の内訳
損益プラス:9163
損益マイナス:1624
損益0:0

上手くいきすぎていますが、良いですw


・問題点

①パラメータセットの母集団非網羅

このテスト手順に問題点があります。
もともとこの手順は面倒で行うつもりはありませんでした。
当初は、2期間で最適化を行い、重複して出現したパラメータセットで検証する予定でした。
ところが、パラメータ数が多すぎたため、重複がまったく起きていなかったのです・・・・。

検証用エクセルを作っていたのですが、まったく同一パラメータが出現しませんでした。
2期間の最適化パラメータを1セルに文字列を集約して、昇順ソートし、
IF文で検証もしましたが、確かに一件も重複していませんでした。


上記のことから、バックテストパラメータファイルと解析用コードを作成し、最適化機能を利用することで、
今の手順で進めることとしました。

というわけで、一度の再現性分析だけでは、パラメータセットの母集団のうち、
10000件程度を行ったに過ぎないので問題ではあります。

もちろん、パラメータセットのパターンが少なければ、一回の検証で終わるとは思います。


②システムの前提条件の問題

テスト期間において、テスト対象のシステムが前提としている相場状況でないと、
純粋なシステムの良し悪しが判断出来ないのかなぁと感じております。

期間によって、再現性指数がぶれるシステムもあると思います。
その場合、前提をしっかり意識していないと、「使えないシステム」として認定するリスクがあります。

今回はたまたま対象テスト期間で前提を満たしていただけかと。

・まとめ
今回のテストではうれしいことが二つありました。

一つは、現在利用しているトレンドフォローは今後もある程度期待出来そうだということ。
一つは、パラメータ数が大量にあっても、過剰最適化に必ずしもなりえないこと。今回は18パラメータです。

ということで、持論を強化する結果が得られたので大変満足ですた。


短期システムの検証を週末に行いますが、あんまり期待出来ない^^;


拍手[9回]

28 November 2010            モデル系のお勉強  |  検証  |  TB:0  |  C:2  |
統計に基づいたモデル系EAをつくろう。

自己相関系EAer ですが、こちらの道も興味深々なので挑戦中です。

拍手[1回]

18 July 2010            よくわからんしすてむ  |  検証  |  TB:0  |  C:0  |
プロフィットファクター=3
ペイオフレシオ=1.73
勝率=64%
総取引回数=2924回
最大ドローダウン=-3.64%
最大連勝数=35
最大連敗数=24


こんなデータを得た。期間は半年以下のリアルの売買データらしい。

FXのシステムのようだ。

どんなシステムだろう?

拍手[0回]

09 May 2010            自然対数ってなに。  |  検証  |  TB:0  |  C:4  |


(観に来られる方が多いので少しだけ修正しました。ただし、答えはわかってないです。あくまでグラフ等を参考にしていただければと・・・。分かりやすいサイトがあったら教えてください。)


自然対数ってなんなのか。

100万円を初期残高として、年利100%の投資をする。→200万円

①年利を2分の1に、かつ、利益獲得回数を2倍にして、複利運用の投資をする。

100万 + 100万 × 0.5 = 150万

150万 + 150万 × 0.5 = 225万

①を繰り返す。

すると、年末の残高は、初期残高*2.718281828.......である271万円に近づいていく。


この、「 2.718281828.......」 が、自然対数の底eと呼ばれているものだ。

こいつの親戚が、円周率のπ らしい。

上図は、その2分の1していくにつれて、資産曲線が滑らかになり、かつ、271万円に近付いていく様子を
グラフ化した。式は適当にエクセルした。


で?別に、年利100%のみに限った動きに見えるんだが・・・。
年利50%で同じことを繰り返すと、また変わるしなぁ。

1.64倍あたりに収束してる。


ぜんぜん分からん。


もうちょっと調べる。

引用元:http://oshiete.goo.ne.jp/qa/1980240.html
~引用~

eという数字の、とてもよい点があります。
それは、
「指数関数の微分をしたとき、微分する前と微分した後で、全く式が変わらない!」
ということです。

微分というのは、たとえば2次関数のグラフのような曲線上で、ある1点における傾き(=接線の傾き)を求めることです。

数学や理科では、色々な関数が登場しますが、その中でも「eのx乗」は、そのような特異な性質を持つのです。

eを使うことによって、人間社会が便利になっていることは、沢山あります。挙げると切りが無いほど沢山あります。
ちょっと例を挙げますと・・・・・・

電気回路の特性の計算、化学反応の速度の計算、金融機関の利子の計算、洗濯物が乾く速さ、放射能の計算や放射能廃棄物の保管期間の決定、機器が故障するまでの寿命・・・・

~引用~


ふむー。

つまり、log(Y)Xを求めた際に、Yを自然対数の底eとすることで、ある程度単純化出来るってこと?何をw


「指数関数の微分をしたとき、微分する前と微分した後で、全く式が変わらない!」 とはなんだ?


~引用~

2^3=8 → log(2)8=3 
左の等式において、両辺にlog(2)をつけてみると
  log(2)2^3=log(2)8
  3log(2)2=log(2)8
     3=log(2)8  と最初の右の等式と同じに変形できます。

このように、等式(両辺とも正)は、両辺を底が同じ対数の真数に入れる
ことができます。
底がeのとき、自然対数をとるといってます。

だから、y=x^xはeを底とする対数をとって、
 log(e)y=log(e)x^x=xlog(e)x
とできます。(普通、(e)は省略されますが)

~引用~

つまり、、、

log の証明にe があてはめられるってこと?
eは定かではないけど、2.718281828......に収束していくってこと?

ある数を自然対数の底eの何乗であるか?を求めることで、物事を相対的に見れるってこと?


グラフにしてみた。なにを?




高校数学の知識0の人間にとっては、階段5段抜きくらいやろうとしてたかなwww


続く??

拍手[0回]

04 May 2010            ST-050-EURUSD  |  検証  |  TB:0  |  C:0  |


EURUSD版

USDJPYとは、比較にならない有望。


後は、、、GBPUSD,GBPJPY,EURJPYなどなど片っ端からやりますか。

拍手[0回]

03 May 2010            ST-050-USDJPY  |  検証  |  TB:0  |  C:0  |


アノマリー型。
アノマリーの複合で、ポジション比重を増やす。
フィルターは、アノマリーとボラティリティ。

ボラティリティって言っても、金融危機のところだけ避けてるイメージ。

システムレベルは、1.6~2.6とかなり低め。

拍手[0回]

02 May 2010            途中経過  |  検証  |  TB:0  |  C:0  |





きわめて単純なシステム。
まだ、サンプル数が少ないけど、結構な確信を感じる。

期間9カ月
73回の売買
損益は、+573PIPS
P.F 1.51

堅牢性が超高い。
変数は、移動平均、仕掛け用閾値、退出用閾値。
どれも固定値でいいぐらい。

仕掛け用閾値には、最適化の余地があるか?



拍手[0回]

06 September 2009            FXCM_BT SPREAD  |  検証  |  TB:0  |  C:0  |
先日FXCM_BT の口座開設と入金が完了したので、
スプレッドを調査してみました。

拍手[0回]

19 April 2009            ST-031-EMAクロス  |  検証  |  TB:0  |  C:0  |
新作EA
EMAクロスEA

拍手[0回]

忍者ブログ/[PR]

Template by coconuts