Что случилось с файлами котировок?!

 

В субботу обновил терминал до v.4.00 b.604 - я просто не думал, что наступит апокалипсис!!!

Структура файла котировок с привычной и описанной в документации

// Заголовок файла истории
        struct history_header
        {
                int version;        // версия базы
                char copyright[64]; // копирайт
                char symbol[12];    // инструмент
                int period;         // период инструмента
                int digits;         // число знаков после запятой в инструменте
                int timesign;       // временной отпечаток создания базы
                int last_sync;      // время последней синхронизации
                int unused[13];     // для будущего использования
        };
        history_header hh;
// Стандартное представление котировки в базе
        struct rate_info
        {
                int ctm;            // текущее время в секундах
                double open;
                double low;
                double high;
                double close;
                double volume;
        };
        rate_info quotations[];

изменилась непонятно как. Все скрипты и эксперты в MQL5, которые пользовались вышеописанной структурой для обращения к котирам из MT4 работать тупо перестали!

Зачем менять то, что работает?! Зачем тихушничать и не объявлять заранее о таких радикальных изменениях?! Какая теперь структура файла котировок?

Прикрепляю старый и новый формат, кто не верит - проверьте.

Файлы:
archive.zip  39 kb
 
да, у меня тоже самое. Новый формат HST чем то отличается от старого и теперь ничего сторонее не читает его. Вопрос один - НАААХРЕЕЕНАААА?
 

Если вы обращаетесь к hst файлам из экспертов штатно, то все работает и совместимость поддерживается. Конвертация данных работает на лету.

Если же самостоятельно читаете и модифицируете рабочие hst файлы, то делаете это на свой страх и риск.

Главная причина смены формата - совместимость с МТ5 и последующая миграция к более эффективному режиму работы с базами истории.

Посмотрите новую статью о форматах: https://www.mql5.com/ru/articles/1387

 
Renat:

Если вы обращаетесь к hst файлам из экспертов штатно, то все работает и совместимость поддерживается. Конвертация данных работает на лету.

Если же самостоятельно читаете и модифицируете рабочие hst файлы, то делаете это на свой страх и риск.

Главная причина смены формата - совместимость с МТ5 и последующая миграция к более эффективному режиму работы с базами истории.

Посмотрите новую статью о форматах: https://www.mql5.com/ru/articles/1387


Ренат, спасибо. Остался маленький нюанс: в статье описан новый формат структуры для хранения информации о ценах, объемах и спреде:

struct MqlRates
  {
   datetime time;    // время начала периода
   double open;      // цена открытия
   double high;      // наивысшая цена за период
   double low;       // наименьшая цена за период
   double close;     // цена закрытия
   long tick_volume; // тиковый объем
   int spread;       // спред
   long real_volume; // торговый объем
  };

но ничего не упоминается о структуре заголовка файла истории. Она осталась неизменной? Или изменилась? Если изменилась, то какова она теперь?

 
Rich:

но ничего не упоминается о структуре заголовка файла истории. Она осталась неизменной? Или изменилась? Если изменилась, то какова она теперь?

Заголовок не изменился.
 

так со временем спреды в тестере будут такие же кривые как и в МТ5 ? Я очень против этого! Как по мне, то возможность самому выставлять спред - лучшее решение.

Возьмем к примеру минутную историю в МТ5. В реальности спреды меняются, а в истории остается спред близкий к максимальному за эту минуту. У меня в эксперте есть специальный модуль который как раз борется с такими расширениями. Но тестить весь бар на расширенном спреде - неправильно! С форексом ситуация еще более менее нормальная. А вот индекс РТС В тестере вообще бессмысленно тестировать, если стратегия предусматривает даже несколько сделок в минуту.

 

так всё-таки позвольте уточнить:

какова теперь структура заголовка файла .hst в мт4 ? то что она не изменилась - это мягко говоря не правда.

 
vitaliy-lipetsk:

так всё-таки позвольте уточнить:

какова теперь структура заголовка файла .hst в мт4 ? то что она не изменилась - это мягко говоря не правда.

Пишу, как и раньше:

   string   copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   int      unused[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

   FileWriteInteger(m_fileHandle, 401, LONG_VALUE);
   FileWriteString(m_fileHandle, copyright, 64);
   FileWriteString(m_fileHandle, m_symbol, 12);
   FileWriteInteger(m_fileHandle, m_tfNameInMinutes, LONG_VALUE);
   FileWriteInteger(m_fileHandle, m_digits, LONG_VALUE);
   FileWriteInteger(m_fileHandle, 0, LONG_VALUE);
   FileWriteInteger(m_fileHandle, 0, LONG_VALUE);
   FileWriteArray(m_fileHandle, unused, 0, 13);

 Если же писать и читать нештатными способами, то, конечно же, отличия будут, т. к. произошел переход на Unicode с ANSI.

 

простите, не совсем понял,

это у вас mql4 ? и я правильно вижу, что у вас тут функции для записи а не для чтения ? просто чтобы понять друг друга

мне записывать пока ничего не надо, мне просто прочитать файл программкой на c#, раньше примерно пару лет назад проблем не было никаких, а теперь всё как у товарища в начале этой темки. Если быть точнее, то считывается версия=401 длиной 4 байта, потом копирайт длиной 64 байта, потом нормально тикер длиной 12 байт, а вот дальше непонятно, всё ломается - таймфрейм длиной 4 байта уже считывается некорректно и т.д.

 
p.s. переход на Unicode меня как раз вполне устраивает
 
dimeon:

так со временем спреды в тестере будут такие же кривые как и в МТ5 ? Я очень против этого! Как по мне, то возможность самому выставлять спред - лучшее решение.

Возьмем к примеру минутную историю в МТ5. В реальности спреды меняются, а в истории остается спред близкий к максимальному за эту минуту. У меня в эксперте есть специальный модуль который как раз борется с такими расширениями. Но тестить весь бар на расширенном спреде - неправильно! С форексом ситуация еще более менее нормальная. А вот индекс РТС В тестере вообще бессмысленно тестировать, если стратегия предусматривает даже несколько сделок в минуту.

Вероятней всего наоборот - в МТ5 будет кастомная история с произвольными спредами - https://www.mql5.com/ru/forum/43553
Причина обращения: