最強のスキャルピングEA|聖杯・・・?

2018年10月24日

ダイヤモンド

今回は、バックテスト上で最強のパフォーマンスとなるスキャルピングEAをご紹介します。

見た目では、完璧な聖杯と言えるレベルで全く隙がありません。

しかし・・・

売買ルール

Entry判定

以下条件の場合にEntryします。

[買いルール]
[N]ティック連続で上昇
[売りルール]
[N]ティック連続で下降

Exit判定

以下条件の場合にExitします。

[買いポジション決済ルール]
[N]ティック連続で下降
[売りポジション決済ルール]
[N]ティック連続で上昇
スキャルピングタイプなので、全ティックで動くプログラムとします。
元々OnTick()自体がそういう仕様なので、逆に何も制御しなければ全ティックで動くことになります。

テスト

バックテスト

バックテストの条件は、以下にしました。

  • 通貨ペア・・・EUR/USD
  • モデル・・・全ティック
  • 期間・・・2014.01.01~2017.01.01
  • ロット・・・1

それではテストしてみましょう。
バックテスト結果

MT4のバックテストでは金額がドル表示になります。

ドル円レート110円で換算してみると、910584ドル×110円です。

計算してみると・・・

たったの3年で純益が1億円超え!!

そして・・・

トレード数が8万回以上!!

純益が1億円もあるのに最大ドローダウンがたったの10万円!!

さあ、このまま残った期間を使ってフォワードテストをして行きましょう。

 

フォワードテスト

バックテストと同じ条件で期間のみ変更しています。
本日が、2018年10月24日なので、およそ1年10か月のフォワードテストになります。

  • 通貨ペア・・・EUR/USD
  • モデル・・・全ティック
  • 期間・・・2017.01.01~2019.01.01
  • ロット・・・1

フォワードテスト結果

純益が201273ドル×110円で2200万円超え

トレード数が2万回以上

ドローダウンが10万円以下

 

評価

これほどのEAは今まで見たことがありません。

今すぐリアル口座で動かしましょう!

これであっという間に億万長者!!

 

 

 

 

・・・・・・・・

 

 

 

 

・・・・・・・・

 

 

 

 

・・・・・・・・

 

 

 

 

・・・・・・・・

 

 

 

 

・・・・・・・・

 

 

 

 

リアル口座で動かした結果

頭を抱える人

私はこのEAをリアル口座で動かしました。

詳細は明かしませんが、結果は全てマイナスです。

少しくらいの連敗なら特に気にするつもりはなかったのですが、私が想定していた取引回数をはるかに上回る頻度で取引が行われました。

バックテストでの18ティック連続の上げと、リアルでの18ティック連続の上げは全く異なるのです。

このEAのバックテスト結果は完全に異常で、リアルでも同じパフォーマンスを出せるならば借金してでも購入するべきです。

しかし、そう簡単には上手くいかないということですね。

当時を振り返ると、完成したときは本当に興奮したことを覚えています。
今まで作ってきたEAの数十倍のパフォーマンスで、ドローダウンも圧倒的に低いのですから。

何故バックテストとリアルの結果が異なるかと言うと、MT4/MT5のバックテストでは疑似ティックが使われているからです。

 

疑似ティックについて

疑似ティックの知識

疑似ティックとは、4本値を元にMT4/MT5が特定のアルゴリズムに沿って自動で作成するティックデータです。

念のため業者にも問合せたので、その時にもらったメールの返信を掲載します。

MT4のバックテストをおこなうためのヒストリカルデータにつきましては、1分足が最小単位となっております。

MT4はTickのヒストリカルデータを持ち合わせないため、バックテストでは擬似Tickを用いて検証します。

そのため、1分足の4本値(始値・高値・安値・終値)を元に、擬似Tickデータをバックテストに利用するため、基本的にリアルのTickデータとは異なる結果となります。

「MT4はTickのヒストリカルデータを持ち合わせないため・・・」に違和感があります。

正確に言うと、「弊社ではリアルティックデータを提供していない。だから、最小単位の1分足から疑似ティックが作成されて、それがバックテストに利用されている。」ということになるのではないかと思います。

最初の回答では、あたかもMT4自体がティックデータを持っていないような記載だったので再質問しました。

結果を掲載します。

前回、MT4でバックテストを行うヒストリカルデータの最小単位が1分足と、ご案内いたしましたが、
○○様がお考えのとおり、外部からTickデータをMT4に取り込んだ場合には、Tickデータで検証をおこなうことが可能でございます。
一方で、弊社のMT4にはTickデータが存在しませんので、外部からTickデータを取り込まずに検証する場合は、1分足の擬似Tickとなります。
また、弊社のTickデータを提供希望とのことでございますが、現在のところ、お客様へ提供しておりません。

どこが問題なのか

疑似ティックについては、このEAを動かす前から多少の知識を持っており、バックテスト結果とリアルが同じになるとは思っていませんでした。

ただ、テストでは数万回のトレードで良い結果が出ていましたので、リアルでもある程度の優位性があるのではないかと思ったのです。

問題は、疑似ティックではとんでもなく結果が良くなり、リアルのティックではとんでもなく結果が悪くなることです。

疑似ティック作成のアルゴリズムについては理解していないので、上記が必然なのか、私のEAによるものなのかは判断できません。
(ご存知の方がいらっしゃいましたら、ご教示いただけないでしょうか。)

疑似ティック作成のアルゴリズムについて、詳しい方から教えていただきましたので、以下にリンクを貼っておきます。

[英語] Real and Generated Ticks

[日本語] ターミナルのストラテジーテスタ内でティック作成をするアルゴリズム

 

解決策

完全な解決策はありませんが、リアルティックデータでバックテストすることで、騙されることが減ると思います。

「MT4 Tickstory」で検索していただければ、色々と出てくると思います。

ただ、いまいちリアルティックデータの検証に乗り気になれなり理由があります。

  • 自分が使っている業者のリアルティックデータでなければ検証にならないのでは?
  • リアル口座でティックデータを受信する環境次第で結果が変わるのでは?

特に、受信する環境という部分がまだ理解できていません。

プログラム部分で言うと、マシン環境によって例えば1分間にOnTick()が呼び出される回数が違うのでは?と考えています。

この部分がクリアにならないことには、ティックごとに色々な判定をさせることに意味を感じられません。
結局はリアルと異なる結果になるからです。

そういった経緯から、私の作成するEAは基本的にローソク足の最初のみ動くようにしています。

※もちろんテストの精度を上げるために、Tickstoryを使うことに異論はありません。

 

[追記]

MT5でも同じEAを動かしました。

まずはMT4と同じく「全ティック」での結果です。

MT5全ティックの結果

 

次に「リアルティックに基づいたすべてのティック」で検証しました。

序盤は上げているので完全に正しいデータだとは思いませんが、少なくとも全ティックよりはまともな検証結果なのではないかと思います。

リアルティックに基づいたすべてのティック

上記について詳しく知りたい方は合わせて以下もご確認ください。

MT4を辞めてMT5を使う理由

(続編) MT4を辞めてMT5を使う理由

 

まとめ

ここまでの内容から、学んだことを以下にまとめました。

  • パフォーマンスが良すぎるEAは怪しい
  • バックテスト結果は、データ次第でいくらでもよく見せられる
  • 1ティック1ティックが売買条件に影響するEAは、テストとリアルが乖離する
  • MT4/MT5の疑似ティックは、何故か結果がとんでもなく良くなってしまう

通常のEA作成に興味がある方は、「メタトレーダー(MT4/MT5)で自動売買するための事前準備(第1回)」をご覧ください。