// Скрипт позволяет увидеть, как формируется таблица истории ордеров// при создании/удалении новых ордеров и без этого.#property script_show_inputsinputbool inFlag = true; // Проверка истории с открытием ордеровinputdatetime inFrom = 0; // Не ноль приведет к ошибке и с новыми ордерами#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006voidOnTick()
{
MqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick) && Tick.ask)
{
Print("------------\n" + (string)inFlag); // Отделили строки разных запусков скрипта.if (inFlag) // Проверка на новых ордерах.
{
// Попытка сформировать кеш на случай, если начальная дата будет всегда постоянной, но ненулевой.HistorySelect(inFrom, INT_MAX);
Print("Create/Delete orders.");
// Создали первый ордер.const TICKET_TYPE Ticket1 = OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Tick.ask - 1000 * _Point, 0, 0, 0);
Sleep(2000); // Подождали и создали второй ордер.const TICKET_TYPE Ticket2 = OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Tick.ask - 1000 * _Point, 0, 0, 0);
Print(Ticket1); // Тикет первого.Print(Ticket2); // Тикет второго.
OrderDelete(Ticket2); // Удалили второй - попал в историю.Sleep(2000); // Подождали и удалили первый - попал в историю.
OrderDelete(Ticket1);
// Проверка последовательности ордеров в истории - последних двух.if (HistorySelect(inFrom, INT_MAX))
{
Print("Check the History. inFrom = " + (string)inFrom);
constint Total = HistoryOrdersTotal();
for (int i = Total - 2; i < Total; i++)
Print(HistoryOrderGetTicket(i)); // Распечатываем тикеты в конце таблицы.
}
ExpertRemove();
}
}
}
Результат Тестера.
2021.06.1915:30:46.582 Core 1 EURUSD,M1: testing of Experts\Test9.ex5 from 2021.06.1800:00 to 2021.06.1900:00 started with inputs:
2021.06.1915:30:46.582 Core 1 inFlag=true2021.06.1915:30:46.582 Core 1 inFrom=02021.06.1915:30:46.582 Core 1 EURUSD : real ticks begin from 2021.03.1500:00:002021.06.1915:30:46.582 Core 12021.06.1800:00:00 ------------
2021.06.1915:30:46.582 Core 12021.06.1800:00:00true2021.06.1915:30:46.582 Core 12021.06.1800:00:00 Create/Delete orders.
2021.06.1915:30:46.582 Core 12021.06.1800:00:00 buy limit 0.1 EURUSD at 1.18097 (1.19057 / 1.19097)
2021.06.1915:30:46.582 Core 12021.06.1800:00:02 buy limit 0.1 EURUSD at 1.18097 (1.19057 / 1.19069)
2021.06.1915:30:46.582 Core 12021.06.1800:00:0222021.06.1915:30:46.582 Core 12021.06.1800:00:0232021.06.1915:30:46.582 Core 12021.06.1800:00:02 order canceled [#3buy limit 0.1 EURUSD at 1.18097]
2021.06.1915:30:46.582 Core 12021.06.1800:00:04 order canceled [#2buy limit 0.1 EURUSD at 1.18097]
2021.06.1915:30:46.582 Core 12021.06.1800:00:04 Check the History. inFrom = 1970.01.0100:00:002021.06.1915:30:46.582 Core 12021.06.1800:00:0432021.06.1915:30:46.582 Core 12021.06.1800:00:0422021.06.1915:30:46.582 Core 12021.06.1800:00:04ExpertRemove() function called
Все четко и правильно в Тестере! Это не повод ломать Тестер. Это повод вернуть хотя бы поведение Терминала к тому, что было еще в b2958. Там работало только для inFrom = 0, но работало. В Тестере работает для любого inFrom правильно. Это абсолютно логично.
Что имеем на данный момент. HistorySelect в Терминале и в Тестере работают разными алгоритмами. При этом в Тестере этот алгоритм удобный и логичный, да еще и супер-быстрый - дозапись всего, что приходит в историю, в конец таблицы. В Терминале же - нет.
Заметьте, не упоминаю сортировку по какому-либо признаку во время работы советника. Просто говорю о дозаписи в конец (а не в середину) новых элементов истории.
Если же говорить о сортировке, то она нужна только один раз - при запуске советника. И сортировка должна быть по ORDER_TIME_DONE_MSC (при совпадающих значениях - по тикету). Тогда будет полная однозначность HistorySelect-таблицы во время работы и сразу после запуска.
Стал обновляться b2982->b2990 после того, как прочел это сообщение, спасибо. У меня были до этого приготовлены кастомные символы.
Не нужны были, поэтому без переживаний обновил. После обновления все кастомные символы пропали (в CTRL+U пусто). Баровая и тиковая история в папке выше осталась нетронутой.
Полный лог первого старта обновления.
Думаю, разработчики могут легко воспроизвести ситуацию. Достаточно в предыдущем билде создать кастомный символ и обновиться.
Знаю, что кастомные символы вы не используете. Но к ситуации подключились, за что отдельное спасибо.
Скажите, на последовавших билдах у вас ситуация изменилась ?
У меня, например, нет. В том числе и на 2999-ом кастомные символы по прежнему недоступны.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Версия 2998 доступна, но после каждого перезапуска терминала, версия остаётся 2994 и просит перезапустить для обновления
А "старый" MetaEditor закрыт?
А "старый" MetaEditor закрыт?
Да
b2998, просьба исправить поведение на прежнее (b2958).
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна
fxsaber, 2021.06.19 14:39
Веский довод, почему сейчас в Терминале неправильно. Переделал скрипт в советник.Результат Тестера.
Все четко и правильно в Тестере! Это не повод ломать Тестер. Это повод вернуть хотя бы поведение Терминала к тому, что было еще в b2958. Там работало только для inFrom = 0, но работало. В Тестере работает для любого inFrom правильно. Это абсолютно логично.
Что имеем на данный момент. HistorySelect в Терминале и в Тестере работают разными алгоритмами. При этом в Тестере этот алгоритм удобный и логичный, да еще и супер-быстрый - дозапись всего, что приходит в историю, в конец таблицы. В Терминале же - нет.
Заметьте, не упоминаю сортировку по какому-либо признаку во время работы советника. Просто говорю о дозаписи в конец (а не в середину) новых элементов истории.
Если же говорить о сортировке, то она нужна только один раз - при запуске советника. И сортировка должна быть по ORDER_TIME_DONE_MSC (при совпадающих значениях - по тикету). Тогда будет полная однозначность HistorySelect-таблицы во время работы и сразу после запуска.
b2998, предупреждения сыпятся на таком коде.
#include <WinAPI\WinAPI.mqh>Стал обновляться b2982->b2990 после того, как прочел это сообщение, спасибо. У меня были до этого приготовлены кастомные символы.
Не нужны были, поэтому без переживаний обновил. После обновления все кастомные символы пропали (в CTRL+U пусто). Баровая и тиковая история в папке выше осталась нетронутой.
Полный лог первого старта обновления.
Думаю, разработчики могут легко воспроизвести ситуацию. Достаточно в предыдущем билде создать кастомный символ и обновиться.
Знаю, что кастомные символы вы не используете. Но к ситуации подключились, за что отдельное спасибо.
Скажите, на последовавших билдах у вас ситуация изменилась ?
У меня, например, нет. В том числе и на 2999-ом кастомные символы по прежнему недоступны.
Скажите, на последовавших билдах у вас ситуация изменилась ?
У меня, например, нет. В том числе и на 2999-ом кастомные символы по прежнему недоступны.
b2998->b2999 - кастомные на месте.
b2998, предупреждения сыпятся на таком коде.
Спасибо за сообщение. Исправлено
b2998->b2999 - кастомные на месте.
Спасибо, интересно.
То есть b2999 у меня встал некорректно.
Может снести МТ5 совсем и поставить его заново из дистрибутива ?
Никогда не сталкивался с такой ситуацией.
Может снести МТ5 совсем и поставить его заново из дистрибутива ?
В данном случае быстрее будет попробовать все варианты.
В данном случае быстрее будет попробовать все варианты.
А что, есть варианты кроме дистрибутива ?