MT5について記事にするほどではないが、メモとして残しておきたいものをここでまとめておく。ただし、トレード全般に関するメモも含む。随時更新。
アノマリー
その1
特定の時間帯に買いだけ、あるいは売りだけ、のようなアノマリーを発見しようとすると過剰最適化になりやすい。
バックテスト上は勝てるルールを見つけやすいので、レベルの低い商材屋が手を出すところでもある。
イン期間が上昇トレンドだと買いの時間帯が拡大し、売りの時間帯が縮小する、逆もまた然り、いうようなことも起こる。
アウト期間でのチェックが必須だ。
その2
学者は直近20年でこの時間帯は上昇する傾向があるなどと論文に書いたりする。
確かに20年全体ではそういう結果かもしれないが、その時間帯に買う戦略を作って資産曲線を見ると、初めの15年は右肩上がりだが、直近5年は右肩下がりということもある。
直近で勝てなければ意味はない。
学者は統計的に有意な傾向を発見できればそれでいいかもしれないが、トレーダーは勝たなければならないから、トレーダーのやり方で研究する必要がある。
だから、X軸を時間帯、Y軸を変化率にして棒グラフを作るようなのはトレーダー的にはだめで、X軸を時間軸にして、Y軸は累積変化率にして時間帯別に曲線を何本も描くのがよい。
学者的なやり方が間違っているというわけではないが、関心のある場所が違うのだ。
バックテスト期間の長さ
その1
昔、ウォークフォワードテストを10年くらいやって、イン期間とアウト期間の最適化をしてみたことがある。
するとイン期間は3年、アウト期間は短いほどいい、という結果だった。
あくまでもテストに使った戦略では、の話で、一般化はできない。
ただ、こういうこともあって、私は長期間のバックテストとパラメータをそのままで使い続けることには懐疑的だ。
私が実際に使っているEAは直近5年で最適化し、1か月ごとに最適化してパラメータを更新している。
私が使っているEAに限った話だが、今のところはうまくいっているようだ。
もしバックテスト期間が5年しかない、毎月パラメータを更新する必要があるようなEAを販売するとしたら売れないだろう。
売れるEAはバックテスト期間が10年以上あって、パラメータは放置でいいもののはずだ。
だが販売者にとって売れるEAと再現性があって購入者に利益をもたらすEAとは別物だと思う。
話は変わるが、ケビン・J・ダービー氏によると、アウト期間はイン期間の10-50%がよいそうだ。
イン期間が5年ならアウト期間は半年もあれば十分となる。
実際、私も毎月最適化はしているが、最適なパラメータ値が変わることはあまりないので、今後は半年にしようかとも思う。
その2
イン期間は長すぎないのがよいのだとしても、やはり問題はある。
イン期間が短いほどパフォーマンスはよくなる傾向があるので、リスクを過小評価しがちになるからだ。
例えばPFがイン期間5年で3.0、続くアウト期間5年で1.5だったとする。
1.5もあればまずまずだが、問題は3.0から50%も劣化していることだ。
もしイン期間5年の3.0に浮かれて過大なロット数でトレードすると、想定外のドローダウンに見舞われることにもなりかねない。
イン期間5年が再現性の高いパラメータ値を選んでくれるのだとしても、想定するリスクもそれでよいというわけではないのだ。
リスクはアウト期間でのパフォーマンスで想定する、あるいは少なくともイン期間のドローダウンの2倍は想定してロット数を抑えるのが無難だと思う。
イン期間でリスクを想定して何年で何億儲けるとか、十何年で何十億儲けるとか考えるのは取らぬ狸の皮算用にも程がある。
EAへの干渉
バックテスト原理主義とでもいうのか、指標があろうと何があろうとEAは止めない、干渉しないと考える人がいる。
バックテストでは止めたり、干渉したりしていないのだから、そんなことをしたらバックテスト通りの利益は期待できなくなると考えるのだ。
だが私が思うに、このバックテスト通りの利益というのがそもそも怪しい。
バックテストというのはかなり理想的な環境で行われている。
実際の相場では価格、スプレッド、スリッページなどがバックテストで使われるデータより激しく変動している。
そして、この激しさはトレーダーに不利な方向に動くことが多い。
以前、私は指標での激変で大敗したことがある。50pipsの損切りを入れていたが、一瞬で刈られたばかりか、盛大に滑って150pipsの負け。
ところが後日、その期間を含めてバックテストすると、その大敗したトレードが直近数年で最大の大勝となっていた。
実際には相場の激変で一瞬で刈られていたのに、バックテストでは生き残ったことになっており、その後、爆益となったのだ。全ティックでバックテストしてもだ。
バックテスト通りの利益を期待してEAを止めない、干渉しないのであれば、大勝どころか、かえって大敗にもなりかねない。
もちろん、やたらとEAを止めたり、干渉すればEA本来の力を発揮できないことにもなる。
ではどうするか。
実際とバックテストを激しく乖離させるような指標やイベントは限られている。例えば、FOMC、雇用統計、CPI、日銀などだ。
こういうときにはトレードしないというルールをEAに加えてバックテストすればよいと思う。
そうすれば指標時にEAを止めても、それはバックテスト通りのトレードをしていることになる。
EAを止めたくなるのは指標だけではない。
年末年始はフラッシュクラッシュが怖い。
週末はポジションを持ち越したくない。
そう思うなら、それもEAのルールに加えよう。
自分がEAを止めたくなる、干渉したくなるような状況を総点検し、EAにそのルールを加えるのがいい。
放置できるようなEAを作るのだ。
そうしたら、事前に想定できなかった不定期、または突発的な状況を除き、EAは止めず、干渉しないと決める。
ここで注意したいのは、ルールを加えたことによってバックテストでのパフォーマンスが悪化した場合、このルールはないほうが利益が見込めるから加えるのはやめよう、などと考えないことだ。
先ほども書いたように、実際とバックテストには乖離がある。
ルールを加えることによってバックテストでは失われた利益も実際には損失だった可能性だってあるのだ。
そして、仮に実際にパフォーマンスが悪化するのであったとしても、EAを止めたり干渉したりする労力から解放され、何よりも安心を得られるメリットのほうが大きいと考えるべきだ。
例えば朝スキャ戦略で深夜から翌早朝までトレードする場合を考えてみる。
このルールだと、金曜深夜にエントリーして、週末にポジションを持ち越すことも起こり得る。
それが嫌なので金曜深夜はエントリーしないというルールを加えたところ、バックテストではパフォーマンスが悪化したとする。
これをどう考えるか。
もし週末にポジションを持ち越すことが気にならないのであれば、ルールを加えなくてもいいだろう。
だが持ち越したポジションが気になって仕方なく、週末を楽しめないのであれば加えたほうがいい。
「週末を楽しめない」というのはバックテストの損益には現れないが、これは大きな損失なのだ。
バックテストでの損益ばかりに振り回されず、ストレスフリーでトレードすることが大事だと思う。
始値のみの注意点
例えばMT5で始値のみ+M5でバックテストしたとする。
もしEAがM1のテクニカルを使用していた場合、これはエラーになる。
この場合、ストラテジーテスター側はM5のデータしか使わないので、EAがM1のデータを使うよう要求すると拒否するのだ。
もしEAがM15のテクニカルを使用していた場合はエラーにならない。
これはM5のデータを3本使ってM15を合成することが可能だからだ。
つまりEAが使おうとしている足が5の倍数であればエラーにはならない。
一覧にすると
〇始値のみ+M5のときにEA側で使える足の種類 M1:✕ M2:✕ M3:✕ M4:✕ M5:〇 M6:✕ M10:〇 M12:✕ M15:〇 M20:〇 M30:〇 H1:〇 H2:〇 H3:〇 H4:〇 H6:〇 H8:〇 H12:〇 D1:〇 W1:〇 MN1:〇
のようになる。
M5以上なら使えるのではないかと思いがちだが、M6、M12のように5より大きくても5の倍数ではない足は使えない。
SendNotification関数を使った場合のプッシュ通知設定
MQL5でSendNotification関数を使うとEAからプッシュ通知を送信することができるが、これは取引サーバからではなくてEAを稼働させているMT5から送信される。考えてみれば当たり前か。
だから、それができるように設定しないと通知は送信されない。
設定は以下の通り。
- MT5のメニューバーで「ツール」をクリックする。
- 「オプション」をクリックする。
- 「通知」タブをクリックする。
- 「プッシュ通知機能を有効にする」と「ローカルターミナルからの通知」にチェックを入れる。
- 「OK」ボタンをクリックする。
この場合、「取引サーバからの通知」だけにチェックを入れても通知は来ない。
取引サーバからの通知は注文を送信したり、約定したときだけのようだ。
オプティマイズ結果で使われる色分け
MT5で最適化して「オプティマイズ結果」を見ると、各指標の数値で色が違うことがある。
パフォーマンスのよいものから
緑 薄緑 黄緑 オレンジ 赤
の順だろうか。
パフォーマンスがよくても取引数が少ないと緑にはならないようだ。
色分けの基準は分からないが、もし重視する指標のパフォーマンスが最もよくても緑でない場合、そのパラメータ値は選択しないようにすると、各指標でバランスの取れたものになるかもしれない。
終値の位置関係と移動平均線の向き
終値>N本前の終値
と
N本移動平均線は上向き
は一見別物のようだが、実は同じだ。
知らないと、少し不思議に感じるかもしれない。
N本移動平均線が上向きとは
N本移動平均>1本前のN本移動平均
ということ。
例えば終値が
3 1 4 1 5 9
と変化した場合、5本移動平均は
- - - - 2.8 4.0
で
9>3、4.0>2.8となる。
最初の3を9に変えると
9 1 4 1 5 9 - - - - 4.0 4.0
で
9=9、4.0=4.0となる。
5本移動平均と1本前の5本移動平均は1、4、1、5を共通に持っているので、終値と5本前の終値のどちらが大きいかで向きが決まる。 だから
終値>N本前の終値、ならば、 N本移動平均線は上向き
となるのだ。
下向きの場合も同様。
バックテスト期間は何年がよいか
バックテスト期間は5年は必要だ、いや10年はほしい、といった意見を見かけるが、判断は難しい。
3つの戦略を2つの通貨ペアでバックテストし、バックテスト期間がどのくらいであれば再現性が高い、つまり信頼できるかを簡単に調べてみた。
イン期間を
- 2014-2018年(5年)
- 2009-2018年(10年)
- 2004-2018年(15年)
の3パターンで最適化し、2019-2023年をアウト期間としてPFを比較する。
左側の数値をイン期間の、右側の数値をアウト期間のPFとする。
通貨ペア1 ◯戦略1 5年:3.35→1.57 10年:1.97→0.91 15年:1.81→1.11 ◯戦略2 5年:1.76→1.81 10年:1.44→1.75 15年:1.08→1.68 ◯戦略3 5年:1.43→1.65 10年:1.21→1.40 15年:1.01→1.40 通貨ペア2 ◯戦略1 5年:3.60→1.68 10年:2.37→1.11 15年:1.77→1.84 ◯戦略2 5年:1.69→1.71 10年:1.62→1.71 15年:1.24→1.54 ◯戦略3 5年:1.31→1.66 10年:1.28→1.58 15年:1.02→1.58
イン期間のPFは5年が最も高く、15年が最も低い。
期間が長いほどサンプルが増えるので自然なことだ。
また、戦略には寿命があり、寿命を超える期間でバックテストするとパフォーマンスが落ちるということも考えられる。
アウト期間のPFが最も高いのは5年が5回、10年が1回、15年が1回。
最も低いのは5年が0回、10年が4回、15年が4回。
なお、同数首位、同数最下位を含む。
全体として5年が最もよく、10年、15年は同じくらいに悪い。通貨ペア1+戦略1の10年では損益がマイナスになった。
各戦略の傾向は通貨ペアが違っても似ており、各戦略の好不調は通貨ペアが違っても同時に起きそうだ。
戦略2、戦略3はアウト期間のパフォーマンスがイン期間よりよい。
普通はこういうことは起きないが、たまたまアウト期間の相場に合っていたのだろう。
もし戦略の採用基準がイン期間でPF1.5以上だとしたら、戦略3は採用されない。
アウト期間では勝っているが、これは仕方がない。どの戦略が今の相場に合っているかは後にならなければ分からないことだからだ。
戦略2の場合、5年では採用されるが、10年、15年では採用されないこともあり、惜しい気がする。もし戦略の寿命が5年くらいであることが多いのだとしたら、イン期間をいたずらに長くすると使える戦略をはじくことになる。
それでは改めてバックテスト期間は何年なら信頼できるのかを考えてみる。
それは戦略次第だというのが正しい答えなのだろう。
ただ、5年くらいがよいことが多そうだ。
あまり長いと直近の相場に合わないパラメータ値が選択される恐れがある。
また、必要以上にイン期間のパフォーマンスを下げ、直近で使える戦略を却下してしまうこともある。
長期間、高パフォーマンスを維持した戦略は使い始めたときには寿命がすでに尽きていることも考えられる。
これらを考え合わせると、長期間で最適化したパラメータ値を使うこと、それをアップデートせずに使い続けるのはあまりよくないことのように思われる。
逆指値注文のモデル別パフォーマンス
ある逆指値注文を使ったブレイクアウト戦略をMT5でモデル別にバックテストしてみた。
期間は直近1年。
モデルが始値のみのときの損益、期待利得、PF、RFをそれぞれ100とした場合、
全ティック:95 93 97 77 リアルティック:68 63 85 55
という結果だった。
延滞は「遅延ゼロ、理想的な実行」にしているからスリッページの影響はないはず。
価格変化とスプレッドの違いによるものだろう。
リアルティックでのパフォーマンスの劣化が著しいが、逆に言えば始値のみのパフォーマンスが過大評価されているのだ。
全ティックでも始値のみ寄りの結果で、かなり甘い。
トレード戦略にもよるだろうが、始値のみや全ティックでバックテストした場合、実際のパフォーマンスはかなり劣化すると想定しておくべきだ。
全ティックだから正確、などと考えてはいけない。
RFが最も劣化している点にも注意が必要だ。
始値のみ、全ティックでは含み損の想定がそれだけ甘くなるということになる。
市販のEA
市販のEAはパラメータをそのままにして使うものが多いと思う。
ユーザーが変更できるのはロット数など、主にリスク管理に関するものに限られる。
テクニカルなどのパラメータもあるはずだが、ストラテジーテスターのパラメータには表示されない。
このようなパラメータはロジックの核心に関わるもので、非公開、つまりブラックボックスとなっている。
隠す代わりにパラメータは開発者が販売時点で最適化しているはずだ。
だが、そのようなパラメータはその後どんどん劣化していく。
パフォーマンスはそのEAが販売開始したときがMAXだろう。
こう考えると、EAはやはり自作に限る。
破綻するEAでも使える?
破綻するEAでも使えるという考え方があるようだ。
破綻する前に利益をこまめに出金するということを繰り返し、破綻しても原資以上の出金ができればトータルではプラスだ、という考え方らしい。
例えば、口座に100万円を入金する。
10万円利益が出たら出金し、利益が出なければ損切りはせずに破綻するまで放置するとしよう。
そして、20回出金し、200万円利益が出たところで、破綻したとする。
原資の100万円は失われたが、それ以上の200万円を出金したのでトータルでは100万円の利益だ。
だが、もし原資以上の出金ができる前に破綻してしまったら、それでおしまいではないだろうか。
そこで、実は資金が1000万円あったとすることにしよう。
入金は100万円だけにし、破綻した場合はまた100万円入金して再チャレンジする。
そして、1000万円すべてが失われる可能性はほとんどなく、長期的にはプラスとなる可能性が高いとしよう。
こういうことであるなら、破綻するEAでも使えると言えそうだ。
だが、1つ疑問がある。
別に破綻させなくても同じことができるのではないか、ということだ。
例えば口座に1000万円入金する。
しかし、ロット数は100万円のときと同じとする。
10万円利益が出たら出金する。
入金額を除けばここまでは同じだが、100万円の含み損を抱えたら損切りして仕切り直すこととする。入金額が1000万円なので、100万円の含み損では破綻しない。
だが、資金が1000万円あり、入金額100万円で破綻して再入金するのも、初めから1000万円入金して100万円の含み損で損切りするのも実質的に結果は同じではないだろうか。
だとすると、このEAは100万円で損切りして破綻しないのだから、実は「破綻するEA」ではなくて「破綻しないEA」なのだ。
こう考えると、「破綻するEAでも使える」というのは正しくなく、「破綻しないEAを部分的に破綻させながら利益を上げるような運用方法もある」というのが正確ではないだろうか。
では、なぜ破綻しないEAをわざわざ破綻させるような運用の仕方をするのか。
どうやら「破綻するEA」というのはナンピンマーチンなどのハイリスクなEAを海外FXのゼロカットシステムを利用して運用することを前提としているようだ。
損切りだとすべることがある。
損切りの代わりに破綻させる場合、すべるということは追証があるということになる。
だが、海外FXのゼロカットシステムを利用すれば追証がないわけで、これはつまり損切りですべらないということになるだろう。
あくまでも海外FXを利用すればの話だが、損切りする代わりに破綻させるというやり方も一応の理屈はありそうだ。
また、国内、海外を問わず、FX会社というのは全面的に信頼するのもリスクがあるので、資金の一部しか入金しないというのも合理的ではある。
ただ、日本の規制を受けない海外FXで運用するのはよりリスクが高いと私は考えている。
また、破綻した場合、強制ロスカット手数料を徴収されることもあるのではないだろうか。それは余分な出費になる。
そして、やはり勘違いしてはならないのは「破綻しないEAを部分的に破綻させながら利益を上げるような運用方法もある」のであって、「破綻するEAでも使える」ということではないことだ。
勝てないEAでも海外FXを利用し、まめに出金すれば勝てるEAに生まれ変わるなどと考えては痛い目に逢うだろう。
バックテストにおけるスワップ
MT5でデフォルトの設定でバックテストすると、損益にスワップが加算されると思う。
だが、スワップのヒストリカルデータがあって、それがトレード日に応じて加算されているわけではなく、ストラテジーテスターで設定されている数値が一律に加算されているだけなので、知らない人は注意が必要だ。
ストラテジーテスターで設定されている数値はバックテストした日のスワップに基づいている。数値が更新されるタイミングは分からないが、私が主に利用している取引会社では日本時間で日付が変わる前後のようである。
同じバックテストを別の日にしたら、結果が微妙に違うという経験をした人はいないだろうか。
それは恐らく加算されたスワップの違いによって生じたものだと思う。
微妙に違うだけでも気持ち悪いが、買いだけ、または売りだけの戦略の場合、問題が起こる。
スワップに違いがあっても、売買両方ある戦略ではプラスとマイナスが相殺されて、それほど影響しない。
だが、買いだけ、または売りだけの戦略だと、スワップのプラス、またはマイナスだけが蓄積されるので、大きな影響が出ることもある。
たまたまスワップが大きい日にバックテストすると、全体の損益のかなりの部分をスワップによる損益が占めてしまい、バックテスト結果が信用できなくなることもある。
祝日の関係もあるので一概に言えないが、私が主に利用している取引会社の場合、木曜日が3、4倍になる。
もしスワップが3、4倍になった日に買いだけ、または売りだけの戦略をバックテストし、それがプラスのスワップであったなら、本来なら微妙なパフォーマンスだったはずの戦略が突然、聖杯になってしまうということも起こるだろう。
それで勘違いして使ったら勝てなかった、というようなことにもなりかねない。
私はそれが嫌なのでスワップは0に設定している。
スワップをあくまでもおまけと考え、売買での損益を重視するなら、スワップを0にしても大きな問題はないだろう。
バックテストする日によって結果が変わるよりはいいと思う。
0に設定するにはストラテジーテスターで、
とすればいい。
元に戻したい場合は
- 銘柄の行の右端にあるアイコンをクリックする
- 「テスト済みの銘柄」ウィンドウで「初期値」ボタンをクリックする
- 「YES」ボタンをクリックする
とする。
ただし、「買スワップ」、「売スワップ」以外にも設定を変更していた場合、それも初期値に戻ってしまうので注意。
スプレッドが狭くなると得をする?
スプレッドが広くなったときに売買して狭くなったときに決済すればもしかして得をする?とふと思ったので一応考えてみる。
以下の状況を想定する。
- BIDとASKの中間値が1日を通して変化せず、100円だとする。
- 早朝前のスプレッドは0円で、BIDもASKも100円だとする。
- 早朝のスプレッドは0.1円で、BIDは99.95円、ASKは100.05円だとする。
- 早朝後のスプレッドは0円で、BIDもASKも100円だとする。
早朝前に買って早朝前に決済すると、100円で買って100円で決済するので損益は0円。
早朝前に買って早朝に決済すると、100円で買って99.95円で決済するので損益は-0.05円。
早朝前に買って早朝後に決済すると、100円で買って100円で決済するので損益は0円。
早朝に買って早朝に決済すると、100.05円で買って99.95円で決済するので損益は-0.1円。
早朝に買って早朝後に決済すると、100.05円で買って100円で決済するので損益は-0.05円。
早朝後に買って早朝後に決済すると、100円で買って100円で決済するので損益は0円。
整理すると
- 買いと決済がいずれも早朝以外の場合、損益は0円
- 買いと決済のいずれかが早朝の場合、損益は-0.05円
- 買いと決済がいずれも早朝の場合、損益は-0.1円
となる。
早朝に買った(スプレッドは広くなる)場合、早朝後に決済(スプレッドは狭くなる)すれば、同じ早朝に決済するより損失は小さくなるが、やはり損失はある。
スプレッドがある限り、常に損失が生じる。スプレッドが狭くなることで損失が小さくなることはあっても、それが利益に転じることはない。ここではスプレッドがマイナスになることは考えない。
結論、得はしない。当たり前か(笑)
投資適正テスト
投資詐欺に遭ったり、馬鹿げたトレードをして大金を失う人が少なくない。
そういう人は初めから投資に手を出さないほうが幸せだと思う。
そこで、投資適性テストを独断と偏見で思いつくままに書いてみる。
イエスかノーか。
もし下のリストでいくつもイエスだという人がいたら、投資適性を疑ったほうがいいと思う。
- アナリストが上がると言えば買い、下がると言えば売る。
- 買ったら下がってしまった。他の人の意見を見てみると、下がると言う人もいるが、上がると言う人もいる。このまま持ち続けよう。
- こうすれば勝てると聞けば検証せずにすぐ実行する。
- 優秀なトレーダーを信じ、交流することが勝つための早道だ。
- 人を信じないのは遠回りであり、勝てるようになる機会を捨てるものだ。
- 優秀なトレーダーを信じ、交流することで勝てるようになったと言う人がいる。私も信じ、交流しよう。
- 将来、大きな利益を得られることを考えれば、商材に金を使うのは必要経費だ。
- だめな商材もあるが、いい商材だってある。
- 一人で努力するだけではなかなか勝てるようにはならない。
- 投資で儲けている人を見ると羨ましい。
- SNSで日々勝っていることを報告している人を見るとすごいと思う。
- SNSで日々勝っていることを報告している人を見ると胡散臭いと思う。だが、自力ではなかなか勝てないし、もしこの人が本物でそれを疑うのは利益を得る機会を失うことになる。よし、信じてみよう。
- SNSでフォロワーが多く、たくさんの人がこの人のおかげで勝てるようになったと言っているから、この人に付いて行こう。
- SNSでEAやnoteなどの無料配布と聞くとすぐ応募する。
- 友達から儲かる話を聞いた。SNSの知り合いではなく、リア友だから信じて大丈夫だ。
- この人の言うことを聞いて何回かトレードしたら勝てたので、この人は信頼できる。
- 聖杯はどこかにある。
- これは聖杯EAだと言っている人がいる。胡散臭いが、もしこれが本物でそれを疑うのは利益を得る機会を失うことになる。よし、買ってみよう。
- バックテストで資産曲線がきれいな右肩上がりのEAは今後も勝つと思う。
- 優秀なEAの値段が高いのは当然だ。
- このEAはバックテストで勝っているし、フォワードテストでも買っているから本物だ。
- このEAで何回かトレードしたら勝てた。もっと儲けたいからロットを増やそう。
- このEAで何回かトレードしたら負けた。使うのはやめよう。
- 損切りすると負けが確定するが、含み損は負けではない。
- 投資をやらないということは利益を得る機会を捨てるということだ。
- 1日トレードしなければ1日利益を得る機会を捨てたことになる。
- レバレッジ25倍は小さすぎる。
- レバレッジをかけるほど大きな利益を得られる。
- 資金が足りないので家族のために積み立てたお金を使おう。大儲けして家族を驚かせたい。
まだ他にもありそうだが、とりあえずこの辺で。
ペイオフレシオとトレーリングストップ
ペイオフレシオを3倍でエントリーしたとする。
もし100円で買って103円で利食うとしたら、99円で損切りすることになる。
価格が101円に上昇すると、利益幅は2円、損失幅も2円でペイオフレシオは1倍になる。
価格が102円に上昇すると、利益幅は1円、損失幅は3円でペイオフレシオは0.33倍になる。
利食い価格、損切り価格を固定にすると、利益が乗ったときにペイオフレシオが急速に悪化することが分かる。
次に、トレーリングストップを加えるとする。
価格が101円に上昇すると、損切り価格は100円になる。
利益幅は2円、損失幅は1円でペイオフレシオは2倍になる。
価格が102円に上昇すると、損切り価格は101円になる。
利益幅は1円、損失幅は1円でペイオフレシオは1倍になる。
利食い価格、損切り価格が固定である場合よりは遅いが、やはりペイオフレシオは悪化する。
最後にペイオフレシオを3倍に維持するとする。
価格が101円に上昇すると、損切り価格は100.33円になる。
利益幅は2円、損失幅は0.67円でペイオフレシオは3倍のままとなる。
価格が102円に上昇すると、損切り価格は101.67円になる。
利益幅は1円、損失幅は0.33円でペイオフレシオは3倍のままとなる。
このように損切り価格の上昇を価格の上昇より速くすることで、ペイオフレシオを維持することができる。
さて、利食い価格と損切り価格を固定にすると、利益が乗った場合にペイオフレシオが急速に悪化することが分かった。
ここで利食い直前の状況を考えてみよう。
100円で買って103円で利食い、99円で損切りする場合、もし価格が102.99円に上昇したとしたら、固定では利益幅が0.01円、損失幅が3.99円で、ペイオフレシオは0.0025倍となる。
このようなひどいペイオフレシオでエントリーする人は普通いないと思う。
ではなぜエントリーしてしまうと、ペイオフレシオの悪化に無頓着になるのだろうか。
もしペイオフレシオを維持するのがよいのだとすると、トレーリングストップは合理的な手段だ。
しかし、通常のトレーリングストップでは不十分で、買いならば価格の上昇より速く損切り価格を引き上げる必要がある。
逆に買った後に価格が下落した場合も考えることができる。
先ほどのエントリーを例にすると、価格が0.5円下落したら、損失額は0.5円なので、ペイオフレシオを維持するなら利益幅を1.5円にしなければならない。
エントリー時点の利益幅は3円だったので、価格の下落より速く利食い価格を引き下げる必要があるわけだ。
こういう場合はトレーリングリミットと呼ぶのだろうか。
私はこのようなトレーリングストップ、またはトレーリングリミットを採用してはいないが、一つの考え方ではあると思う。
スプレッドの急拡大
スプレッドの急拡大でストップがついてしまうということはあってもリミットがついてしまうということはない。
例えば買いポジションを保有していて現在価格の上にリミットを、下にストップを置いていたとする。
ここでスプレッドの急拡大が起きたとしよう。
買いポジションの決済はBIDで行われるからBIDだけを見る。
スプレッドが拡大したとき、BIDは下に動く。
するとリミットからは遠ざかり、ストップに近づく。
だから、「スプレッドの急拡大でストップがついてしまうということはあってもリミットがついてしまうということはない」というのだ。
MT5ではバックテストでスプレッドの変化を細かく反映させたいと思っても、使えるのは最も細かいもので1分足のスプレッドなので、せいぜい1分間隔だ。
しかもMT5の仕様では、1分足のスプレッドは1分間で最も小さいスプレッドのようなのだ。
つまり、スプレッドは実際より小さくなっており、しかも、1分間変わらない。「全ティック」でバックテストしてもだ。
したがって、スプレッドの急拡大はバックテストでは限定的にしか反映されず、実際にはストップが先についたのに、バックテストではストップはつかずにリミットがついた、ということが起こりうる。
逆に、実際にはリミットが先についたのに、バックテストではリミットはつかずにストップがついた、ということは起こらないだろう。
スプレッドの急拡大を十分に反映させるには「リアルティックに基づいたすべてのティック」でバックテストする必要がある。
それ以外のモデルでバックテストした場合、パフォーマンスは多かれ少なかれ、過大評価されることはあっても過小評価されることはないだろう。
ブレイクアウト戦略
ブレイクアウト戦略では直近高安のブレイクを使う人が多いかもしれないが、ボリンジャーバンドのブレイクもなかなかの優れ者だ。
直近高安を使ったブレイクアウト戦略を持っているなら、直近高安の部分をボリンジャーバンドに差し替えて試してみるのも悪くないと思う。
パフォーマンスや再現性が向上することもありうる。
直近高安とボリンジャーバンドを併用するというのも考えられるが、これはあまりお勧めしない。
別に相性が悪いというわけではなく、似たような指標をごちゃごちゃと組み合わせて複雑にするのはシステムを不安定化させると思うからだ。
複雑にすればバックテストではパフォーマンスは上がるが、再現性があるかは怪しい。
ストラテジーテスターのモデル
その1
スキャル戦略をモデルを「始値のみ」にしてバックテストするとパフォーマンスがいいことがある。
ところが、「全ティック」や「リアルティックに基づいたすべてのティック」でバックテストすると資産曲線が一直線の右肩下がりで負けたりする。
モデルが「始値のみ」の場合、利食い幅と損切り幅が狭いとどちらが先に到達したか明らかでなくなることがある。
だからと言って、利食いに有利に働くかどうかは分からないが、「始値のみ」のほうがパフォーマンスがいい印象がある。
また、「始値のみ」では1分足でも1分に1回しかエントリーできないが、「全ティック」や「リアルティックに基づいたすべてのティック」ではもっと高頻度でエントリーできるので、その分、コストがかさんだり、あまり有利でないトレードを繰り返したり、ということが起きるのかもしれない。
このようなことはスキャル戦略で著しいが、利食い幅と損切り幅を設定する限り、値幅の大きい戦略でも起こりうる。
すると、「始値のみ」、「全ティック」、「リアルティックに基づいたすべてのティック」でバックテストの結果に差が出てくる。
もちろん、実際のトレードでのパフォーマンスとも乖離が生じる。
このようなことを避けるためには、エントリーやエグジットはテクニカル指標や時間などで行い、指値や逆指値は使わない、というのが一つのやり方だ。
こうすると、バックテストでのパフォーマンスが落ちることもあるが、元々、パフォーマンスが過大評価されていたのであり、本来の実力に近づいただけとも考えられる。
私はバックテストでのパフォーマンスより本来の実力を知りたいので、指値や逆指値は損切りの逆指値を除いて基本的に使わない。
こうすれば、モデルを「始値のみ」にしようと、「全ティック」、「リアルティックに基づいたすべてのティック」にしようとパフォーマンスに大差がないので、「始値のみ」を使って検証時間を短縮することもできる。
逆に言うと、モデルを変えただけでパフォーマンスが大きく変わるようなら、実際のトレードでのパフォーマンスも大きく変わるだろう。
その2
ポジションを翌週まで持ち越したとする。
そして、月曜朝に大きな窓が開き、ストップ、またはリミットがついたとする。
MT5のバックテスト上ではいくらで決済されるだろうか。
1分足で「始値のみ」で調べてみると、ストップ、またはリミットを超えてはいるが、金曜日終値に近い価格で決済されていた。
「全ティック」だとストップ、またはリミットを大きく超え、月曜日始値に近い価格で決済されていた。
だとすると、「始値のみ」は窓を反映していないようだ。
得することもあれば損することもあるだろうから、総損益は大差ないだろう。
だが、最大勝ちトレードが実際にはもっと大きい可能性がある一方で、最大負けトレードもやはり実際にはもっと大きい可能性があるというのはリスク管理の面で気にはなる。
もし最大負けトレードを参考にしてロットサイズを決めるのであれば、「全ティック」でも確認しておくのが無難だ。
その3
トレーリングストップを使った戦略を「全ティック」でバックテストすると、「始値のみ」と比べて損益、PFはあまり変わらないが、RFはかなり劣化する場合がある。
なぜそうなるかはよく分からない。
その4
ストップ幅が狭い戦略はパフォーマンスが過大になる傾向がある。
「始値のみ」、「全ティック」でバックテストするとパフォーマンスはよくても「リアルティックに基づいたすべてのティック」でバックテストするとパフォーマンスががくっと落ちることがある。
実際にはスプレッドの急拡大でストップが付いてしまったのに、「始値のみ」、「全ティック」のバックテストでは反映されないケースがあるからだろう。
通貨ペアにもよるだろうが、ストップ幅が15pipsくらいだと、そういったケースが頻発して乖離が生じてきそう。
40pipsくらいあれば乖離はあまり生じない印象。
最適化は時間の節約のためにも「始値のみ」でいいと思うが、ストップ幅が狭い戦略では最適化したパラメータを使用する前に一度は「リアルティックに基づいたすべてのティック」で確認するほうがいい。
負ける要素を除去すれば勝てるのか
例えば、その日の始めに買って終わりに決済するとする。
そして、曜日別に損益を見ると火水金がプラスで月木がマイナスであったとする。
そこで、火水金のみ買う、というルールを加える。
まずまずのパフォーマンスになった。
よし、これで行こう!
と、安直に考えるのはやめたほうがいい。
別の検証期間では全く別の結果になるかもしれないからだ。
検証期間をイン期間とアウト期間に分け、イン期間でルールを作ってアウト期間で確認する。
この作業を省くと、バックテストで勝てる売買ルールは簡単に作れるが実際には使い物にならない、ということが起こり得る。
フィルターを加えて負けを除去していけば、残るのが勝ちなのは当たり前のことだ。
だが、再現性がなければバックテストの結果がどれほどよくても何の意味もない。
負ける要素を除去していけば勝てる戦略になる、というほど簡単なものではないのだ。
1分足OHLC
MT5で形成中の最新バーの終値
C0:iClose(NULL,0,0)
を1分足OHLCで見ると、
その足が陽線の場合は
00秒:C0=その足の始値 20秒:C0=その足の安値 40秒:C0=その足の高値 59秒:C0=その足の終値
その足が陰線の場合は
00秒:C0=その足の始値 20秒:C0=その足の高値 40秒:C0=その足の安値 59秒:C0=その足の終値
という順に変化していくようだ。
陽線だと安値が先で高値が後、陰線だと高値が先で安値が後、と機械的に決めているらしい。
値動きの流れを考えれば自然ではある。
実際には全てではないにしても多くはこの順序だろう。
それはさて、「1分足OHLC」は危険だと思う。
例えば「モデル」を「1分足OHLC」にして〜円以下になったら成行で買うとする。
すると、その条件を満たした1分足の安値で買うことになる。
だが予知能力でもない限り、実際に安値で買うなど不可能だ。
従って逆張りだとパフォーマンスが過大になってしまう。これでは聖杯を見つけたと勘違いしかねない。
逆に〜円以上になったら成行で買うとする。
するとその条件を満たした1分足の高値で買うことになる。
今度は順張りだとパフォーマンスが過小になるという結果になる。
これを避けるには成行ではなくて、指値、逆指値を使うべきだろう。
そうすれば高値、安値ではなく、指定した指値、逆指値で売買できる。
だが、それなら「1分足OHLC」ではなくても、タイムフレームを「M1」にした上でモデルを「始値のみ」としても大差はなく、しかも速い。
「1分足OHLC」では成行は使わない、いっそのこと、「1分足OHLC」自体を使わないとしたほうがよさそうだ。
買いのみ、または売りのみのトレード戦略
仲値前の買いと仲値後の売りは非対称なトレード戦略なので仕方がないが、特に理由がない限り、買いだけ、あるいは売りだけというトレード戦略はよくない。
また、買いのエントリー条件は緩く、売りのエントリー条件は厳しいといったように、売買両方をやっているが、条件が異なり、売買に偏りがあるのもよくない。
極端な例だが、ある銘柄に対してバイ・アンド・ホールドとセル・アンド・ホールドの戦略を採用したとする。
一方が勝っていれば、もう一方は負けているだろう。
だからといって、勝っているほうが負けているほうより優れているということにはならない。
たまたま検証期間において買いが、あるいは売りが優位だったというだけに過ぎないのだ。
バイ・アンド・ホールドやセル・アンド・ホールドのような戦略では勝っていても大した勝ちではないだろう。
だからバックテスト結果を見ても採用しようとは思わない。
だが、これにナンピンやナンピンマーチンが加わるとどうなるか。
突如として魅力的な戦略に見えてくる。
ナンピンやナンピンマーチンというのは鬼滅の刃で例えるなら、寿命の前借りというやつだ。
早死にと引き換えに驚異的なパフォーマンスを発揮するのだ。
これにナンピンやナンピンマーチンを加えると、例えば売りだけの戦略は破綻するかもしれないが、そのとき、買いだけの戦略は大きな含み損を抱えることもほとんどなく、聖杯のように見えるだろう。
だが、それもたまたまであって、聖杯のように見える戦略も破綻した戦略も実質は同じなのだ。
買いだけ、あるいは売りだけのナンピンEA、ナンピンマーチンEAを見かけて、それがどれほど素晴らしいパフォーマンスだったとしても、安易に手を出さないほうがいい。
仲値トレード
仲値トレードをする人は多いと思う。
ただ、仲値トレードをゴトー日ではない金曜日にやる人、仲値前に買って負けたのに続けて仲値後に売る人も時折見かける。
私はこれに対し
- ゴトー日でない金曜日にトレードするメリットは少ない。
- 仲値買いがなければ仲値売りもない。
と考えている。
ゴトー日でない金曜日にトレードするメリットは少ない
仮に仲値トレードを毎日やるとする。
パフォーマンスを曜日別に見ると、金曜日のパフォーマンスが特によいことが分かるだろう。だからゴトー日であるかいなかを問わず、金曜日に仲値トレードをやろうとする人がいても不思議ではない。
だが、金曜日だからパフォーマンスがよいのだろうか。そういう要因が全くないとは言わないが、私は違うと考えている。
土日がゴトー日の場合は金曜日がゴトー日となるので金曜日は他の曜日と比べてゴトー日になる確率は3倍だ。
金曜日のパフォーマンスがいいのはゴトー日になる確率が高いからだと思う。
実際、ゴトー日でない金曜日のパフォーマンスはいまいちだ。
仲値買いがなければ仲値売りもない
仲値売りは仲値買いの反動だから、仲値に向けた買いがなかった場合、仲値通過後の売りもなくなる。
仲値前に買って負けた後、仲値で売るのは往復ビンタになりやすい。
仲値前に買いがあったか(上昇したか)いなかで分けてバックテストすると、仲値前に買いがあったときはパフォーマンスがよく、買いがなかったときはパフォーマンスがいまいちなのが分かるはずだ。
だから仲値前に買って負けたのに、続けて仲値で売るのはどうかと思う。
ところで、仲値前に買いがなかったというのと自分が買って負けたというのとは必ずしも一致しない。
例えば仲値の7時間前に買うとパフォーマンスがいいとする。
だが、仲値売りをするために仲値買いがあったかどうかを判定するとき、仲値1時間前の価格と比較したほうがパフォーマンスがいいとする。
もし、仲値7時間前に買って最初の6時間は下がり続け、最後の1時間で上がったものの負けたとする。
この場合、仲値前に買って負けたが、仲値後に売ってもいいのである。
それにしても7時間と1時間は大きな差だ。
なぜ同じにならないのか。
要因の一つとしてトレンドの存在があると思う。
例えば、検証期間が上昇トレンドにあったとする。
すると買いは保有時間が長いほど有利になりやすい。
このため、仲値前に買う時間は早いほうがパフォーマンスはよくなる。
一方、上昇トレンドは売りには不利に働く。
だからエントリーは抑制するほうが有利になりやすい。
仲値前から遡る時間が長いほど上昇しやすく、エントリーしやすくなるのだとしたら、遡る時間は短いほうがエントリーしにくくなり、パフォーマンスはよくなる。
そこで、もし仲値の7時間前に買うのがパフォーマンスがよく、仲値から1時間遡った時間を基準にして買いの有無を判定して売るのがパフォーマンスがよいのだとしたら、それは検証期間が上昇トレンドにあるからなのかもしれない、と考えるわけだ。
買いと売りの条件が対称の場合、買いが有利なときは売りが足を引っ張り、その逆もまたしかりなので、結局は買いと売りにバランスよく有利なパラメータ値を見つけることができるだろう。
だが、仲値前の買い、仲値後の売りは非対称なので、同じようにはできない。
仲値前の買い、仲値後の売りを1つの戦略にし、仲値前に買いを入れる時間と買いの有無を判定するための基準時間を同じにするという考え方もあるだろう。
だが、買いがなかった場合に売りをやらないのだとすると、単純に考えて仲値後の売りのトレード数は仲値前の買いの半分にしかならない。
このため、仲値前の買いのほうが大きな割合を占め、仲値前の買いに有利な時間に引きずられるので、必ずしも買いと売り双方にバランスの取れた時間にはならない。
したがって、仲値前の買いと仲値後の売りは別々の戦略と考えたほうがよさそうだ。
トレンドの影響は気になるが、その場合は検証期間の開始日と終了日の価格がほぼ同じとなるような検証期間を選択するというのも一案だ。
MT5の通知
MT5からの通知を設定したい場合、
- メニューバーで「ツール」をクリックする。
- 「オプション」を選択する。「オプション」ウィンドウが表示される。
- 「オプション」ウィンドウで「通知」タブをクリックする。
- 「通知」タブで「取引サーバからの通知」にチェックを入れる。
- 「MetaQuotes ID:」に通知先のMT5のMetaQuotes IDを入力する。
- 「OK」ボタンをクリックする。
とする。
通知先のMT5のMetaQuotes IDを調べたい場合、AndroidスマートフォンのMT5では
- 「メッセージ」をタップする。
- 「MQID」ボタンをタップする。
とすれば表示される。
取引サーバではなく、通知元のMT5から通知を出したい場合は
- 「通知」タブで「プッシュ通知機能を有効にする」と「ローカルターミナルからの通知」にチェックを入れる。
以外は取引サーバからの通知と同じ。
「ローカルターミナルからの通知」を設定した場合、通知元のMT5を起動していないと通知が来ないので、「取引サーバからの通知」のほうがいいと思う。
両方を設定すると、同じ通知が2つ来てうるさい。
口座情報の削除
MT5で口座にログインするとき、以前にログインしたことのある口座のリストから選ぶことができる。だが、すでに存在していない口座がたくさんあると邪魔になることもある。
すでに存在していない口座をリストから削除したい場合は
- 「ナビゲータ」で「口座」を展開
- 削除したい口座を右クリック
- 「削除」をクリック
の順でできる。
これはあくまでも口座情報をMT5から削除しているだけで、口座そのものを取引会社から削除しているわけではない。心配なら存在していない口座情報のみ削除するばいい。
変動スプレッドの落とし穴
MT5は変動スプレッドでバックテストできるので、MT4のように固定スプレッドを設定する必要もなく、便利だ。
だが、落とし穴もある。
スプレッドの情報がない場合、スプレッドが0になっているのだ。
例えばOANDAのXAUUSD。
2021年4月以前のスプレッドは0になっている。
この期間でバックテストすると、簡単に聖杯ができてしまう。
一般的には固定スプレッドより変動スプレッドのほうが実際の環境に近い。
だが、変動スプレッドでバックテストしたからといって信用できるものとは限らないのだ。
ナンピンEA
私は損切りなしのナンピンEAは使わないが、一応作ってはいる。
いくらか深い含み損を抱えることもあるが必ず戻すので、使ってみたくもなる。
だが、戻す保証はないので使わない。
それはさて、作ったナンピンEAで損切りを利食いの何倍にすれば損切りなしと同じ結果になるか簡単に調べてみた。
すると1000倍に…😱
単純に計算すれば勝率は99.9%以上になるから、むしろ勝つのが当然だ。
だが、負けたときは勝ったときの1000倍の損失となる。
実際には保有ポジション全体の合計損益で利食っているので、その意味では勝率は100%だが、個々のポジションでは勝率は85%と負けることもあり、平均損失は平均利益の3倍程度となっている。
これだと「ちゃんと損切りしてますよ」と嘘をつけなくもない。
勝率が100%でなければ損切りしているようにも見えるが、これはナンピンを利用したごまかしだ。
話は変わるが、昔から「損切りするから負けるのだ。損切りしなければ負けない」と豪語するトレーダーを何人も見かけた。
あのトレーダーたちは今でも生き残っているのだろうか。
最適化の指標について
EAを最適化する際、パフォーマンスを評価する指標には様々なものがある。
取引数で評価するとサンプルも多くなるので信頼性が高まる。だが、取引数自体は勝ち負けとは関係ないので、これは補助的な指標だ。
1000回は必要だという人がいる。
最適化するパラメータの数✕30〜100回は必要という人もいる。
私の場合、最適化するパラメータの数は1〜4個だが、パラメータが少なくても取引数が200回くらいはないと再現性もかなり落ちるような感じがする。
総損益で評価すると取引数が多くなる傾向がある。
取引数が多いこと自体はサンプルが多いということで、信頼性も高まる。
ただ、リスクを考慮していないため、薄利多売になりがちだ。
コストのわずかな変化がパフォーマンスに大きな影響を与えることがあり、再現性もいまいちという印象がある。
PFで評価するとリスクも考慮される。
PFが高いと再現性もそれなりにある。
ただ、取引数が極端に少ない場合があり、その場合では信頼性も低くなる。
RFで評価するとリスクも考慮され、取引数が極端に少なくこともほとんどなく、バランスが取れている。
ただ、総損益ほどではないが、若干、薄利多売の傾向がなくもない。総損益は取引数に比例して増加するが、ドローダウンの増加は取引数の増加に比べるとかなり小さい。このため、総損益の大きさがある程度影響し、薄利多売の傾向を生む。
RF/バックテスト年数を使う人もいる。
これも悪くないが、これが1以上であれば、ドローダウンを1年以内に回復できると考えるのは正しくないと思う。
バックテスト年数が増えればそれに比例して取引数が増えるだろうし、取引数が増えればそれに比例して総損益も増えるだろう。
だが、ドローダウンの増え方はそれよりずっと遅いので、RFはバックテスト年数の増加より速く大きくなるだろう。
したがって、RF/バックテスト年数はバックテスト年数が増えるに連れて少しずつ大きくなり、バックテスト年数が5年だと1未満だが、10年に伸ばすと1を超えるということが起こり得る。
必ずしも「ドローダウンを1年以内に回復できる」ということではないのだ。
個人的にはRFで評価し、PFが1.5未満のものは除外、というのがよさそうに思う。
取引数は200回はほしいが、必ずしもそこで線は引かない。
アウトオブサンプルテストでの再現性を見て判断する。
最近はモンテカルロ・シミュレーションでのリターン・ドローダウン・レシオが2未満、タープの期待値が0.1未満のものも除外という条件を加えて試している。悪くない印象だ。
以前はLR相関も試してみた。これが1に近いほど、資産曲線は直線に近くなり、安定して資産が増える。
だが、大きな損失があった場合だけではなく、大きな利益があった場合でもLR相関は悪化する。
少数の取引結果が影響を与えることがあるので、LR相関が高くても本当に安定しているのか、たまたま運よく損益の大きな取引を避けられただけなのかははっきりしない。
そういう訳で最近は使っていない。
どのような指標を使うのか、どのように使うのかについてはなかなか答えが出ない。今はこうだと思っていても明日には考えが変わるかもしれない。これからも試行錯誤が続くのだろう。
ただ忘れてはいけないのは、どの指標をどう使えば再現性が高くなるかを常に意識するということだ。
他人がやっていることをやる必要はない。実際には役に立たないものも少なくないだろう。
自分にとって使い勝手がよく、再現性もあるようなら、それで十分だ。
災害時のトレードについて
災害が起きたときにトレードをするというのは悪なのだろうか。不謹慎なことなのだろうか。
災害時にトレードをしていると、「こんなときにトレードをするのは不謹慎だ」とか、「災害を利用してトレードするのはとんでもない」と非難する人がいる。13年前の東日本大震災のときもそうだったし、今の能登半島地震でもそうだ。
私は不謹慎であるとも悪であるとも思わない。トレーダーは状況に応じて金融商品を売買しているだけで、そうしなければ生きていけない。被災者が必要とする物資を買い占めて転売するような売買をしているわけではないのだ。
ただ、自分の利益と他人の幸福が相反するようなとき、居心地の悪さは感じる。
私がFXを始めたばかりのころ、ニュージーランド地震、東日本大震災が立て続けに起きた。
余震があったり、より深刻な被害状況が伝わると、NZドルは安くなり、円は高くなった。
だから、私はNZドルを売ったり、円を買ったりはしなかった。
余震が続いたり、被害状況がより深刻になることが利益になるのだとしたら、私にはそれを望む願望が生まれるかもしれない。
それが嫌だったからだ。
私は悪いことが起きるという予測はあまりしたくない。
なぜなら、予測をした以上は的中したいと思う。
的中することを望むということは、悪いことが起きるということを望むことになるからだ。
だが、これは心の弱い私の防衛策であって、他人に求めようとは思わない。
感情を排してトレードしたり、予測したりできる人もいるだろうし、それによって得た利益を困っている人に寄付する人もいるだろう。
人はそれぞれだ。
自分だけの正義感を振り回して他人のやることを一々非難するようなことは私の主義ではない。
ストラテジーテスターのスプレッド設定について
MT4でバックテストするときは固定スプレッドの値を設定する。
一方、EA側ではエントリーする際に許容する最大スプレッドを設定しているとする。
最大スプレッド>固定スプレッド
であるかぎり、エントリーは常に可能だ。
だが実際にはスプレッドは固定でないので、しばしば
最大スプレッド<実際のスプレッド
となり、エントリーが行われないということが起こり得る。
こうなると、実際のトレード数はバックテストでのトレード数よりずっと少なくなり、バックテスト結果が信用できないものになってしまう。
例えばポンドドルの朝スキャ戦略を作ったとする。
固定スプレッドは1.5pipsに設定する。利用するFX会社のスプレッドを調べると、ポンドドルは1日のうち、ほとんどの時間で1.5pips未満のようだ。
EA側では最大スプレッドを5pipsに設定しておく。
こうすれば、エントリーは常に可能となる。
バックテストすると、パフォーマンスも良好だ。これはいい!
だが、実際にトレードしてみると、トレード数はバックテストで想定される数と比べて激減し、トレードできた場合でもスプレッドが1.5pipsより大きくなっていて、想定していたより利益は小さく、損失は大きい。
なぜ、こういうことが起きるかといえば、早朝はスプレッドが通常の何倍、何十倍に広がることがあるからだ。
早朝にトレードするのでなければスプレッドから受ける影響は小さい。
スキャルでなければスプレッドから受ける影響は小さい。
だが、朝スキャは二重にスプレッドの影響を受ける。
したがって、MT4の固定スプレッドでバックテストした朝スキャ戦略のパフォーマンスはほとんど信用できないというわけだ。
もし朝スキャ戦略をバックテストするなら、実際のスプレッドに基づいた変動スプレッドを使う必要がある。
固定スプレッドは実際の平均スプレッドよりやや広めに設定することで負荷を与えることができる。
それはそれでメリットではあるが、MT4、MT5の仕様ではスプレッドをどう設定しようとBIDは変わらず、ASKだけが上下動する。
スプレッドを広く設定した場合、指値売りは影響を受けないが、指値買いはヒットしにくくなる。
逆指値売りは影響を受けないが、逆指値買いはヒットしやすくなる。
このように、スプレッドの設定は単に負荷を調整するだけではなくて、エントリーのタイミングにまで影響してしまうので、デメリットもある。
バックテストするときはそういう点も頭に入れておく必要がある。
ところで、MT5は変動スプレッドだ。
そこで、MT5を使って私の朝スキャEAを直近5年のポンドドルでバックテストしてみた。
エントリーは0時台のみ。
エントリーを許容する最大スプレッドによってトレード数がどう変化するかを調べた。結果は以下のようである。
100pips:175回 5pips:74回 3pips:44回 1.5pips:17回
スプレッドが100pipsを超えることは基本的にないので、100pipsはスプレッド無制限だと考えていい。
もしMT4を使って固定スプレッド1.5pipsでバックテストした場合、いずれの最大スプレッドでもトレード数は175回になる。
変動スプレッドの場合との乖離がいかに大きいかが分かるだろう。
最大スプレッド1.5pipsだとわずが17回で、10分の1に激減している。
しかも初めの2年で16回、後の3年で1回なのだ。直近ではトレードできる機会はないに等しい。
これはここ数年、早朝のスプレッド拡大がかなりひどい状況になっているのが原因だろう。
トレード機会をある程度生むにはエントリーする時間帯や許容する最大スプレッドを調整する必要がある。
ところがMT4の固定スプレッドでバックテストする人はそういうことにはお構いなしなのだ。実際にはトレード機会がないに等しいのに十分あると考え、パフォーマンスもいいと勘違いする。
人が公開するバックテスト結果は信用できないものが多いが、
MT4+固定スプレッド+朝スキャ
は特に信用できないと言っていいだろう。
そういえば、Xで今年(2023年)は朝スキャEAのパフォーマンスが悪かった、というポストを見かけた。
私個人は特に悪いとは感じていない。
そういう人はその朝スキャEAがどうやって作られたのかを確認したほうがいいかもしれない。
もしMT4+固定スプレッドで作られたEAなら作り直したほうがいいと思う。
スリッページについて
指値や逆指値を使うと、ネガティブスリッページは盛大に滑るのに、ポジティブスリッページはゼロか、ほぼゼロということがよくある。
FX会社がインチキをやっているのではないかと思ったりするが、そうとも言い切れない。
例えば、イベントで価格が上昇し、スプレッドも拡大したとする。
このとき、ASKは価格の上昇にスプレッドの拡大による上昇が加わるので、上昇は加速する。
一方、BIDは価格の上昇にスプレッドの拡大による下落が加わって上昇は減速する。
スリッページが上昇速度に比例するなら、買うときのネガティブスリッページが大きく、売るときのポジティブスリッページが小さくなるのは理由のあることだ。FX会社のインチキとばかりは言えない。
イベントで価格が下落し、スプレッドが拡大した場合では、売るときのネガティブスリッページが大きく、買うときのポジティブスリッページが小さくなるということが起こるだろう。
とはいえ、価格の変化は常にスプレッドの拡大を伴うわけではないから、ネガティブスリッページがポジティブスリッページより大きいことをいつでも正当化できるわけではない。
許容する最大スプレッドについて
普段、トレード戦略を開発するとき、許容する最大スプレッドは100pipsにしている。つまり、スプレッドがどんなに広がっても取引する。
そして最後に、バックテスト結果に影響しない範囲でスプレッドを絞る。
ドル円、ユーロ円だと3pipsくらいになることが多い。
3pips程度であれば、心理的にも受け入れていいかなと思う。
だが、もしそれが10pipsであったら、ちょっと受け入れにくいだろう。
そういう場合は最大スプレッドをどのくらいにするか、最適化するのもありかもしれない。
ただ、その場合も最適化が目的ではなく、心理的に受け入れられるレベルに収めるのが目的だ。最適化はバックテスト結果をよくするが、やりすぎると過剰最適化になって再現性を失う。やらないで済むならやらないほうがいい。
もし最大スプレッドを最適化するのであれば、取引数の減少がスプレッド無制限で取引する場合と比べて5%以内とすべきか。5%という数字に意味はないが、統計学の有意水準でよく使われる数字であり、5%程度なら異常なスプレッドでの取引ということで除外してもいいか、ということだ。
最大スプレッドの最適化の影響を小さくするためには、やはり先ずはスプレッド無制限で最適化を行って最適なパラメータを決定し、最後の仕上げで最大スプレッドのみを最適化するのがいいだろうか。最大スプレッドの最適化を他のパラメータの選択に影響させないほうがいいと思う。
朝スキャ戦略の場合は最大スプレッドをどの程度にするかということが特に重要になるので工夫が必要となるかもしれない。朝スキャ戦略の場合でも上記のやり方で最適化したいが、場合によっては最大スプレッドの最適化を他のパラメータの選択に影響させることも考える。
ポジションの分散について
ポジションは一度に取るのがいいのか、分散して取るのがいいのか。
個人的には一度に取るのがいいと考えている。
ポジションを取った直後に相場が急変して痛い目に遭うと、分散しておけばよかったと思う。
だが、分散しても往々にして勝つときはすべて、あるいはほとんど勝ち、負けるときはすべて、あるいはほとんど負けるものだ。
また、ある価格で、あるいはある時間にポジションを取るのはそのタイミングがベストだと考えるからだろう。
それを一定のpips、あるいは一定の時間の間隔を空けて分散するのはベストでないタイミングでポジションを取るということになる。1個のトレードだけを見ると、分散すればよかったと思うこともあるが、日々ベストでないタイミングでポジションを取る損失の積み重ねのほうが大きいようにも思える。
こういうことは理屈で考えても埒が明かず、データに聞くのが一番だ。
間隔を空ける一定のpips、一定の時間で最適化してみればいい。
もし何pips、何分がよいという結果であれば分散効果はある。
だが、0pips、0分が最適という結果であれば、それは分散しないほうがいいということだ。
同じ銘柄、同じコンセプトのトレードであるなら、ポジションを取るタイミングを少しずらしたくらいで得られる分散効果は限定的だろう。もし分散効果を得たいのであれば、違う銘柄、違うコンセプトのトレードに分散するのが本筋だと思う。
ただ、分散したほうが安心だというのなら、バックテスト結果に関わらず分散したほうがいいとも思う。
快適にトレードする、ということも長くやるには大事なことだからだ。例えば、週末はポジションを気にせずに過ごしたいなら、持ち越したほうがバックテスト結果がよかっとしても閉じたほうがいい。不安を抱えたまま週末を過ごすということは、それはそれで損失なのだ。
MT5の時間について
MT5のツールボックスで「取引」や「口座履歴」の時間はサーバー時間、「エキスパート」や「操作ログ」の時間はPC時間だ。
EAはサーバー時間に基づいて動く(あえてサーバー時間以外を使うようにコードを書いていない限り)ので、仮にMT5を稼働しているPCの時間が遅れていたり進んでいたりしても影響はない(多分)。
フォワードテストの手順
- ストラテジーテスターの「フォワードテスト」で例えば「1/3」を選択する。すると、「日付」で指定された期間の初めの2/3がイン期間、残りの1/3がアウト期間となる。つまり「1/3」とはアウト期間の割合ということだ。「1/2」、「1/4」でも同様。「カスタム」を選択した場合、その右側の日付を指定すると、その日付の前がイン期間、後がアウト期間となる。
- 「オプティマイズ」で「完全アルゴリズム(遅い)」に設定する。時間をかけたくない場合は「遺伝的アルゴリズム(速い)」でもよい。
- 「スタート」をクリックする。
すると、イン期間、アウト期間それぞれで最適化するので結果を比較する。
なお、「オプティマイズ」で「無効化」に設定すると、イン期間、アウト期間ともに「値」で設定されたパラメータ値でバックテストされる。
MT5の謎仕様
MT5で最適化するとき、例えば
- スタート:2
- ステップ:4
- ストップ:20
の設定だと、2、6、10、14、18の5回のバックテストになる。 ところが、
- スタート:0.2
- ステップ:0.4
- ストップ:2.0
の設定だと、0.2、0.6、1.0、1.4、1.8、2.2の6回のバックテストになる。
ポジションのコメントについて
MT5でコメントをつけたポジションを部分決済すると、残りのポジションはコメントなしになる。