#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #define VIRTUAL_SNAPSHOT_REFRESHTIME 1000 // Время жизни снепшота для обновления. В MT5 требует подключенной MT4Orders.mqh #include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577 // Возвращает ближайшее к заданному время, где не было открытых позиций. datetime GetNoPositionsTime_fxsaber1( datetime time ) { VIRTUAL::Snapshot(VIRTUAL_SNAPSHOT_REFRESHTIME, -1, false, ""); // https://www.mql5.com/ru/forum/282062/page39#comment_25774587 datetime PrevTime = 0; const int Total = OrdersHistoryTotal(); while (!IsStopped() && (PrevTime < time)) { PrevTime = time; for (int i = 0; i < Total; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL) && (OrderOpenTime() <= time) && (OrderCloseTime() >= time)) time = OrderCloseTime() + 1; } return(time); }
DealsTotal = 26382 Alert: Bench_Stack = 0, 1 <= Time[Test19.mq5 547 in OnStart: Bench(GetNoPositionsTime_fxsaber1,From,To)] = 9385466 mcs.
Не было позиций вообще,
не было по данному символу,
не было у данного робота по данному символу,
не было у данного робота по всем его торгуемым символам?
Нужно написать такую производительную функцию.
Предлагаю попробовать свои силы. Ниже скрипт, который будет замерять различные реализации.
Какой-то странный вопрос. Конкретное время или временной диапазон? Если диапазон, то какой?
Какой-то странный вопрос. Конкретное время или временной диапазон? Если диапазон, то какой?
Не понял, почему родились эти вопросы, когда все однозначно написал. Объясняю на примере.
В истории торговли были закрыты две позиции:
- 2021.10.01 16:00:00 - 2021.10.01 19:00:00
- 2021.10.01 20:00:00 - 2021.10.01 21:00:00
Результаты работы функции.
GetNoPositionsTime(D'2021.10.01 15:00:00') = D'2021.10.01 15:00:00'; GetNoPositionsTime(D'2021.10.01 17:00:00') = D'2021.10.01 19:00:01'; GetNoPositionsTime(D'2021.10.01 19:30:00') = D'2021.10.01 19:30:00'; GetNoPositionsTime(D'2021.10.01 20:00:00') = D'2021.10.01 21:00:01'; GetNoPositionsTime(D'2021.10.01 22:00:00') = D'2021.10.01 22:00:00';
Не понял, почему родились эти вопросы, когда все однозначно написал. Объясняю на примере.
В истории торговли были закрыты две позиции:
- 2021.10.01 16:00:00 - 2021.10.01 19:00:00
- 2021.10.01 20:00:00 - 2021.10.01 21:00:00
Результаты работы функции.
Не однозначно. Не указано в какую сторону ближайшее нужно.
Не понял, почему родились эти вопросы, когда все однозначно написал. Объясняю на примере.
В истории торговли были закрыты две позиции:
- 2021.10.01 16:00:00 - 2021.10.01 19:00:00
- 2021.10.01 20:00:00 - 2021.10.01 21:00:00
Результаты работы функции.
Понятно. Мне не только ваши коды невозможно понять, но и ваши слова трудно понимаемы.
Дело не в понимании вашего кода, а в неправильном ТЗ
Возвращает ближайшее к заданному время, где не было открытых позиций
Нет конкретики совершенно.
Каков диапазон этого "ближайшего"? Минута - это ближайшее? А минута + 1.5 секунды - не ближайшее? Может 1 час - это ближайшее? А может пару дней?
В какую сторону смотреть сиё "ближайшее"? Или в обе?
Нет открытых - нет фактов открытия в определённом ранее диапазоне, ближайшем к указанному времени? Или нет вообще никаких открытых, т.е. - все ранее открытые позиции должны быть уже закрытыми до наступления того самого диапазона и больше ничего не открывалось?
Отложенные ордера, ожидающие срабатывания, можно? Или тоже не должно быть?
Это только на вскидку. А далее ещё могут быть вопросы - уже по ходу осмысления с кодом.
Но самое конечно жёсткое - это отсутствие определения что такое "ближайшее". На него всё завязывается, и ему-то в первую очередь и нужно было дать чёткое определение.
Может тогда что-то и было
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужно написать такую производительную функцию.
Предлагаю попробовать свои силы. Ниже скрипт, который будет замерять различные реализации.