Найти ближайшее к заданному время, где не было открытых позиций. - страница 2

 
Artyom Trishkin #:

Дело не в понимании вашего кода, а в неправильном ТЗ

Нет конкретики совершенно.

Каков диапазон этого "ближайшего"? Минута - это ближайшее? А минута + 1.5 секунды - не ближайшее? Может 1 час - это ближайшее? А может пару дней?

В какую сторону смотреть сиё "ближайшее"? Или в обе?

Нет открытых - нет фактов открытия в определённом ранее диапазоне, ближайшем к указанному времени? Или нет вообще никаких открытых, т.е. - все ранее открытые позиции должны быть уже закрытыми до наступления того самого диапазона и больше ничего не открывалось?

Отложенные ордера, ожидающие срабатывания, можно? Или тоже не должно быть?

Это только на вскидку. А далее ещё могут быть вопросы - уже по ходу осмысления с кодом.

Но самое конечно жёсткое - это отсутствие определения что такое "ближайшее". На него всё завязывается, и ему-то в первую очередь и нужно было дать чёткое определение.

Может тогда что-то и было

Ближайший (вперед) datetime, где выполняется условие, что нет открытых позиций.

Вот есть история торгов. Всю ее можно хронологически представить, как чередование интервалов двух типов: есть открытые позиции и нет открытых позиций.

Представим, что интервал с открытыми позициям [BeginPos; EndPos]. Если time внутри этого интервала, то ближайшее время (datetime), где нет позиций, = EndPos+1. Если же time на интервале, где нет открытых позиций, то ближайшее время - это есть сам time.


Говорим про позиции, отложки и любые другие сущности не имеют к задаче никакого отношения.

 

На запуске обрабатываем историю, потом следим за ней - обрабатываем новые сделки.

В результате обработки истории сделок нужно получить двухмерный массив, в одном элементе время сделки, в другом объем позиции. 

Все сделки  не обязательно собирать в массив, достаточно только когда позиция появилась и когда позиции совсем не стало (доливки и перевороты не нужны).

Лучше не двухмерный массив иметь, а два одномерных (может быть). Один для времени, второй для наличие/отсутствия позиции.

Используя функцию бинарного поиска находим время... дальше дело техники.

 
fxsaber #:

Ближайший (вперед) datetime, где выполняется условие, что нет открытых позиций.

Время вперёд, это в завтра, в будущее. А вы перебираете историю… Если от какого-то времени прошлой недели, то вперёд более-менее понятно, в сторону увеличения времени. Но всё-же никакой конкретики…

fxsaber #:

Представим, что интервал с открытыми позициям [BeginPos; EndPos]. Если time внутри этого интервала, то ближайшее время (datetime), где нет позиций, = EndPos+1. Если же time на интервале, где нет открытых позиций, то ближайшее время - это есть сам time.

В истории время в секундах, как максимум… Тогда какой будет интервал с открытыми позициям [BeginPos; EndPos]? Между одной позицией и следующей 2 секунды……… Эти 2 секунды и есть тот искомый диапазон?

 
Dmitry Fedoseev #:

На запуске обрабатываем историю, потом следим за ней - обрабатываем новые сделки.

В результате обработки истории сделок нужно получить двухмерный массив, в одном элементе время сделки, в другом объем позиции. 

Все сделки  не обязательно собирать в массив, достаточно только когда позиция появилась и когда позиции совсем не стало (доливки и перевороты не нужны).

Лучше не двухмерный массив иметь, а два одномерных (может быть). Один для времени, второй для наличие/отсутствия позиции.

Используя функцию бинарного поиска находим время... дальше дело техники.

Вот и предлагается показать свою реализацию. Сравнительный код доступен. Можно будет сразу понять, есть ошибки в реализации или нет. Заодно и производительность замерить.

 
Alexey Viktorov #:

Время вперёд, это в завтра, в будущее. А вы перебираете историю… Если от какого-то времени прошлой недели, то вперёд более-менее понятно, в сторону увеличения времени. Но всё-же никакой конкретики…

Теряюсь при попытке объяснить себе, что вызывает вопросы. Вот есть время time, ближайшее к нему (впереди) - time+1.

В истории время в секундах, как максимум… Тогда какой будет интервал с открытыми позициям [BeginPos; EndPos]? Между одной позицией и следующей 2 секунды……… Эти 2 секунды и есть тот искомый диапазон?

Белый интервал - нет позиций. Красный - есть.

Если time попадает в красный, то функция возвращает время начала белого интервала справа от красного. Если time попадает в белый - возвращает time.

 
fxsaber #:

Теряюсь при попытке объяснить себе, что вызывает вопросы. Вот есть время time, ближайшее к нему (впереди) - time+1.

Белый интервал - нет позиций. Красный - есть.

Если time попадает в красный, то функция возвращает время начала белого интервала справа от красного. Если time попадает в белый - возвращает time.

Больше вопрос тогда про градацию времени или точность временного диапазона, и видимо не ближайший, а самый точный временной отрезок нужен.

 
Valeriy Yastremskiy #:

Больше вопрос тогда про градацию времени или точность временного диапазона, и видимо не ближайший, а самый точный временной отрезок нужен.

datetime - секундная дискретность. На входе у функции datetime, на выходе - datetime. Отрезки не нужны.

 

То-есть на протяжении пяти секунд открылись пять позиций каждую секунду… Это есть красный интервал. Так? Дальше в течении трёх секунд позиции НЕ открывались… Это белый интервал. Так?

И получается, что если в :00 позиция открыта, в :01 нету, в :02 ещё одна открыта, то надо найти вот эту секунду :01……… Так?

 
Alexey Viktorov #:

То-есть на протяжении пяти секунд открылись пять позиций каждую секунду… Это есть красный интервал. Так? Дальше в течении трёх секунд позиции НЕ открывались… Это белый интервал. Так?

И получается, что если в :00 позиция открыта, в :01 нету, в :02 ещё одна открыта, то надо найти вот эту секунду :01……… Так?

Красный интервал - в каждую секунду этого интервала была хотя бы одна открытая позиция.

Белый интервал - в каждую секунду этого интервала не было ни одной открытой позиции.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Найти ближайшее к заданному время, где не было открытых позиций.

fxsaber, 2021.11.11 10:01

Если time попадает в красный, то функция возвращает время начала белого интервала справа от красного. Если time попадает в белый - возвращает time.

Не понимаю, где затык с восприятием.
 
fxsaber #:

Красный интервал - в каждую секунду этого интервала была хотя бы одна открытая позиция.

Белый интервал - в каждую секунду этого интервала не было ни одной открытой позиции.

Не понимаю, где затык с восприятием.

А если текущее время = красный интервал, то что возвращать?

Причина обращения: