
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Дело не в понимании вашего кода, а в неправильном ТЗ
Нет конкретики совершенно.
Каков диапазон этого "ближайшего"? Минута - это ближайшее? А минута + 1.5 секунды - не ближайшее? Может 1 час - это ближайшее? А может пару дней?
В какую сторону смотреть сиё "ближайшее"? Или в обе?
Нет открытых - нет фактов открытия в определённом ранее диапазоне, ближайшем к указанному времени? Или нет вообще никаких открытых, т.е. - все ранее открытые позиции должны быть уже закрытыми до наступления того самого диапазона и больше ничего не открывалось?
Отложенные ордера, ожидающие срабатывания, можно? Или тоже не должно быть?
Это только на вскидку. А далее ещё могут быть вопросы - уже по ходу осмысления с кодом.
Но самое конечно жёсткое - это отсутствие определения что такое "ближайшее". На него всё завязывается, и ему-то в первую очередь и нужно было дать чёткое определение.
Может тогда что-то и было
Ближайший (вперед) datetime, где выполняется условие, что нет открытых позиций.
Вот есть история торгов. Всю ее можно хронологически представить, как чередование интервалов двух типов: есть открытые позиции и нет открытых позиций.
Представим, что интервал с открытыми позициям [BeginPos; EndPos]. Если time внутри этого интервала, то ближайшее время (datetime), где нет позиций, = EndPos+1. Если же time на интервале, где нет открытых позиций, то ближайшее время - это есть сам time.
Говорим про позиции, отложки и любые другие сущности не имеют к задаче никакого отношения.
На запуске обрабатываем историю, потом следим за ней - обрабатываем новые сделки.
В результате обработки истории сделок нужно получить двухмерный массив, в одном элементе время сделки, в другом объем позиции.
Все сделки не обязательно собирать в массив, достаточно только когда позиция появилась и когда позиции совсем не стало (доливки и перевороты не нужны).
Лучше не двухмерный массив иметь, а два одномерных (может быть). Один для времени, второй для наличие/отсутствия позиции.
Используя функцию бинарного поиска находим время... дальше дело техники.
Ближайший (вперед) datetime, где выполняется условие, что нет открытых позиций.
Время вперёд, это в завтра, в будущее. А вы перебираете историю… Если от какого-то времени прошлой недели, то вперёд более-менее понятно, в сторону увеличения времени. Но всё-же никакой конкретики…
Представим, что интервал с открытыми позициям [BeginPos; EndPos]. Если time внутри этого интервала, то ближайшее время (datetime), где нет позиций, = EndPos+1. Если же time на интервале, где нет открытых позиций, то ближайшее время - это есть сам time.
В истории время в секундах, как максимум… Тогда какой будет интервал с открытыми позициям [BeginPos; EndPos]? Между одной позицией и следующей 2 секунды……… Эти 2 секунды и есть тот искомый диапазон?
На запуске обрабатываем историю, потом следим за ней - обрабатываем новые сделки.
В результате обработки истории сделок нужно получить двухмерный массив, в одном элементе время сделки, в другом объем позиции.
Все сделки не обязательно собирать в массив, достаточно только когда позиция появилась и когда позиции совсем не стало (доливки и перевороты не нужны).
Лучше не двухмерный массив иметь, а два одномерных (может быть). Один для времени, второй для наличие/отсутствия позиции.
Используя функцию бинарного поиска находим время... дальше дело техники.
Вот и предлагается показать свою реализацию. Сравнительный код доступен. Можно будет сразу понять, есть ошибки в реализации или нет. Заодно и производительность замерить.
Время вперёд, это в завтра, в будущее. А вы перебираете историю… Если от какого-то времени прошлой недели, то вперёд более-менее понятно, в сторону увеличения времени. Но всё-же никакой конкретики…
Теряюсь при попытке объяснить себе, что вызывает вопросы. Вот есть время time, ближайшее к нему (впереди) - time+1.
В истории время в секундах, как максимум… Тогда какой будет интервал с открытыми позициям [BeginPos; EndPos]? Между одной позицией и следующей 2 секунды……… Эти 2 секунды и есть тот искомый диапазон?
Белый интервал - нет позиций. Красный - есть.
Если time попадает в красный, то функция возвращает время начала белого интервала справа от красного. Если time попадает в белый - возвращает time.
Теряюсь при попытке объяснить себе, что вызывает вопросы. Вот есть время time, ближайшее к нему (впереди) - time+1.
Белый интервал - нет позиций. Красный - есть.
Если time попадает в красный, то функция возвращает время начала белого интервала справа от красного. Если time попадает в белый - возвращает time.
Больше вопрос тогда про градацию времени или точность временного диапазона, и видимо не ближайший, а самый точный временной отрезок нужен.
Больше вопрос тогда про градацию времени или точность временного диапазона, и видимо не ближайший, а самый точный временной отрезок нужен.
datetime - секундная дискретность. На входе у функции datetime, на выходе - datetime. Отрезки не нужны.
То-есть на протяжении пяти секунд открылись пять позиций каждую секунду… Это есть красный интервал. Так? Дальше в течении трёх секунд позиции НЕ открывались… Это белый интервал. Так?
И получается, что если в :00 позиция открыта, в :01 нету, в :02 ещё одна открыта, то надо найти вот эту секунду :01……… Так?
То-есть на протяжении пяти секунд открылись пять позиций каждую секунду… Это есть красный интервал. Так? Дальше в течении трёх секунд позиции НЕ открывались… Это белый интервал. Так?
И получается, что если в :00 позиция открыта, в :01 нету, в :02 ещё одна открыта, то надо найти вот эту секунду :01……… Так?
Красный интервал - в каждую секунду этого интервала была хотя бы одна открытая позиция.
Белый интервал - в каждую секунду этого интервала не было ни одной открытой позиции.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Найти ближайшее к заданному время, где не было открытых позиций.
fxsaber, 2021.11.11 10:01
Если time попадает в красный, то функция возвращает время начала белого интервала справа от красного. Если time попадает в белый - возвращает time.
Красный интервал - в каждую секунду этого интервала была хотя бы одна открытая позиция.
Белый интервал - в каждую секунду этого интервала не было ни одной открытой позиции.
А если текущее время = красный интервал, то что возвращать?