2015年11月15日日曜日

MetaTreader4の.hstファイルの構造

FXDDから落としてきたヒストリカルデータを他のプログラムに食わせたくなって、.hstファイルの構造を調べてみた。

先に書いておくと、versionによって構造が違うようだ。現時点でFXDDが配布してくれている.hstファイルはversion=400で、これはググって見つけたところに書いてある通りっぽいので省略。普通にインポートできるので、別に古い形式でも使えないわけではない。

もう1つ。MT4同梱のPeriodConverter.mq4を読んでみると、version=401から構造が変わっているみたい。C風に書くとこんな感じ。

struct Header {
  uint32_t file_version; // 401
  char copyright[64];
  char symbol[12];
  uint32_t period; // Period()
  uint32_t digits; // Digits
  uint32_t _zero1; // PeriodConverter.mql4ではゼロ固定
  uint32_t _zero2; // PeriodConverter.mql4ではゼロ固定
  uint32_t _unused[13]; // PeriodConverter.mql4ではゼロ固定
};
struct MqlRates {
  uint64_t time; // 1970 1/1からの経過秒数
  double open;
  double high;
  double low;
  double close;
  uint64_t tick_volume;
  uint32_t spread;
  uint64_t real_volume;
};
ファイルの先頭に1つHeaderがあって、その後ろにMqlRatesが並んでいる。構造体のフィールド長に満たない文字列の後ろはゼロ埋め。エンディアンはリトル。2038年問題にも対応してるようだ。

0 件のコメント:

コメントを投稿