Softgate Limited

株式会社ソフトゲート コーポレートブログ

MT4 のリアルティックバックテスト その2

先日「その1」の記事でも書いたとおり、MT4 のバックテストは、ティックファイルを順次読み込みながら形式的にはティックベースで実行されています。

通常、MT4 が「全ティック」モデルでバックテストする際に生成するティックファイルは、1 分足から擬似的に生成されたものとなります。

仮に、Dukascopy などから取得したいわゆるリアルティックデータに基づいて、ティックファイルを自前で生成してやれば、理論的には(固定スプレッドでビッドだけ)リアルティックでのバックテストが可能になるというところまでお話ししました。

ティックファイルの上書き禁止

しかし、これを実際にやろうとすると、一つ問題があります。

というのも、MT4 はバックテストの前処理として、必ずティックファイルを生成するので、自前で用意したティックファイルが上書きされてしまうからです。

確か、自前のティックファイルのファイル属性を単に上書き禁止にするだけではうまくいかなかったと記憶しています。

そのため、MT4 terminal.exe のプロセスにパッチを当てて、ティックファイルを上書きしないように(オンメモリで)改造する必要があります。

ちなみに、MT4 の実行ファイルは(terminal.exeMetaEditor.exe も)プロテクターで保護されているため、普通に EXE ファイルにパッチを当てるようなやり方は通用せず、オンメモリにコードが展開された後に、メモリ上でパッチを当てなければなりません。

具体的なパッチの当て方やどのような命令に置き換えるかは、本記事の範囲を大きく逸脱するので取り上げませんが、ここまでの処理を本当に実装すれば、固定スプレッドで(ビッドだけが)リアルなティックレベルのバックテストができるようになります。

可変スプレッドのリアルティックバックテストを実現

さて、既にお分かりの通り、MT4 のバックテストにおいては、ビッドの値に固定スプレッドを加えてアスクを計算しています。

では、可変スプレッドに基づいて、バックテストを行うにはどうすればいいでしょうか。

まず、復習になりますが、ティックファイルのフォーマットを思い出してください。

ヘッダ部分に続く各ティックのデータは、ビルド 509 の場合、次のような構造体になっています:

typedef struct
{
  time_t otm;
  double open;
  double low;
  double high;
  double close;
  double volume;
  time_t ctm;
  int    flag;
} TestHistory;

close というフィールドが、いわば最新のビッドの値となりますが、ご覧の通り、アスクまたはスプレッドの値を格納する場所はありません。

そこで、一つのやり方としては、「MT4 に使用されていない領域を別の目的に流用する」というアプローチが考えられます。

実際、TDS では volume フィールドにスプレッドを格納することにしています。

これは Tick Data Suite のティックデータ生成スクリプトのソースを読めば分かりますので、MQL が分かる方は確認してみてください。

もちろん、volume フィールドに可変スプレッドの値を格納しただけでは、可変スプレッドのバックテストはできません。なぜなら、MT4 がそのように作られていないからです。

したがって、上で述べたティックファイルの上書き禁止と同じように、オンメモリでパッチを当てて MT4 を書き換える必要があります。

具体的には、ティックファイルのティックを読み込んで

アスク=ビッド+固定スプレッド

という処理をしている箇所を探し出し、ここを

アスク=ビッド+可変スプレッド (volumeフィールド)

という計算をするように書き換えます。

まとめ

Tick Data Suite, Tickstory, Forex Studio は、実装方法に細かな違いはあれ、基本的にこうしたアプローチでリアルティックバックテストを実現しています。

注意して頂きたいのは、MT4 terminal.exe にオンメモリでパッチを当てる関係上、パッチは MT4 のビルドに依存すると言うことです。

無論、これらの ソフトウェアは、MT4 のビルドが変わっても極力動作するように、パッチを当てる場所を探す方法に工夫を凝らしていますが、MT4 の規模が大きなバージョンアップなどがあると、基本的にはパッチを作り直す必要があります。

余談

ぶっちゃけ、「MT4 を改造していいなら、リアルティックバックテストに限らず、なんでも実現可能だろう」という意見もあると思いますが、それはまさにその通りです。

ただ、Tick Data Suite, Tickstory や弊社の Forex Studio は、ここで述べたような処理を実装して、現実にリアルティックのバックテストを可能にしているわけで、単なる机上の空論や妄想を語っているわけではありません。