共通ライブラリを使った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でした。

ではまた。

前へ

Block EAでEAを作ろう:マルチタイムフレームEA

次へ

ATRバンドを使った売買システム