最近、私の中でブームになっている「分解モンテカルロ法」の検証機を作ってみました。
分解モンテカルロ法については以下の検証記事を御覧ください。
この記事ではMQL4で書いた分解モンテカルロ法を使って、MT4にてバックテストを行いました。
そしてここで作ったプログラムを元にライブラリ化して、ZigzagBreakoutという私が作成したEAに組み込んでその実力を試しました。
ここまで検証してきましたが、気になる点が幾つか残っています。
「モンテカルロ法は3回に1回の勝率でもっとも効果が発揮するらしい(未検証)」が、分解モンテカルロ法も同じなのか?
分解モンテカルロ法の優位性が崩れるのはトレードコストがいくらの時か?
この分解モンテカルロ法は日本の一個人が考えたものなので、どこかに穴があるかも知れない。本当に大丈夫なのか?
これらの疑問を解決するために作成したのが「分解モンテカルロ法検証機」です!
各種パラメーターを入力して「開始」を押すと分解モンテカルロ法を検証してくれるプログラムです。
それでは試してみましょう。
3回に1回の勝率でもっとも効果が発揮される
SL20pips、TP40pips、今回は手数料を0として試行回数1000、33.3%の勝率としました。
開始ボタンの横にある「調整モード」というのは勝率の調整をするモードで、「負けが多い場合は勝たせる」「勝ちが多い場合には負けさせる」という調整が入ったモードです。
これを入れずに単純なランダムで実行すると勝率が安定しません。(どうしてもブレが生じます)
実行してみた結果、1枚あたりの損益は9.97pipsとなりました。手数料(スプレッド)がこの値より小さければ分解モンテカルロ法だけでも利益が残せる計算になります。
次に2回に1回の勝率にします。
SL20pips、TP20pipsで勝率50%。1枚あたりの損益は4.59pipsとなりました。総損益も3回に1回の方が大きくなっています。
次は試しに4回に1回の勝率に変えてみます。
SL20pips、TP60pipsで勝率25%にすると枚数が増大して現実的なロットサイズではなくなってしまいました。何回か実行しましたが大きなロットになり損失を抱え込むことも多いです。(中央の数字の羅列が配列の中身、モンテカルロ法で言うところのロットサイズを書き込んだ紙の内容です)
今度は逆に3回に2回は勝てるという勝率(66.666‥)でやってみましょう。
やはり利益が減りました。
というわけで、モンテカルロ法同様、3回に1回の勝率が最も効率が良いと考えて間違いないと思います。
ストップロスが20pipsであれば手数料は3~4pipsまで?
1枚あたりの損益が3.99pipsとなっているので、手数料がこの値以下であれば利益が出る、という計算になりますが、それで実際に勝てるのか?というとそうはなりません。
実際の相場では「勝率が低くなっているから勝たせてあげよう」などという調整をしてはくれないからです。調整モードを外して実行してみます。
乱数に依存するとどうしても勝率にブレが生じて入力した勝率には滅多になってくれませんが、実際の相場でも同じでしょう。結果、1枚あたり損益は激減し、最大枚数、最大損失も莫大な数字に膨れ上がりました。ちなみにこれはまだ良い方で、マイナスのまま終わることも多いです。(一セット完了しない=損失を回収できないで終了)
一セット終わるまで実行することも可能ですが、枚数が大きすぎて現実的では無いのでその検証は無意味だと思います。(現実では15万枚ものロットは持てません。0.01Lotsで始めても1500Lotsなので‥。)
というわけで実運用では使えない。という残念な結果に‥。
安定稼働させるなら勝率はもっと高い方が良い
勝率が33.3%程度だとすぐにロットが大きくなって破綻してしまうので、勝率を50%にすると‥
プラスで終わることができました。実際の勝率が49.1%になっているので損益も少ないですが‥。
ちなみにこれはプラスになっていますが、マイナスで終わるケースも多く、実運用で使うには不安が残ります。
勝率40%くらいだとどうでしょうか。
SLが20pipsの場合、TPが30pipsで勝率40%になります。このパターンだとほぼ安定して利益が残ります。
試行回数を1万回にしてみました。(試行回数を増やせば勝率は入力値に近づきます)
何度実行しても赤字で終わることは1度もありませんでした。
だいたいこのくらいの勝率が良いのかも知れません。
分解モンテカルロ法で運用するなら勝率は40%前後
勝率が低すぎると破綻しやすく、高すぎると利益が小さすぎて、多少のブレで赤字に転落するため、このくらいの勝率になるように調整するのが良さそうです。
‥1枚あたりの損益が1pipsくらいでは手数料やスプレッドで消えてしまいますが‥。1枚あたりの損益はSLとTPを広げれば一応、解決できます。
SLとTPを4倍にしました。3.53pipsであれば手数料やスプレッドを支払っても残るでしょう。その代わり、トレード回数は減少します。
スワップについて
この検証機では無視している(というか再現不可能なのですが)スワップも実運用では影響してきます。
仕様上、ロットが大きくなることがあり、大きくなればなるほどスワップも凄まじい影響を及ぼします。
「分解モンテカルロ法の検証」でドル円のロングだけ持つプログラムを作成しましたが、これをショートに変えると激変するようです。ポジションをずっと持ちっぱなしのシステムですから、当然、スワップの影響がありますよねと‥。(これを作った時には考えていませんでした‥。「ショートだと勝てない」というコメントを頂いて、そういえばスワップの影響を考えてなかったなと‥。)
ちなみにMT4ではヒストリカルデータにスワップの情報が存在しないため、バックテストでは「現在のスワップ」が適用されます。(一部のMT4ではスワップを無視するものもあるようです)
ポジションを持ったまま日をまたぐことが多いシステムの場合、プラススワップの方向だけにするなど、工夫が必用になると思います。
まとめ
このベットシステムだけで運用するのは正直厳しいですが、優位性のあるロジックと組み合わせれば十分使えそうです。
私が気にしていた「日本の一個人が考えたものなので、どこかに穴があるかも知れない」という懸念も、これだけ試行して大丈夫なのだから問題ないのではないか、と考えています。(ついでに私のプログラムの方も問題無さそうだと思っています。)
コメント