MT4のヒストリカルデータ読み込み時の留意点
はじめに
MT4を使ってEAを運用する際、バックテストが重要なプロセスになります。バックテストを行うには過去データ、いわゆるヒストリカルデータが必要です。今回は、MT4にヒストリカルデータ(.hstファイル)をダウンロードして読み込ませる際に気をつけたいポイントをまとめます。
まず、.hstファイルにはバージョンが存在し、主に2つのバージョン「400」と「401」があります。これらのバージョンには互換性がなく、例えばバージョン400のファイルは、MT4 build 574以降のバージョンでは読み込むことができません。
バージョンの違い
.hst ファイルフォーマット (MT4 Build 509 以前)
データ型 | フィールド名 | 説明 | サイズ |
---|---|---|---|
int | version | データベースバージョン - 400 | 4 バイト |
string | copyright[64] | 著作権情報 | 64 バイト |
string | symbol[12] | シンボル名 | 12 バイト |
int | period | シンボルの時間枠 | 4 バイト |
int | digits | 小数点以下の桁数 | 4 バイト |
datetime | timesign | データベース作成のタイムスタンプ | 4 バイト |
datetime | last_sync | 最後の同期時刻 | 4 バイト |
int | unused[13] | 予約領域(将来使用) | 52 バイト |
各バーの配列 (シングルバイト右詰め)
データ型 | フィールド名 | 説明 | サイズ |
---|---|---|---|
datetime | ctm | バーの開始時間 | 4 バイト |
double | open | 始値 | 8 バイト |
double | low | 最安値 | 8 バイト |
double | high | 最高値 | 8 バイト |
double | close | 終値 | 8 バイト |
double | volume | ティック量 | 8 バイト |
.hst ファイルフォーマット (MT4 Build 574 以降)
データ型 | フィールド名 | 説明 | サイズ |
---|---|---|---|
int | version | データベースバージョン - 401 | 4 バイト |
string | copyright[64] | 著作権情報 | 64 バイト |
string | symbol[12] | シンボル名 | 12 バイト |
int | period | シンボルの時間枠 | 4 バイト |
int | digits | 小数点以下の桁数 | 4 バイト |
datetime | timesign | データベース作成のタイムスタンプ | 4 バイト |
datetime | last_sync | 最後の同期時刻 | 4 バイト |
int | unused[13] | 予約領域(将来使用) | 52 バイト |
各バーの配列 (シングルバイト右詰め)
データ型 | フィールド名 | 説明 | サイズ |
---|---|---|---|
datetime | ctm | バーの開始時間 | 8 バイト |
double | open | 始値 | 8 バイト |
double | high | 最高値 | 8 バイト |
double | low | 最安値 | 8 バイト |
double | close | 終値 | 8 バイト |
long | volume | ティック量 | 8 バイト |
int | spread | スプレッド | 4 バイト |
long | real_volume | 実ボリューム | 8 バイト |
対応方法
もし、ダウンロードしたヒストリカルデータが読み込めない場合、バイナリエディタを使用してファイルのヘッダー部分を確認し、バージョンを確認することができます。画像にあるように、バージョン番号はファイルの最初の4バイトに記録されています。
以下の画像を参考に、バージョン400と401の構造の違いを確認してください。使っているバイナリエディタはImHexです。それ以外でもいいですが、hstファイルは大きくなるのでそれを全部メモリに展開してしまうようなソフトだとパソコンが固まる可能性があるため向いていません。
見比べてみると、明らかに、データ構造が違うのがわかります。最初の4バイトが、バージョン情報なので、最初のものだと90 01 なので、リトルエンディアンなので、0x0190(16進数) となり、10進数で400。よって、バージョン番号は400。下は91 01 となりリトルエンディアンなので0x0191(16進数)となりバージョン番号は10進数で表したものなので、401となる。上のデータはデューカスコピー社から持ってきたものであるが、Copyrightも書かれてないので変なデータだなとは思う。
まとめ
MT4でバックテストを行う際に、ヒストリカルデータをダウンロードしても読み込めない場合があります。その場合は、まず.hstファイルのバージョンを確認し、MT4のバージョンと互換性があるかどうかをチェックしましょう。