Block EAで作ったEAでデモトレダービーに参加して99位入賞?した件
デモトレダービー
3月7日~5月20日に、外為ファイネストで「デモトレダービー」というトレードを競うコンテストが行われました。
最近MT5に対応したので、MT5の利用者を増やそうというキャンペーンの一環ですね。
ちなみにこの業者、毎月いろんなキャンペーンやってます。筆者も何度かアマゾンのギフト券とか、カタログギフトとかもらったことがあります。
それはそうと、この手のトレードコンテストって、期間が数ヵ月っていうのが多いのですが、はっきり言って数ヵ月って、運の要素が強いです。
だから、これでトレードの上手い下手を評価することに意味はないと思うのですが、今回、半分遊びで参加してみることにしました。参加は無料ですし、運よく100位までに入ればアマゾンギフト券がもらえるので、期待値プラスです。
Block EAで作ったEAで参加
このデモトレダービー、外為ファイネストでMT5のデモ口座作れば、裁量でも、EAの自動売買でも何でもOKです。
でも、裁量なら別にMT5でなくてもいいわけです。せっかくMT5のコンテストなんだから自作EAを動かすことにしました。
さらにEAを普通に作っては面白くない、ということで、今流行り?のブロックプログラミングを使って作ることにしました。
今回使ったのは、最近筆者が開発したBlock EAというシステムです。
宣伝ですが、最近のアップデートでMT4、MT5のEAだけでなく、カスタム指標やスクリプトプログラムも作れるようになりました。
今回、これを使ってEAを作り、デモトレダービーに参加しました。EAの詳細については後で説明します。
デモトレダービーの結果
順番前後しますが、いきなりデモトレダービーの結果です。
完全に負け惜しみですが、トレードコンテストの結果なんて意味はありません(泣)。
こんな残念な資産曲線になりました。
前半はまあまあよかったのですが、後半に負けが込んで、最終トレードでマイナスが確定してしまいした。
最終トレードの直前ならプラスだったので100位以内に入れるかと思っていたのですが、最後にとどめを刺されたので諦めていました。
なので、最終ランキングが発表されていたことを知らなかったのですが、昨日、外為ファイネストから「99位入賞」というおめでたいメールが来て結果を知ったわけです。
参加者が何名いたか知りませんが、マイナスでも100位以内に入れるとは笑うしかありません。
でも「99」って何か特別です。98や100にない何かがあります(当たり前ですが)。久しぶりにnoteを書こうと思ったのも「99」だったからです。
99位のEAとは
では、99位となったEAを紹介します。
といっても、実はデモトレダービーでの取引結果は、全く同じEAを最初から最後まで動かした結果ではないのです。
今回のコンテスト、裁量もOKなので、EAも途中で変えても何の問題もありません。
基本的な売買ロジックは同じですが、前半と後半で、あるテクニカル指標のパラメータをわずか変えており、同じ結果は再現できなくなってしまいました。
そういう意味で、99位のEAって厳密には存在しないのですが、細かいことはおいといて、基本的な売買ロジックだけを紹介します。
EAの概要のブロック
このEAの全体の概要は、以下のようなBlock EAのブロックで表せます。
ここでは、「セットアップ」のブロックと「ティック時実行関数」のブロックについて説明します。
セットアップ
セットアップは、Block EAで生成されるMQLファイルをコンパイルする際に必要となるライブラリファイル「LibEA.mqh」に関する設定です。
このEAでは、MT5独自のタイムフレームを使用するので、MT4でも同様に動作できるよう「MT4でMT5独自のタイムフレームを使用する」というブロックを挿入してあります。MT5でしか使わないのであれば必要ありません。
また「MT5でMT4互換の4本値配列を使用しない」というブロックを挿入していますが、これはMT4でよく使われるOpen[]、High[]、Low[]、Close[]といった4本値配列を使わない設定となります。
ただ、Block EAでは、これらの配列をiOpen()、iHigh()、iLow()、iClose()といった関数に置き換えるので、MT4互換の4本値配列が使用できなくても問題ありません。むしろ、実行速度が速くなるといったメリットがあるので、この設定をお薦めします。
あとは、EAの実行時に変更できるパラメータとして、売買ロット数「Lots」を宣言してあります。
ティック時実行関数
この関数に売買ロジックの本体を記述します。
このEAは、同時にオープンするポジションは1個だけです。
最後に配置してある成行注文のブロックに仕掛けシグナル、手仕舞いシグナル、ロット数をセットするだけで、ティックごとに売買が行われます。
仕掛けシグナルは、後で説明する仕掛けシグナル関数「EntrySignal()」で生成したシグナルに「FilterSignalTime()」「FilterSignalRSI()」「FilterSignalMACD()」という3つのフィルタを通したものです。
手仕舞いシグナルは、仕掛けシグナルと同じ関数「EntrySignal()」を使いますが、利用するバーの位置が仕掛けシグナルと違います。
あと、成行注文とは別に「ClosePosition()」という関数で、損切り、利食いの決済を行います。
バックテスト
仕掛けシグナル関数やそれぞれのフィルタ関数の詳細については後ほど説明しますが、その前に、このEAのバックテストの結果を示しておきます。
以下の結果は、外為ファイネストのMT5デモ口座で実行したものです。ほかの業者のMT5で同じ結果になる保証はありませんので、ご注意ください。
また、MT4の場合、チャート上でEAの実行はできますが、MT5独自のタイムフレームを使う関係でバックテストは正常にはできません。こちらも注意してください。
バックテストの条件は以下の通りです。
このEAは基本的にEURUSD専用です。ほかの通貨ペアでは、そのままでは機能しないと思われます。
バックテストのタイムフレームは12分足としていますが、このEAでは、各テクニカル指標に異なるタイムフレームを使っています。各テクニカル指標関数に直接タイムフレームの値を代入しているので、バックテストのタイムフレームはどれにしても構いません。
ただし、バックテストのモデルは「全ティック」としてください。
証拠金はデモトレダービーと同じく100万円とします。ロット数は1ロット(EURUSDの場合、10万ユーロ)固定とします。
なお、バックテスト期間は2020年10月14日からとしていますが、これは、外為ファイネストのサーバーからダウンロードできるヒストリカルデータがこの日以前はないからです。
バックテストの結果は以下のようになりました。
これは約1年半の期間の結果です。数ヵ月単位で切り出せば、調子のいいときもあれば、悪いときもあることがわかると思います。ちなみに最後の数ケ月がデモトレダービーの期間です。やっぱり安定してませんね。
この記事の最後に、このEAのブロックデータを掲載します。前述のBlock EAに読み込むことで、MT4、MT5用のMQLファイルを生成することができます。
なお、Block EAは、現在のところ無料で利用できるようになっています。利用方法については、以下のBlock EAの使い方のページをご覧ください。
ただし、Block EAで生成されるMQLファイルをMT4、MT5でコンパイルするには、以下のkindle本からダウンロードできるライブラリファイルが必要となります。ライブラリの説明等、詳しくは本書をご参照ください。
以下で、EAの各関数をBlock EAのブロックと合わせて説明していきます。
最終的にあるEAが作成できますが、これはあくまでBlock EAを使ったEAの作成例にすぎません。
このEAを使ったことにより発生した障害、損失などについて、筆者は一切の責任を負いません。
以上をご理解した上で続きをご覧ください。
ここから先は
¥ 990
この記事が気に入ったらサポートをしてみませんか?