Germany | Finland | Saint Petersburg | Drive

Проверка таймфрейма из QPILE

Опубликовано в QPILE

Большинство автоматизированных торговых систем используют графики котировок в качестве источника для получения информации. При этом существенным оказывается правильность установки таймфрейма - временного интервала графика. На неправильно установленном таймфрейме робот будет получать недостоверную информацию и, соответственно, принимать неверные торговые решения. Однако, в текущей реализации интерпретатора QPILE в явном виде отсутствуют средства для получения данных о  таймфрейме, установленном на графике. Тем не менее, возможность проверить правильность установки на графике таймфрейма существует.

Одной из особенностей встроенной функции get_candle_ex() является возврат времени свечи, выровненного на границу установленного на графике таймфрейма. Например, если на 5-минутном графике мы с ее помощью прочитаем значение свечи со временем  15:13:48, то в ассоциативном массиве, который будет возвращен функцией get_candle_ex() будет фигурировать время начала этой свечи - 15:10:00. Этой особенностью и воспользуемся.  

Простейший алгоритм выглядит так.

Для определения таймфрейма нам в качестве исходных данных необходимо иметь время начала любой существующей свечи. Назовем ее эталонной. Проверка совпадения установленного на графике таймфрейма с желаемым происходит в 2 шага:

  1. Отсечем вариант, когда  таймфрейм на графике меньше желаемого. Для этого ко времени начала эталонной свечи нужно прибавить время, на 1 секунду меньшее длительности таймфрейма. Используем get_candle_ex() с этим временем и смотрим возвращенное ею время. Оно должно совпадать с эталонным. В этом случае таймфрейм не меньше требуемого. Если получим любое другое время, включая нулевое, когда свечи с таким временем на графике нет - значит, таймфрейм на графике меньше требуемого
  2. Отсекаем вариант, когда таймфрейм на  графике больше требуемого. В цикле из времени начала эталонной свечи  вычитаем значение желаемого таймфрейма в секундах и каждый раз выполняем вызов get_candle_ex() Останавливаемся в момент, когда свеча была обнаружена. Сравниваем время, возвращенное get_candle_ex( ) со временем, которое мы ей передали. Если не совпадают - таймфрейм больше желаемого

Если обе проверки дали отрицательный ответ - значит таймфрейм графика правильный. Алгоритм довольно быстый. В подавляющем большистве случаев время выполнения равно двум обращениям к функции get_cande_ex(). Увеличение времени выполнения будет в начале сессии, когда для проверки второго условия придется впустую прокручивать все неторговое время, прошедшее с момента окончания предыдущей сессии.

Однако есть ограничение. Алгоритм можно использовать только на таймфреймах ниже дневного. Для большинства задач этого достаточно.

Добавить комментарий