Насколько я знаю, формат hst файлов в mt4 и mt5 различались. После обновления mt4 до последних версий, его формат файла стал такой же как и в mt5.
Разработчики придерживаются такой позиции:
нечего лезть в наши файлы, нечего знать структуры их внутреннего представления и нечего там ковыряться,
потому как руки у большинства из вас всё ещё кривы, напартачите, а потом вопросов кучу задаёте.
Терминал предоставляет доступ к своей базе данных по символам не прямой, а через свою обработку:
фактически же предоставляется доступ к их копии в ОЗУ по запросу программы MQL.
Ничто не мешает (при желании) пересохранить эти данные в свой собственный формат данных и использовать в своих целях.
Я, например, конвертирую структуру MqlRates в свою собственную:
//--------------------------------------------------------------------- // Структура для хранения исходных исторических данных по символу в файле //--------------------------------------------------------------------- struct Source { uint time; float open; float high; float low; float close; Source(void):time(0),open(0.0),high(0.0),low(0.0),close(0.0){}; void Empty(void) { time=UINT_MAX; open=FLT_MAX; high=FLT_MAX; low=FLT_MAX; close=FLT_MAX; } bool IsEmpty(void) { if(time==UINT_MAX && open==FLT_MAX && high==FLT_MAX && low==FLT_MAX && close==FLT_MAX) {return(true);} return(false); } };
Такие лишние "телодвижения" приходится делать потому, что терминал НЕ ЗАГРУЖАЕТ в ОЗУ данные в количестве, превышающем параметр "Max bars in chart".
И если мне нужны глубокие (например, по M1) данные для расчётов, а терминал стоит на VPS, где надо экономить ресурсы, то сделать это не получится!
Выход один: загружать их из своих собственных БД.
Не совсем понятно. Сам терминал берет эти же котировки из это го же файла. Его структура соответственно определена изначальна. Возможно она и изменилась (незначительно)
{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
};
Не совсем понятно. Сам терминал берет эти же котировки из это го же файла. Его структура соответственно определена изначальна. Возможно она и изменилась (незначительно)
{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
};
База данных терминала MT5 - это файлы *.hcc и *.hc
Файлы *.hcc скачиваются с сервера, а файлы *.hc формируются уже самим терминалом из файлов *.hcc
Подробности тут.
А структура MqlRates дана пользователям разработчиками для доступа к историческим данным (но не к святыням *.hcc и *.hc). Прямого доступа к файлам *.hcc и *.hc нет.
В структуру MqlRates копируются данные из ОЗУ, куда они предварительно будут загружены из *.hc, а при отсутствии последних - из *.hcc (с одновременным преобразованием к *.hc)
Эту статью я читал. Но там же сказано про файлы *.hcc и *.hc и не слово не сказано про файлы *.hst. А они тоже присутствуют в данном терминале и в них именно храниться история оп таймфреймам.
Структуру файлов для MT4 лучше искать на форуме MQL4.
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Насколько я знаю, формат hst файлов в mt4 и mt5 различались. После обновления mt4 до последних версий, его формат файла стал такой же как и в mt5.
Раньше что бы прочитать файл 4 версии, в delphi описывал структуру:
TRateInfo = packed record // 44 байта - бар
ctm : cardinal; // текущее время в секундах // время
open : double; // цена открытия // open
low : double; // минимум // low
high : double; // максимум // high
close : double; // закрытие // close
tick_volume : double; // обьем // volume
end;
Результатом была строка :
(944006400, 1,0085, 1,0076, 1,0095, 1,009, 94)
Теперь результат совсем другой:
(1355439600, 1,05702231308677e+304, -7,18914053781088e-206, 1,05702244376515e+304, -358361,312442158, 6,85934648557025e-312)