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年問題にも対応してるようだ。