Одним из главных принципов построения эффективной Торговой Стратегии (ТС), на мой взгляд, является использование только «нужных» (релевантных вашей ТС) периодов активности.
Не нужно стараться захватить весь торговый период с 9-00 (предторги) утра и вечернюю сессию, если вы хотите торговать интрадей. Эти периоды вам не нужны, но вы вынуждены их учитывать, поскольку все индикаторы и осцилляторы, установленные в торговой системе (и, соответственно, в терминале) используют непрерывные ряды котировок. Ведь терминал (пример – QUIK) не имеет встроенных инструментов «обрезания» исходной базы, т.е. как только вы подписываете свой бот на получение данных командой
ds, error_desc = CreateDataSource(ClassCode, TickerCode, TimeFrame),
вы тем самым получаете «полный пакет» всех доступных данных.
Нужно понимать, что вам для торгов нужны не все данные, а только часть, релевантная вашему торговому периоду. Все остальные должны быть отброшены, но отброшены по-настоящему. Ведь, когда вы в параметрах окна «График по инструменту» устанавливаете фильтр «Отображать данные за период…», вы не обрезаете базу. В ваш бот эта база закачивается вся!
В самом деле, как при полной базе можно заставить RSI или ATR выдавать верные, с точки зрения вашей ТС, текущие параметры состояния рынка? Как на этих непрерывных данных можно строить именно внутридневную стратегию? Тем более, что даже эта ТС может быть, как минимум 2 видов: «чистая внутридневная» и совокупность «чистых внутридневных на протяжении более длительного суммарного периода торговли». Например, я использую именно совокупность внутридневных сессий, состоящих из чистых интрадеев, но объединенных одним временным рядом котировок.
В случае чистых интрадеев, я торгую только период 10-00…18-40, без учета ценовой статистики предыдущих дней и периодов. Просто вырезаю этот период и рассчитываю свои (не предлагаемые терминалом торговой системы) индикаторы, каждый из которых получает свое первое значение именно в 10-00 каждого дня и последнее – в 18-40 того же дня. На следующий день первым значением индикатора опять же становится первая котировка в 10-00 этого дня. Данных за предыдущие дни в индикаторе нет, и они не обсчитываются и не влияют на текущие значения текущего дня.
В случае использования, например, недельной совокупности интрадеев, мои индикаторы обрабатывают только нужные периоды с 10-00 до 18-40, а всё остальное отбрасывается еще на стадии подготовки данных на входе в бот.
Для этого я использую функцию сжатия базы, которая отсекает ненужные интервалы базы котировок и сжимает полученную базу, удалив пустые периоды. Происходит переиндексация базы, и она становится непрерывной, что и требуется для индикаторов.
Пример такой функции уплотнения:
Одна особенность этого подхода: все используемые вами индикаторы теперь нужно прописывать в виде процедур в теле бота в полном аналитическом виде.