日曜日の静寂

静かに。そして、強く生きていきたい。

サイト内検索

EA作りの決定版~バックテストで精度の高いEAを作る方法~

現在、私のFXは、購入してきたEAをベースに運用しております。
元々購入したEA自身があまり納得のできる動きをしていなかったのですが、チューニングすることで、納得ができる動きになり、現在安定したプラス収支を出し始めています。

この間に一体何があったのか解説いたします。

EAを買ってくる

以前に何本かEAを買ったことがあります。
これらのEAは、それなりに長期間運用されていて成績が悪くなく、購入者も多いEAを買っています。
だから、安定しているはずなんです。

そこで、バックテストを行ってみると、初期設定のままでも確かに右肩上がりになりますし、フォワードテストをしてみてもそこそこプラスで運用できています。
そして、いざ本番に移すと、利益確定決済は小さく、損切決済は大きい、EAの設定そのものです。
長期的な視点で見ると、プラスになっていくのかもしれませんがいざ自分が目の前で等倍速で流れる時間の中では、損切が大きくてヤキモキしてしまうのも事実です。
結局のところ、何かが違うな?
となるわけです。

なので、購入して1年程度で運用した期間は1か月くらいしかありませんでした。
もう支払ってしまっているEAですから、何か活かせる方法はないか、模索してみることにしました。

編集できる係数が3種類

私が購入したEAは、自分で編集が可能な係数が3つありました。
1つは利益確定Pips、もう一つは損失確定Pips、更にはブースト値という、ポジションを持つ条件の緩和レベルのような数値の調整です。
先の2つはわかりやすくて利確・損切の値を指定するわけですから小さければそれだけ利益も損失も小さくなりますし、大きければ利益も損失も大きくなります。
例えば利確のPipsを大きくとって、損切のPipsを小さく取れば利大損小のEAになりますが、勝率の問題が出てくるでしょうね。
同じようにブースト値を小さくすれば、より勝率が高いタイミングでしかポジションを持たなくなるかわりに、めったにポジションを持たなくなりますし、値を大きくすればするだけポジションを持ちやすくなりますが当然のごとく一回のトレードあたりの勝率が下がります。
なので、これらを最適化チューニングしてドローダウンが低く、プロフィットファクターが高く、トレード回数もそこそこ多いものを見つければいいのです。

EAを作る際の注意~前の脚を見てフラグを立て、脚の始まりのみで作用するようにEAを作る~

実はEAを作るときに一つ大事なことだなと思ったのは、脚の始まりでのみ動作するようなEAを作ることで、バックテストにかかる時間を大幅に短縮できます。
バックテストのモデルを始値のみというのを選択すると、10年くらいのバックテストも数秒で終えることができてしまいます。
なので、100万通りくらいの最適化チューニングでさえ、数時間もかからずに終えることができます。
そのために大事なのは、始値でしか作用しないEAを作ることです。
幸いにも、今私が持っているEAは、始値でしか動かないEAですから、これで極限までの最適化チューニングテストを行うことができます。

カーブフィッティングにならないように

上記の画像は、最適化チューニングを行った収益モデルのグラフです。
赤丸で囲ったようにたまにポンと飛び出て大きな利益を生み出している点があります。
これは、過去のチャートデータの中でとびぬけて大きな収益を産み出したタイミングであります。
このような飛び出したものは、過去のチャートで一番おいしいところを拾ってきたため大きな利益を計上しているのですが、その周辺のグラフを見るとわかりますが、その系数の隣でさえもっと下がった位置が収益になります。
カーブフィッティングとは、過去のチャートにだけ合わせて最大の利益を取ったモノとなりますので未来の動きに対応しきれないかもしれないというものです。
このEAの場合、とびぬけた収益が出されている係数設定にすることで過去には大きな利益を上げられたでしょうが未来に向かってそうなるとは限りません。
それよりもたくさんの点が近くで集まっているそのあたりの係数の方がより安定した利益を産み出せるはずです。
もちろんとびぬけているものがすべてダメではありません。なぜ、大きな利益を生み出しているのかを確認する必要があるでしょう。

いくつかの係数の候補をもってバックテスト

最適化チューニングを行うことでどの係数をどういう設定にするとプロフィットファクターが大きくなり、ドローダウンが小さくなって、満足のいくトレード回数になるのか、見えてきます。
その中でいくつか係数の組み合わせの候補をピックアップして次はバックテストを行えばいいのです。
その際は、始値でテスト、そして、完全な脚でテストを行います。
それほどずれが無ければOKとなります。
バックテストを行う際には、ビジュアルモードをOFFにすれば早く動作します。
また、その後、チャートを開くボタンを押せば、実際のチャートの動きを確認できますので、最初はビジュアルモードOFFでやることで迅速にバックテストを行えます。
それで、たまたま運よく。。。というものがなく、順調に利益を積み重ねることができている係数で、最も効率がよさそうなものを選ぶことで、再現性の高いEAで係数の設定ができます。

EAのチューニングした結果

元々購入してきたEAの規定設定でも十分良いのですが、私は利小損大で、勝率を上げることでトータルをプラスにしていくようなモデルがあまり好きではありません。
なので、利小損小、利中損小あたりになりそうな係数でかつ、ドローダウンが小さいものでトレード回数が多いものを選びます。
そうすると、既定の設定から大きく外れた位置に臨むようなトレードができるものが現れてきました。
ちなみに最適化は10万通りを超えるほどの組み合わせをテストしています。
それ×6通貨ペアほどありますから、60万通りほどの組み合わせをテストしています。

自作EAの最適化チューニング

ここまでが理解できてきた結果、自作したEAでも、テスト結果を見ると、十分満足のいくものがあるんではないかと考えました。
そこで、シンプルなEAを作り、今までだと、どこかのタイミングで大きく損失を計上してしまったり、利確決済のポイントがちょっと微妙だったりで製作を取りやめていたものももしかしたら浮上するのではないかとおもい、再度作り直しました。

今回作ったモノは決済が2種類あって、1つは、トレ―リングストップ機能で、利益のポイントが伸びに合わせて変化する決済と、売り・買いポジション全クリア決済の2種類を持ちました。
決済だけでも、最大利益・下落率・全決済の時の利益について様々な組み合わせが考えられます。
もう一つはポジションを持つ位置の設定です。
一つは、移動平均線を使った短期的なトレンドの認知です。
移動平均線の係数を調整することでトレンド認知の方向性が変わります。
もう一つは今保有したポジションからのかい離の幅です。
あまり近い位置でポジションを持たないように設定をしたくて、最後に保有したポジション位置からどのくらい離れたらポジションを持つかというのを設定できるようにしました。
これは、現在が含み益エリア・含み損エリアという条件も付与できるような作りになっているので、含み益の時だけポジションを持つ、ナンピンのように含み損の時だけ追加ポジションを持つなどの設定も可能に作り、それらを10Pips刻み程度で、最適化します。
全部の係数については10~100通りくらいテストすることにしますので、大体100万通り程度の最適化チューニングになります。
しかし、始値のみで行えばそれですら数時間程度ですべて完了します。
あとは先述の通り良さそうな係数をピックアップしてその後バックテストを1~2回繰り返すことで最適な係数を導き出せます。
これで、かなり再現性が高く、リスクの低いEAを作っていくことができそうです。

Return Top