2009年02月01日

MSSGA2だったりして

MSSGAを改造してみました。

改造点は、長時間レンジテクニカルのパラメータの大幅な見直しですね。
小さな改良を続けたMSSGAをドル円、ポンドルで走らせてみた結果、まったく売買しなくなってしまったのが発端です。

これは一瞬だけトップに出てきてすぐに沈んでいくライフの注文フラグをランキングが下がった時点で消してしまうことによって、ユーロドルでのスキャルピングの精度を上げた反動です。

次々とランキングが入れ替わるドル円やポンドで売買が停止してしまったわけですが、結局のところ、ランキングが下がったライフのシグナルは雑音になることが多く、破産はしなくてもたいして儲けも出ていなかったわけです。

ドル円やポンドドルなどユーロドルより値動きが激しい通貨は長時間レンジのテクニカルのシグナルが必要とされるのですが、MSSGAは30分足から日足までのレンジをかなりおおざっぱに扱っていました。
そのせいで最適解を見つけられずにつぎつぎと子孫が入れ替わるだけの短命微生物のスープになりはててしまっていたわけです。

というわけで、長時間レンジのシグナルを増やすとともに演算でかかる負荷を減らすために同じ計算を繰り返さない工夫をちょっとだけ付け加えました。
結果は、とりあえずランキングに長時間居座るライフが増えてきてデモ売買がはじまりました。
そして、ちょっと動作が速くなりました。

各時間足ごとにチャートが更新されるタイミングを切り分けていけば60分足の指標は60分に一回とか計算すればいいわけで、もっともっと高速化できると思います。
高速化ができれば指標を増やす余地もいっぱいあるわけですね。
ざっと計算してもいまの60倍は楽勝で速くなるでしょう。

指標が増えれば増えるほどライフの進化には時間がかかるようになるでしょうが、より高度な進化も期待できる・・・・のでしょうかね?
いずれにしても計算時間を早くすれば、ライフを進化させるテストもいくらでもできるようになるのですから、急務です。

しかしまぁ、売買結果をまったく意図せずライフの環境を変化させていくだけで結果がよくなってくるんですからなんか不思議というか、おもしろいです。

ちなみに、とりあえず日本ブログ村のランキングに参加してみましたので応援いただけるとうれしいですね。

ブログランキングのトップで情報商材やアフィリを売るのが(まだ)目的ではないので、本文中には応援強要リンクは入れませんが、右のバナーを押していただけると嬉しいです。

まぁ、明日の朝にはトップ50にはいりますよね?
posted by (;D)笑男 ◆LeBIz0ZWfs at 20:44| Comment(4) | TrackBack(0) | 為替・FX・MT4 | このブログの読者になる | 更新情報をチェックする

2009年01月31日

ライフ69いくらなんでも・・・・

これはないでしょう・・・・・

狙ってプログラムしてもこんなカーブフィッティングはそうそうできるもんじゃありません・・・

ライフ69おまえはいったい・・・

chart080326-4.gif

ちなみに黒が売り、赤が買いです。
偶然ってすごいですねぇとしか言いようがありません。
たぶんデータも壊れてて上下に長すぎ、価格が変動しないのでうまいぐあいに移動平均がど真ん中を突き刺していて、ライフ69はそれをシグナルに売り買いを繰り返しているようです。

ちなみに、資金は5日で1.8倍に増えました。

TesterGraph2.gif

いままでで、最高のパフォーマンスですが、前回よりいじったのは子孫の遺伝子のコピーのされ具合に若干の修正を入れたくらい・・・・

と思って注文をよく見たら発注しているのは売りがライフ325買いがライフ69でした。


恐ろしい子!


あ・・・思い出した。上位のライフがポジッてるとき含み損を抱えて長期居座って売買のチャンスを潰さないように、含み損をライフポイントに反映するようにしたので、下位のライフがポジるチャンスがわすかに上がったのがパフォーマンス改善の効果につながったようです。

ちなみに、前回書いた通り、この先、正確には2006年10月5日14時8分あたりからライフ69とその子孫が対応できない値動きに変化するので、彼らはこの後死滅する予定です。

ただ、現在のライフの数値と遺伝情報はそのままファイルに保存して、アメリカで動いてるリアルタイムのフォワードテストにいきなり投入することもできます。
そうですね、一定時間ごとにライフとゲノムをファイルに書き出すようにすればいちいちテストを止めなくてもそれができますね。
posted by (;D)笑男 ◆LeBIz0ZWfs at 01:15| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年01月30日

更にMSSGA

MSST2のその後ですが、バックテストの結果2年ほどは調子がいいのですが、調子が悪くなると大きくドローダウンしてしまいました。
タネを明かせば、仕掛けは完全に時間制御にのみ頼っていて、INの時間を15分おきに24時間分、OUTの時間を15分おきに24時間分それぞれ売りと買いですべての組み合わせで売買を行い、成績のよいINOUT時間と売り買いの別をランキングしてデモトレードしていたのでした。これはある自動売買プログラム選手権の2位か、3位にランキングしていたシステムが履歴からその手法がバレてしまい、多くの人々に利益をもたらした件を再現するプログラムだったのです。
たぶん、筋の介入タイミングなんかがキャッチされると効果があるのだろうと想像つきますので、価格帯と時間帯で詳しく調べていけば今後も有効かもしれませんね。

さて、MSSGAの続報です。
まず、収益グラフから見て頂きましょうか。これです。

graf.jpg

はい、すごいですね。
もちろん、一番いいところを切り取ってますから過剰に期待してはいけませんが、一番瞞されたのはわたしです。
なにしろ、2006年のユーロドル10月1日からのバックテストで最初の5日間こういうことになってしまったからです。何のチューニングもしていない初っぱなで、いきなりです。

そりゃ、びっくりしますわ。

最初のころはこんな売買をしています。

c1.jpg

まぁ、ヘタというか、同値撤退が多いですね。
これはわたしが作ったシステムの特性ですが、最初にランダムに生成されたライフもある程度のライフポイントを持っていて、最初のうちは損失が少ないライフが上位にランキングされてしまうからです。同値撤退繰り返していれば確かに損失は少ないです。
やがて、必ず大なり小なりのドローダウンに見舞われ意味不明の売買を繰り返すライフが大量に死亡します。わたしはこの時期を大絶滅と呼んでいます。
そして、カンブリア期のように多彩なライフが現れては消え、徐々に収益曲線は上昇しはじめます。わたしはこの時期を生命爆発と呼んでいます。
これはユーロドルのいろんな時期で動かしてみてもいい生命が生まれる全長としてよく見られる現象なんです。

やがて、継続して利益を出すライフが順次台頭してきて、そして伝説のライフ69が誕生します。

69.jpg

チャートの上段に表示される文字表示はライフのライフポイントランキングです。一番左に69というライフが1455というライフポイントを稼いで一位に来ていますね。最初に与えられるライフポイントが500なのを差し引いても実に1000Pipsを稼いでいることになります。PFは2前後です。すごいですね。こんなのが偶然出てくるんですから。

2行目から3行目は、この時点で上位2つのライフの売買シグナルにしたがって実際の売買を行っているので、その2つのライフのゲノム(遺伝子)が表示されています。最初の数文字が決済指し値(テイクプロフィット)と損切り指し値(ロスカット)を決定する遺伝子で途中に−1がありますので、8Pipsくらいのプロフィットを取るようになってます。
次のGTが閾値で5つ目までの数値の合計がシグナルの閾値になります。5つ目までで2つ1があるので、ライフ69はシグナルの合計が3にならないと売りも買いもしません。次がレンジブレイクで1分足12本の高値安値をブレイクしたら−1なので逆張りです。
MAは移動平均で、やはり1分足12本の移動平均を超えたら買い、くぐったら売りのサインを出します。RSIは5分足24本のRSI値70と30に対して順張り、ADXでは1時間足に対して逆張り、そしてボリンジャーの1分足24本のDIに対して逆張り、同じく30分足に対して順張り・・・・

こんな組み合わせです。はっきり言って、なにがしたいんだかわかりませんが、そんな69の売買はこうなります。

c2.jpg

移動平均とレンジブレイクの逆張りでポジションを取り、決済指し値の6Pipsで決済しているようですね。そして、シグナルが消えるまでそれを繰り返すのでツボにはまるとこんなに見事な結果になるのです。

また、3列目のライフ325を見てみるとライフ69にそっくりなのがわかります。ライフ325はライフ69の子孫なんですね。
このように、優秀な売買手法を獲得した遺伝子は保存され、バリエーションを増やしていくわけです。

ユーロドルに限れば、長寿命となるライフのほとんどはスキャルピングで、しかも、トレンドに逆向きのリバ取り手法が多く見られます。

このライフ69もおよそ10日でその寿命を終え、やがてながく混迷の時代がやってきます。この時期の画像は退屈なのでのせませんが、収益曲線は緩やかに下る感じですが、ドローダウンはそれほど大きくありません。

だいたい、毎日このあたりに来るとテストも1日以上経過して、テスト中に書き直したコードの結果を見るためにあえて同じ条件で再びテストを繰り返しています。

とは言っても、例えばランキング上位に居たライフが売り買いを実際に指示するフラグを立てたままランキングが下がった場合にそれでも売買をシグナルするのかどうか、とか、一度死んだライフを生成するために何割をmama(上位)の遺伝子のコピーにするか、どの程度ランダムなノイズを入れるか、といったチューニングであって、売買結果を意図したチューニングは一切していません。

同時にアメリカサーバーはMSST2の残念な結果を受けて、今はMSSGAのフォワードテストに入っていますが、テスト3日目で現在は若干のドローダウン、ちょうどタンパク質のスープの中でランダムな触媒反応が起こっているような時期です。

MSSGAは決して安定した収益曲線を継続させるものではないかも知れませんが、その都度つどでおもしろい手法のパターンを見せてくれるのが見ていて飽きません。

100のシグナルの部分は誰でもチューニングできるようにカスタムインジケータの配列を使ったソースコードを公開して、ベースプログラムの遺伝的アルゴリズムのみをEAとして配布してみんなで結果を共有してみたらおもしろいかも知れません。

また、ブログネタとしてもリアルタイムのフォワードテストで生まれるライフの売買手法はその都度で発表していきたいと思います。

そろそろブログ村に登録すべきかも知れませんねー。

それでは。
posted by (;D)笑男 ◆LeBIz0ZWfs at 22:19| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年01月24日

その名もMSSGA

はい、MSSシリーズもついにGAということです。
MSST2はどうなったんだって話ですが、コードの改良などを経て現在アメリカのサーバー上でバックテスト中です。
さほど大きなドローダウンもなく、2006年2月から2007年4月のおよそ1年2ヶ月で300%の利回りを達成しています。
レバは10倍で運用しています。
もうちょっとテストが進んだらまたご報告いたします。

さて。
GA(genetic algorithm)遺伝的アルゴリズムですね。
複数の売買ルールを同時に走らせて、成績上位のシグナルに従うMSSシリーズはコードの共通性からGAに改造できそうだな、というのはしばらく前から考えていたことなのですが、実業に手を出して赤字にあえいだり・・・ごにょごにょな間コーディングできていなかったのです。で、お正月の休みを利用して一気にやってしまおう・・・・と考えていながらただダラダラと正月を過ごしてしまいまして、ぐああああああああっと自己嫌悪に陥った勢いで1日でコードを書いてしまいました。
それから二日ほどデバッグ作業についやしまして、さらに一週間ほどロジックの追加などを経て現在に至ります。

簡単に仕組みを解説しますと、今回は約100の売買ルールを設定しました。レンジブレイク・MA・RSI・ADX・ボリバン・タイムゲートなどをパラメータを変えて合計で100ほどですね。

ただし、そのすべてのシグナルの組み合わせをMSSで走らせることは到底できません。
そこでGAというわけです。
100の売買ルールはすべて買いノーポジ売りの3つのサインを出します。プログラム的には1、0、−1の数字のどれかということです。
1M12MAより上なら1、同じなら0、下なら−1とか、テクニカル指標ごとにシグナルを出します。
メモリ上には0000100−1−1−10000のように配列で表現されます。

これに対して4000のライフ(生命)を用意して、1つのライフは100のゲノム(遺伝子)を持っていて、そのひとつひとつは100のシグナルに対応しています。
ライフのゲノムは、最初1,0,−1の乱数で初期化します。

1M12MAに対応したゲノムが1の場合、1M12MAのシグナルが1であれば1×1=1となり、ゲノムが−1の場合シグナル1に対して−1を出力します。シグナルが1でもゲノムが0だと0です。

シグナル
0000100−1−1−10000
ライフ1ゲノム
0100000−11−10000

の場合、結果は
00000001−110000
となり、ますね。上下を掛けるだけです。


このようにして、すべてのシグナルとゲノムをかけ算して、さらにそれを合計します。上の例では合計は1です。

100ものシグナルに対応して、組み合わせを無視してシグナルの合計だけで売買判断をするわけですが、シグナルの組み合わせごとにさらにANDやORで評価を繰り返すこともできます。が、こうなるとかなり複雑になって、短期間では一回もシグナルがでなくなる恐れがありますので、とりあえずシンプルに合計してみました。
したがって、必ずしもすべての条件が満たされた時だけシグナルが出るわけではなく、ある場合とある場合とある場合に、整合性もなく売り買いのシグナルが出ます。一つのライフの中に複数の応答系を持つことになります。

ただし、単純にゲノムの演算結果が0より大きければ買い、小さければ売りだけですと、売買回数も増えすぎますし、組み合わせの妙というのもまったく無視されてはもったいないです。
そこで、さらにゲノムの最初の領域はシグナルに対応してない部分があり、別の演算に使われます。

ゲノム1列目から5列目はやはり1か0か−1で初期化されていますが、シグナルを掛けずに単純にゲノムの値同士足されて、それが演算結果の閾値に利用されます。

例えば、シグナルに対応したゲノムの演算値の合計が1の場合、もしも閾値が5だと、売買判断はKeepBuyを出力します。買いポジはホールドし、売りポジの場合手じまいされ、ノーポジの場合ノーポジのままです。
シグナルが閾値を超えるとBuyNowを出力するわけです。
売りポジは直ちに決済され、ノーポジの場合買いポジを取り、すでに買いポジの場合はホールドします。

また、一部のゲノムは決済指値、ロスカットなどを決定する因子になります。

100の売買ルールすべての組み合わせを検証することは無理なので、ランダムな売買ルールの組み合わせと閾値で売買判断を行い、調子のいい組み合わせを捜すと。

そして、ここからがおもしろいのですが、一定のライフポイントを持って生まれたライフは1秒ごとにライフポイントを0.03くらい失っていきます。これは初期値で設定できるのですが、現在は30日間で150Pips消費するようになっていて、すべてのライフは最初に150ライフポイントを持って生まれます。
ライフの売買判断がうまく利益を出すとそのPipsがそのままライフポイントに加算されます。損を出すとその分ライフポイントは減ります。

30日間まったく売買を行わなかったり、30日に満たず150Pipsを消費したライフは死亡して、新しいライフに生まれ変わります。
この時、新しいライフはトップのライフと2位のライフから半分づつゲノムを交換したり、たまにノイズが入ったりして、新しいゲノムセットができてくるわけです。

このようにして、100の売買ルールのすべての組み合わせをバックテストで検証することなく、ライフが死んで生まれるたびに、正しいシグナルの処理をする組み合わせが残り、やがて最適ではないかも知れないがそこそこの解が得られるようになります。
その上、その解が通用しなくなったとしても即座に別の解が用意される・・・という仕組みになるのです。
実際、コーディング中何度も短期のバックテストを行いましたが、負けが込んで破産することは一度もありません。

長くなったのでいったん止めて、次回は画像付きで解説しますね。

それでは。
posted by (;D)笑男 ◆LeBIz0ZWfs at 00:19| Comment(2) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2008年07月12日

さらにその後のMSST2

さて、お約束のようにあのブログの直後にドローダウンがはじまりまして。


前回と同じかよ!!


めったに更新しないブログでネタの重複じゃ飽きられるよ!!


と心配したところ(心配の方向が若干違いますが)なんとか一日がかりで回復してきてくれました。

TesterGraph080712b.gif


ちょうど地合いが転換して2001年まで売りで儲けてたのが、それ以降買いオンリーに変化してきています。
シフトチェンジにコストがかかってしまったようですが、これには対処法を考えてありますので、今回のテストが終了したらさっそく改良して比較してみましょう。

さて、構想中のロジックなんですが、例えば、雪崩なら局所で発生してだんだん広がっていくのですが、為替はいきなり山全体が動きながら局所で崖を小石が駆け上ります。

ハイレバだとこの小石にあたって結構死にます。

別の見方をすれば、事象に切り分けてもタイムフレームによって見え方が違っちゃうわけです。
5分足のレンジブレイクが15分足の逆張りサインだったり・・・・

そんで、まーいろんな事象の解釈をすべて用意してあとはただ「儲かってる解釈に盲目的に従う」のみ・・・
もちろん、結果に再現性がないとまったく駄目なんですが、意外にいっぱい出てくるんです。再現性が。

なんだか楽しくなってきました。
posted by (;D)笑男 ◆LeBIz0ZWfs at 23:58| Comment(7) | TrackBack(7) | 為替・FX・MT4 | このブログの読者になる | 更新情報をチェックする

2008年07月11日

その後のMSST2

ご無沙汰してます。
もうね。バックテストに時間がかかる、かかる。
しかも、テスト中に閃いたりしてしまうので、コードを書き換えてテストを最初からとか、たんまりやってます。

で、現在ですが、最新のMSSTとMSST2はかなり違う進化を遂げまして、年率1800%のMSST2は一旦MSSTに逆戻りして現在もテスト中です。こいつは、ポジションサイズ、ロット(%)、ロット数、目標利益、ロスカット、評価関数設定値A、評価関数設定値B、の7つのパラメータを残してまして、その組み合わせでもっとも安全な組み合わせを探しているところです。が、組み合わせが多い上に、そもそも2400程度の内臓パラメータを毎回比較しているせいで、結果がまったく出てきません。壊れたかと思うくらい無言です。
かれこれ2週間以上動かせてますけどね。まだ全体の1%も計算が終わりません。(笑)

で、MSST2では目標利益とロスカットを取り除いて新たなロジックで作成してみました。
その甲斐あって、開始早々に一応なんとかなるだろう程度の設定値が見つかったのでそれをまったく違う時期に適用してバックテストを動かせて見ました。
本来はこんなことやるとCPUの計算負荷が更に増えて上記のテストが更に遅くなるのですが、だんまりMT4を毎日眺めていてもヒマでヒマで・・・・(それにあまりにブログ更新しないから死んだと噂されてるようですしww)

そんなわけでそのバックテスト(予定8年)のうち最初の1年4ヶ月がこんな感じです。

TesterGraph080711.gif

ロジックに関してはロットのサイズとロット数だけがパラメータで、あとはロジックを評価する関数のパラメータだけでこんなふうにプラス曲線が出てきてくれました。
カーブフィッティングの余地はないと考えていいのではと思います。
年利でおよそ300%強くらいですね。縞馬さんにまた怒られそうですが、最初に見つかったパラメータなのでこんなもんでしょう。

もっとも、それ以降やはりダンマリですが・・・wwww
最適化が終わるのはいつでしょうねぇ・・・

さすがに2週間もノートパソコンを起動しっぱなしにしているといろいろおかしくなってきますね。もはやトラックポイントは初期値にもどってしまって使いづらいし、再起動したいです。
いつフリーズしてもおかしくないので、フォワードテスト用のアメリカのサーバーでも並行して同じテストをやってます。
ただ、こちらの方が2週間先をいってるので、フリーズするまでとりあえず動かして置くことにしました。
posted by (;D)笑男 ◆LeBIz0ZWfs at 00:14| Comment(6) | TrackBack(0) | 為替・FX・MT4 | このブログの読者になる | 更新情報をチェックする

2008年06月13日

その名もMSST2

衝撃のドローダウンから一夜、このドローダウンには根本的な対策が可能かどうか考えてたときにまたひらめきました。

要するにバリエーションの問題なんです。

MSSTは売買のルールのパラメータをおよそ500持っています。そして、そのパラメータすべてで売買履歴をつけて、調子のいいパラメータに従います。しかしそれでもドローダウンが発生した。この時点でもパラメータの入れ替えは行われたはずですが、結果として効果がなかったわけです。
そこで、まず入れ替えても効果がないようなわずかな違いのパラメータを大幅に削りました。全体をおよそ、1/3にしました。
それから、目標利益と損切り設定を排除しました。これを固定パラメータとすると、逃げ場がなくなるからです。昨夜話した150Pipsのストップロスですが、なにもそこまで我慢しなくていいと気がついたわけです。
そこで、パラメータのバリエーションに撤退ルールを加えることでパラメータのバリエーションを2500にまで増やしました。

バックテストだと3日のシミュレーションに1時間かかります。爆
とりあえず、最初の1ヶ月で月利100%越えてます。爆
気がついたら縞馬さんの厳命月利300%も目前まできています。
なんか余計に過激になってしまったみたいです。

3年分のバックテストにどれだけ時間がかかるのか・・・・

しかし、実際の相場では時間はたっぷりあるので大丈夫です。
posted by (;D)笑男 ◆LeBIz0ZWfs at 21:20| Comment(3) | TrackBack(0) | 為替・FX・MT4 | このブログの読者になる | 更新情報をチェックする

2008年06月11日

その名もMSST

お待たせしました!
MSSの新バージョンのテスト結果がでましたので発表します。

StrategyTesterMSST18.gif


























通貨ペアEURUSD (Euro vs US Dollar)
期間1分足(M1) 2006.10.02 00:00 - 2008.03.07 22:59 (2006.10.01 - 2008.03.08)
モデルEvery tick (the most precise method based on all available least timeframes)
パラメーターMagicNumBase=80425; PFPeriod=80; MaxPos=4; Filter=0.03; TakeProfitPips=50; StopLossPips=150; TMRLotspoint=0.1;
Bars in test449458Ticks modelled2121862Modelling quality25.00%
Mismatched charts errors0
Initial deposit10000.00
Total net profit188935.70Gross profit298514.30Gross loss-109578.60
Profit factor2.72Expected payoff1015.78
Absolute drawdown3893.70Maximal drawdown37341.95 (63.61%)Relative drawdown63.61% (37341.95)
Total trades186Short positions (won %)0 (0.00%)Long positions (won %)186 (87.10%)
Profit trades (% of total)162 (87.10%)Loss trades (% of total)24 (12.90%)
Largestprofit trade9120.00loss trade-9033.00
Averageprofit trade1842.68loss trade-4565.77
Maximumconsecutive wins (profit in money)35 (156655.95)consecutive losses (loss in money)3 (-23269.40)
Maximalconsecutive profit (count of wins)156655.95 (35)consecutive loss (count of losses)-23269.40 (3)
Averageconsecutive wins12consecutive losses2


いかがでしょうか?
2006.10.01 - 2008.03.08のEURvsUSDです。
一年と半年で利回り1800%!!
縞馬さんの厳命月間300%には遠く及びませんが、なかなかのパフォーマンスではないでしょうか。

しかし、たまたま今年の3月までしかテストしてなかったのは悔やまれますね。そこで、再度テストして今月の頭までテスト期間を延長してみました。

それがこれです!


StrategyTesterMSST182.gif



























通貨ペアEURUSD (Euro vs US Dollar)
期間1分足(M1) 2006.10.02 00:00 - 2008.06.03 12:17 (2006.10.01 - 2008.06.11)
モデルEvery tick (the most precise method based on all available least timeframes)
パラメーターMagicNumBase=80425; PFPeriod=80; MaxPos=4; Filter=0.03; TakeProfitPips=50; StopLossPips=150; TMRLotspoint=0.1;
Bars in test527990Ticks modelled2743212Modelling quality25.00%
Mismatched charts errors0
Initial deposit10000.00
Total net profit195282.45Gross profit916231.80Gross loss-720949.35
Profit factor1.27Expected payoff756.91
Absolute drawdown3893.70Maximal drawdown412084.50 (83.05%)Relative drawdown83.05% (412084.50)
Total trades258Short positions (won %)0 (0.00%)Long positions (won %)258 (85.66%)
Profit trades (% of total)221 (85.66%)Loss trades (% of total)37 (14.34%)
Largestprofit trade21600.00loss trade-73887.90
Averageprofit trade4145.85loss trade-19485.12
Maximumconsecutive wins (profit in money)40 (208084.30)consecutive losses (loss in money)5 (-269731.20)
Maximalconsecutive profit (count of wins)313483.15 (23)consecutive loss (count of losses)-269731.20 (5)
Averageconsecutive wins12consecutive losses2


ちょwwwww

おいwwwww

見事なカーブフィッティングでした。

本当にありがとうございました。

最後のドローダウンはほんとにひどいですね。
約80%の種を飛ばしてしまいました。
このストラテジは調子がよくなると最大で4つのポジを同時に持ち、それぞれが種の10%を証拠金として100倍で運用します。そしてストップロスは150Pipsに設定してありますから、1つのポジが15%のロスを発生させます。それが4つですから60%。連続で食らったのでたいへんなことになりました。

が、それでも後半盛り返して1800%は死守してますね。なんせ瞬間最大4500%です。
確かにドローダウンは怖いですが、利回りがこれだけいいと元金なんてあんまり関係なくなってきますからね。
PFを維持してくれるならこれもありではないでしょうか。
たぶん100万円もあれば2年で1億いくわけですから。
それ以後は100回破産しても元金はあるわけです。

というわけで、いよいよこのストラテジはアメリカに輸出してアメリカサーバで稼動テストへと移行したいと思います。
せっかくでかいドローダウンしたところですから、さっさと本稼動させてみたいですね。

時間に余裕ができたらこのストラテジのポジションサイズを調整して年率50%MAXドローダウン10%くらいのストラテジを作って公開したいなぁとか思います。

ぜひ、ブログランキング応援してくださいね。
下のランキング投票ボタンをポチ・・・・・


ランキングに登録してねーよ!!おい!!
posted by (;D)笑男 ◆LeBIz0ZWfs at 23:35| Comment(4) | TrackBack(0) | 為替・FX・MT4 | このブログの読者になる | 更新情報をチェックする

2008年06月10日

のどに刺さった魚の小骨

原因不明のエラーに悩まされています。

double stoplossA = OrderStopLoss();
double stoplossB = ST_OpenPlice+ST_StopLoss*Point;

 ・
 ・
 ・
 ・

 if(stoplossA>stoplossB) {
 if((stoplossA-stoplossB)!=0) {
 Print("SM>>,",Time[0],",",index,",ModifySell,", stoplossA,",",stoplossB,",",stoplossA-stoplossB);
}
}

ってこんな比較文なんですが、要するにstoplossAとstoplossBが同じ値だったらPrint関数は呼び出されないはずなんですが、呼び出されてしまうんですね・・・なんでだろ?

2008.06.10 15:48:12 2007.03.09 14:42 MSST EURUSD,M1: SM>>,1173451320,114,ModifySell,1.3068,1.3068,-0

出力を見るとstoplossAとstoplossBは同じ値なんです。
stoplossA-stoplossBは-0ってなってます。
マイナスゼロ?ナニソレ・・・

あんまりCの構文には慣れてないんで致命的な誤解をしてるんですかね?
今のところこのエラーが出るからといって問題はないんですが、こんなエラーを出力するようでは、コンテストなんかには提出できませんし、EAの公開とか恥ずかしくてとても・・・・

ま、いいや。


っとまぁ、エラーを出しながらもロジックのテストは進んでいます。
MAXで2年で1800%の利回りをマークしてます。(爆笑)
それなりのレポートができたら公開します。

お楽しみに。
posted by (;D)笑男 ◆LeBIz0ZWfs at 16:08| Comment(2) | TrackBack(0) | 為替・FX・MT4 | このブログの読者になる | 更新情報をチェックする

2008年05月05日

その名もMSS

さて、複数のストラテジを同時運用できてしまうシステムですがMSSと名づけました。マルチストラテジシステム。まんまやんけ(T^T)。
で、いろいろ有用そうなストラテジを『拾ってきて』組み合わせてみています。

mss.gif

でまー口座が満杯とか普通に達成できてるんですが、結論だけいうと
MT4のバックテストはある条件下ではまったくあてになりませんね。wwww

わたしはいままでどっちかというと鬼ホールド系のトレンドフォロアーなストラテジを中心に研究してきたんですが、実際に運用するにあたってはやはりキレイに右肩上がりなEAがいいなーと・・・そこかしこのMT4ブログを眺めながら思ってたんですよ。
それでMSSにもそういうストラテジを組み込んでるんですが、ここのところの沈黙の間にフォワードテストがまったく振るわない現象でそろそろ目をそらせてきたことに目を向けないといけない気がしてきたわけです。

キレイに右肩上がりになるEAのほとんどはTP(決済値)6〜8、SL(ロスカット)30〜とか小さく勝ち逃げして万一予定外に相場が動いたら大きめのロスカットに刺さるまで耐える仕組みですね。シグナルはボリンジャーやRSIとかストキャとかで発生させ、MAなどでフィルタリングしてます。
試しにランダムエントリーにTPとSLだけで最適化をかけても黒字化する設定はみつかりませんでしたから、シグナルはそれなりに機能しなければならないわけです。

以前から指摘してる通り、MT4はデータを最小単位では一分足で持っています。
Tickのシグナルは一分足のOHLCからMT4が生成しています。
そしてMT4の関数と配列においてAsk()、Bid()、Close[0]は生成されたTickデータを毎時返して来ます。
また、内部のテクニカル指標関数でもPRICE_CLOSEとBarShift=0を引数に渡すとTickデータで計算されてしまいます。

で、そのエントリーシグナルのためにEveryTickでテストを行うと使用しているタイムスケールのシグナル以外の場所でエントリーしてしまいます。

そして、バックテストにおいては必ず同じポイントでシグナルが発生するようなので、MT4が生成するTickデータは必ずしもランダムではありません。

つまり、パラメータの最適化段階ではMT4のTick生成ロジックに対してもっともフィッチしたパラメータがもっとも利益を出してしまう可能性があります。

ただ、最適化の結果とバックテストも必ずしも一致しないこともあるんですよね。これは直近2週間のデータはデータセンターのデータではなく使用しているサーバのデータを使っているからという説もありますし、そこまでは検証していませんのでこの話の中には多くの仮定も含まれているのは事実です。

ただ、はっきりしているのは、上記のような値をシグナルに使っているストラテジは同じ期間のフォワードテストとバックテストの結果が合いません。

これだけははっきりしてます。
一定期間フォワードテストを行い、データをある程度取ってから同じ期間のデータでバックテストを行うと、たいていの場合フォワードテストではシグナルが減り、勝率が落ちます。

missmatch1.jpg

この減った分のエントリーはまさにMT4が生成したシグナルであり、落ちた分の勝率はまさにMT4のシグナルジェネレータに対して行ったカーブフィッティング部分だと考えて差し支えないと思います。

したがって、非常に美しい収益曲線を描くストラテジを開発し、それを配布し(有償だったり無償だったり)、そして消えていくブログが多いのは、こういうことなんだと思います。
もちろん、バックテストの結果そのものの勝率を期待するのがそもそもの間違いではありますが、バックテストの弊害の中にMT4の癖による弊害も必ず認識すべきだと思います。

最後に、前回も書きましたが、実はバックテストですばらしい勝率を出すストラテジの中にもTickデータに左右されないものもあるし、上記の通りの状況に陥ってるEAもソースコードを変更することでMT4のクセから抜け出し、かつ利益を上げることのできる有益なソースコードも多々あります。

ただ、それらがバックテストと同じ結果をフォワードテストで出せるかというとそれは別の話です。もっといい場合もあれば、もっと悪い場合もあるでしょう。過去の出来事だけから未来を語るのはおろかな話です。

MSSを作ったおかげで、そこらへんの微妙な調整はざっくりとシステム任せにして、いくつかの違うパラメータを持った同じEAを同時に走らせておけばいい、という戦略ですから多少は気が楽ですけどね。

以上、ブログ休止中に考えてたことを一気に書いてみました。
え?なげー?

すみません。
posted by (;D)笑男 ◆LeBIz0ZWfs at 10:23| Comment(9) | TrackBack(0) | 為替・FX・MT4 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。