void DeleteOrders()
{
staticint PrevTotal = HistorySelect(0, INT_MAX) ? HistoryOrdersTotal() : 0;
if (HistorySelect(0, INT_MAX))
{
constint Total = HistoryOrdersTotal();
if (PrevTotal < Total)
{
ulong Array[][2];
ArrayResize(Array, Total);
for (int i = 0; i < Total; i++)
{
constulong Ticket = HistoryOrderGetTicket(i);
Array[i][0] = HistoryOrderGetInteger(Ticket, ORDER_TIME_DONE_MSC);
Array[i][1] = Ticket;
}
ArraySort(Array);while (PrevTotal < Total)
{
constulong Ticket = Array[PrevTotal++][1];
if (HistoryOrderGetInteger(Ticket, ORDER_TYPE) > ORDER_TYPE_SELL)
Alert(Ticket);
}
}
}
}
Выделил ресурсоемкий кусок кода.
Поэтому простейшая задача в MQL5 решается безумно дорого.
Так было не всегда.
Стесняюсь спросить, а зачем вы берёте ВСЮ историю в выделенной красным строке, если вам нужен только последний ордер? Почему не выбрать за последнюю секунду/минуту…
Ааа… Нет, это для определения события, что закрылся какой-то ордер. А почему-бы после этого не выбрать за последнюю секунду/минуту…
Ошибка при выполнении:
Результат: 3
А если поменять местами строки (1) и (2), то
Результат: 4
А какая принципиальная разница в каком порядке строки (1) и (2) попали в конечный код?
Ошибка при выполнении:
Результат: 3
А если поменять местами строки (1) и (2), то
Результат: 4
А какая принципиальная разница в каком порядке строки (1) и (2) попали в конечный код?
Спасибо, исправлена ошибка в проверке возвращаемых типов для предъобявленных функций
Просьба высказаться по решению простой торговой задачи в MT5.
Для тех, кто знает MT4, нужен аналог такого кода на MQL5.
Скажите пожалуйста, для MT4 такой код ведь по прежнему работает? По прежнему идет дозапись в конец?
Касаемо MT5, присоединяюсь к попыткам привлечь внимание администрации к этой теме. Вот это - ужас, с этим нужно что-то делать.
Скажите пожалуйста, для MT4 такой код ведь по прежнему работает? По прежнему идет дозапись в конец?
Ручаться не могу, релогин к торговому серверу может приводить к подобному перетряхиванию.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2023.06.05 04:35
Лобовое решение.
Выделил ресурсоемкий кусок кода.
Поэтому простейшая задача в MQL5 решается безумно дорого.
Так было не всегда.
Стесняюсь спросить, а зачем вы берёте ВСЮ историю в выделенной красным строке, если вам нужен только последний ордер? Почему не выбрать за последнюю секунду/минуту…
Ааа… Нет, это для определения события, что закрылся какой-то ордер. А почему-бы после этого не выбрать за последнюю секунду/минуту…
Или время ордера меняется?
зачем вы берёте ВСЮ историю в выделенной красным строке, если вам нужен только последний ордер? Почему не выбрать за последнюю секунду/минуту…
Архитектурно HistorySelect с другими параметрами работает очень дорого, т.к. кеши прекращают работать.
Ошибка при выполнении (ошибся с предыдущим примером - исправляюсь):
Результат: 2
Ожидалось: 1
Архитектурно HistorySelect с другими параметрами работает очень дорого, т.к. кеши прекращают работать.
Не верю, что будет дольше чем перебрать цикл 1000+++ ордеров…
Архитектурно HistorySelect с другими параметрами работает очень дорого, т.к. кеши прекращают работать.
Наличие кэшированных данных гарантирует их актуальность на каждый момент времени?