共通ライブラリを使ったEAを速くする方法
皆さん、こんにちは。
今回は、拙作のMQL4/MQL5共通EAライブラリをお使いの方へ、ちょっとしたTipsをお届けします。
共通ライブラリをまだお使いでない方も、ちょうど今(2023年6月21日から7月12日まで)kindle本の半額セールやってます。
共通ライブラリは、どちらのkndle本からでもダウンロードできます。この機会に是非どうぞ。
さて今回の記事は、共通ライブラリを使ったEAの実行速度をちょっと速くするための方法です。
ただし、共通ライブラリではMT4とMT5のEAを作ることができますが、今回の記事で速くなるのは、MT5のEAのみです。MT4のEAをお使いの方は、そのままで結構です。将来、MT5を使うときに思い出してください。
ズバリEAを速くする方法とは?
結論から申し上げます。
以下のように、共通ライブラリをインクルードする前に「MY_BUFFER_SIZE」を「0」にセットします。これだけです。
#define MY_BUFFER_SIZE 0
#include "LibEA.mqh"
どうして速くなるの?
共通ライブラリでは、MT4とMT5とでソースコードの互換性をもたせることを最優先としています。なので、MT4にあって、MT5にない機能は極力追加しています。
その一つがOpen[]、High[]、Low[]、Close[]などの4本値配列です。
MQL4では普通に使えるこれらの配列がMQL5では使えないので、共通ライブラリでは、ティック毎にこれらの配列を作っているのです。
実は「MY_BUFFER_SIZE」が、この4本値配列を何本分作るかを指定するパラメータなのですが、デフォルトで「1000」になっています。
つまり、毎ティック1000本の4本値を作っていたので、それなりに時間がかかっていたのです。それが0になれば、その分速くなるというのが単純な理由です。
どのくらい速くなるの?
速くなることに変わりはないのですが、問題はどのくらい速くなるかです。
これは、お使いのPCやVPSによって異なるので一概に言えませんが、ざっくりした計測をすると以下のようになりました。
「MT5のテクニカル指標関数をいくつかのライブラリで実行してみた」の記事と同様の方法で計測すると、100ティックでの合計時間がだいたい1500㎲かかっていたのが、500㎲になる感じです。
3倍も速くなるのか!と思われるかもしれませんが、計測したEAは2本の移動平均線の交差システムという単純なものです。EAのロジック自体が複雑になれば、高速化の割合は減少します。
あと、時間の単位をよく見てください。速くなった時間は100ティックの合計で1000㎲なので、1ティックあたり10㎲です。
サーバーとの通信時間としてping値を使うことが多いですが、あれがだいたい10㎳~100㎳です。
1㎳は1000㎲なので、速くなるといってもping値の1000分の1程度です。なので、MT5でEAを実際に動かす分には、ほとんど差はないと言っていいでしょう。
ただ、ストラテジーテスターでバックテストを行う場合、ティックの数が半端ないので、それなりに高速化は実感できると思います。
コードの互換性は?
EAの速度を上げるために互換性を犠牲にしているわけですから、Open[]、High[]、Low[]、Close[]は使えなくなります。
ただ、Open[]、High[]、Low[]、Close[]をiOpen()、iHigh()、iLow()、iClose()という関数に置き換えれば、ソースコードの互換性は保てます。
例えば、Close[1]であれば、iClose(_Symbol, 0, 1)のように書き換えるだけです。
Block EAではどうするの?
最後にBlock EAで作ったEAを高速化する方法について説明します。
Block EAには、本記事で紹介した設定を行うブロックがすでに用意されています。「MQL関数ーセットアップ」のツールボックスの「MT5でMT4互換の4本値配列を使用しない」というブロックです。
これを以下のようにセットアップのブロックに組み込めば、OKです。
ちなみに4本値配列に対応するブロック
は、MQLコードに変換すると
となります。
ここで、同じブロックのまま、先ほどの「MT5でMT4互換の4本値配列を使用しない」ブロックを追加します。
すると、このブロックのMQLコードは以下のようになり、4本値配列ではなく、iClose()などの関数に自動的に変わります。
というわけで、今回紹介したEAの高速化は、Block EAでも簡単に実現することができるのです。
むしろBlock EAだと自分でコードを書く必要はないので、「MT5でMT4互換の4本値配列を使用しない」ブロックを組み込むことのデメリットはなく、高速化というメリットしかありません。
以上、共通ライブラリを使ってMT5のEAを作る方に是非お勧めしたいTipsでした。
ではまた。