Сжать
Last updated
Last updated
Скачайте и откройте в Редакторе скриптов скрипт СЖАТИЕ.tscript (Лаб - Скрипты - Загрузить из файла)
Скрипт даёт возможность работать на нескольких таймфреймах одновременно. Допустим, в источнике у нас 1 минута, и мы можем получать данные от нескольких таймфреймов при использовании нескольких блоков сжатия, (например от 15 минут, от часовика, или от 33 минут). Например, мы можем получать данные и рассчитывать сигнал на часе или на других таймфреймах, а заявки выставлять на таймфрейме 1 секунда.
Блок Сжать очень простой. Он строит больший указанный интервал из баров, полученных из источника.
В блоке первый параметр Интервал. Про него нужно знать, что он может быть только кратен интервалу в источнике. Если в Источнике стоит 5 минут, то в блоке Сжать, может быть 5, 10, 15, 20 и т.д. минут. И соответственно не может быть меньше, чем в Источнике.
Если в Источнике выбран интервал времени 1 минута, то в блоке Сжать интервал может быть равным или больше 1 минуты.
В простом примере алгоритма канала Дончиана в источнике стоит 1 минута, а индикаторы рассчитываются от часового интервала. Строим индикаторы от сжатия, в котором интервал один час, а скрипт пересчитывается и выставляет заявки на интервале одна минута.
В простом блоке Сжать, все бары начинаются от начала загруженной истории (от начала графика) и если у Вас стандартный таймфрейм, кратный 24 часам (или например часовику, как в приведенном примере), то можно использовать простой блок Сжать. 15 минут, 30 минут, все интервалы построятся ровно, без смещений.
Если Вам необходим не стандартный таймфрейм, например 53 минуты, то Вам, возможно, понадобится выравнивание по определенному часу, допустим ровно в 10 часов утра. Сама проблема, почему это может понадобиться кроется в работе блока.
Как правило, нам Важно, чтобы сжатые бары совпадали в скрипте и агенте. Если в скрипте мы держим всю историю, то в агенте ее как правило ограничиваем для быстрого пересчета агента. Из-за этого последние бары могут не совпадать в скрипте и агенте. Что приводит к разнице расчетов между скриптом и торгующим агентом.
Чтобы решить эту проблему, необходимо использовать блок Сжать (Расширенный) который можно настроить так, чтобы сжатие строило бары не от начала истории, а от определенного часа в сутках или, например, от начала каждого часа, если используемый нестандартный таймфрейм.
Рассмотрим несколько иллюстраций, чтобы понять настройки расширенного блока сжать.
Давайте посмотрим на проблему вблизи. Нестандартный таймфрейм без выравнивания. Сжатые бары в один и тот же час в разные дни имеют разное время. Смотрим на сжатый бар в районе двадцати одного часа каждый день. .... В настройках блока у нас стоит 53 минуты, выравнивание не стоит. Таким образом бары построены просто от начала истории. Если сейчас поставить выравнивание 1440 минут, т.е. сутки, то теперь каждые 24 часа программа начинает строить бары от нуля часов нуля минут. Теперь, если посмотреть на график какого-то бара каждый день, например в 21 час, начало нестандартного таймфрейма всегда одинаково, то есть мы включили привязку построения баров к началу суток. Эта привязка к 00 часам действует всегда для определения параметров блока.
Используется параметр Сдвиг выравнивания. Если поставить параметр Сдвиг равный 600 (600 минут -> 10 часов), то с такими параметрами Сжатие выравнивается каждые сутки ровно в 10:00, а не в 12 ночи.
Блок позволяет делать выравнивание каждый час. Если в Интервале установить 11 минут, а выравнивание каждый час, то каждый новый час сжатие начинает новый сжатый бар, в конце часа всегда остается не полный бар.
Еще пример чтобы лучше понять логику сжатия и посмотреть на еще один параметр. Рассмотрим те же 11 минут, но выравнивание будем делать каждые три часа, с условием, что первый бар должен начаться ровно в 10:00 утра.
В данном случае используем Сдвиг (сдвиг всегда работает от последнего выравнивания). Если посмотреть на бары, то они начинали строиться:
в 00:00 часов;
в 03:00 часа ночи;
в 06:00 часов утра;
в 09:00 часов утра.
Так вот, между этим девятичасовым началом построения и десятью утрам остается 5 минут. Именно на него мы и сдвинули построение баров вправо.
Сдвиг в простом блоке Сжатия делает всё то же самое, только от начала построения баров. В простом блоке Сжатия он может понадобиться, например, если сессия начинается не в 10 утра, а в 10.30 утра. Старые блоки в программе могут изменяться, но только если не влияют на скрипты, которые у пользователей уже построены на этих блоках. Поэтому, как правило, в программе бывает, что появляется новый блок с новым названием, а старый остается.
Здесь следует заметить, если еще не стало понятно, почему собственно нет баров в ноль часов? Ответ прост - не было сделок на рынке, были бы сделки, бары бы нарисовались. Поэтому для тестирования инструментов бирж, работающих 24/7, выравнивание вряд ли понадобится.
Разжатие в программе происходит автоматически, если в вычислениях, в рамках одной формулы или графика, встречаются сжатые (данные от Сжать) и не сжатые данные (от Источника).
Особая ситуация с блоком Обновляемое значение (разжимается автоматически).
То есть сжатый интервал всегда автоматически приводится к интервалу источника в случае, если два разных потока используются в общем вычислении.
Разжатие сильно зависит от порядка расчета. Подробнее прочитайте в разделе:
Формирование скрипта определяется не фактическим использованием данных от другого блока в формуле расчета, а просто, наличием связи.
На примере ниже, даже если OpenM1 не будет использовано в формуле, то все равно данные формулы будут автоматически разжаты, т.к. есть входящий несжатый поток.
Если в блоке встречаются два разных интервала, то они оба будут разжаты автоматически к базовому интервалу источника.
Скачайте и откройте в Редакторе скриптов скрипт Разжатие.tscript (Лаб - Скрипты - Загрузить из файла)
Если необходимо получить какие-либо индикаторы и вычисления в приведенном виде к базовому таймфрейму в источнике, необходимо перед разжатием подсчитать, что необходимо получить в рамках данного Сжатия и только конечный расчет использовать для Разжатия. Например, если нужно использовать ЕМА, мы его полностью считаем и только конечный результат выводим в Разжатие, после чего его можно использовать с данными от источника или Разжатиями от других интервалов, других Сжатий.
Для примеров с логической формулой или любой другой логикой внутри сжатия/разжатия, тоже необходимо произвести вычисления непосредственно перед разжатием и только само разжатие необходимо использовать в блоках вычислений совместно с данными из источника. У блока Разжать один единственный параметр, собственно метод разжатия сжатых данных. Данный параметр определяет временной сдвиг данных, рассчитанных для сжатых временных интервалов при разжатии к оригинальному (базовому) временному интервалу в источнике.
На примере: Базовый интервал расчета 1 минута. Для расчета индикаторов использовано сжатие в интервал 1 час. 12.00 часовой бар начинается в 12.00 часов, это будет первая минутная свеча и в 12.59 начинается последняя минутная свеча.
При разжатии индикаторов: 1-й метод: значение 12.00 начинает действовать (станет доступно для расчетов внутри скрипта) с закрытия минутного бара 12.59
2-й метод: значение 12.00 начинает действовать (станет доступно для расчетов внутри скрипта) с закрытия минутного бара 12.00.
3-й метод: значение 12.00 начинает действовать (станет доступно для расчетов внутри скрипта) с закрытия минутного бара 13.00.
2-й метод не рекомендуется применять для тестирования стратегий, т.к. будут "заглядывания в будущее", то есть значение сжатого индикатора будет доступно до окончания часа!
2-й метод применим исключительно для визуального и графического анализа. Для оптимизации торговых стратегий наиболее оптимален метод 1.
3-й метод обладает небольшим запаздыванием, равным одному базовому интервалу, т.е. одной минуте, в нашем примере, и может применяться для тестирования стратегий опирающихся на короткие (секундные) интервалы, для имитации возможных задержек исполнения, таких как медленные каналы связи и т.п. Плюс для малоликвидных инструментов, чтобы не ждать окончания базового бара можно использовать пересчет Интервал+сделка (в свойствах скрипта) вместе с третьим методом. Сигнал всегда получится ровно с концом большого бара, как только придет пачка с тиками окончания часа.
Метод, используемый блоком Разжать по умолчанию выбирается в свойствах скрипта:
Первый сжатый бар дублируется по причине того, что до закрытия первого Сжатого интервала, нет данных. Используется цена открытия первого бара.
Игнорируйте первый сжатый бар, любой анализ начинайте со второго сжатого бара.
Не рекомендуется использовать Сжать в самодельном индикаторе. Расчеты могут быть очень длительными.
Короткое видео о способах решения проблем, возникающих при работе с нестандартными таймфреймами.
Две полностью одинаковые логические формулы выдают разные данные.
В исходном скрипте есть два абсолютно одинаковых блока Bull_HandedDw и Bull_HandedDw1, которые показывают разный результат. Почему?
Визуально по графу Блок И не связан с Bull_HandedDw. Почему удаление И влияет на Bull_HandedDw. И главное, как пользователь это должен понять.
Влияет последовательность добавления блоков в редактор.
Один добавлен До блока "И", другой после. Блоку И нужно было разжать данные. Значит второй блок будет рассчитан с разжатыми, а первый со сжатыми.
Т.е. чтобы этот скрипт одинаково считался, нужно разорвать связь между HammerUp и "И" через блок "Разжать".
В будущих версиях мы сделаем индикацию потоков по принципу Сжатый, Не сжатый.