Следующий блок в редакторе, по которому обычно очень много вопросов - Сжать. СЖАТИЕ.tscript (Лаб - Управление скриптами - Загрузить из файла)
 Открываем скрипт. С названием Сжатие.
Даёт возможность работы на нескольких таймфреймах одновременно. Т.е. допустим, в источнике у нас 1 минута, а мы, при использовании нескольких блоков сжатия, можем получать данные от нескольких таймфреймов, например от 15 минут, от часовика, или от 33 минут минут.
 Т.е., например, можем получать данные и рассчитывать сигнал на часе или на других таймфреймах, а заявки выставлять например на таймфрейме 1 секунда.

Блок Сжать очень простой. Он строит больший указанный интервал из баров, полученных из источника. В блоке первый параметр Интервал, про него нужно знать, что он может быть только кратен интервалу в источнике. Т.е., если в источнике стоит 5 минут, то в блоке Сжать, может быть 5,10,15,20 и т.д.
И соответственно не может быть меньше, чем в источнике. Если в источнике 1 минута, то в Сжать интервал может быть равным или больше минуты.
 В моем простом примере алгоритма канала Дончиана в источнике стоит 1 минута, а индикаторы рассчитываются от часовика. СЖАТИЕ_примерДончиана.tscript

Т.е. я строю индикаторы от сжатия, в котором интервал один час, а скрипт пересчитывается и выставляет заявки на интервале одна минута.
 В простом блоке Сжать, все бары начинаются от начала загруженной истории, т.е. от начала графика, и если у Вас стандартный таймфрейм, кратный 24 часам или часовику(например), как в приведенном примере, то можно использовать простой блок Сжать.
15 минут, 30 минут, все интервалы построятся ровно, без смещений.

Если Вам необходим не стандартный таймфрейм, например 53 минуты, то Вам, возможно, понадобится выравнивание по определенному часу, допустим ровно в 10 часов утра.
 Сама проблема, почему это может понадобиться, собственно, кроется в работе блока.

Как правило, нам Важно, чтобы сжатые бары совпадали в скрипте и агенте. Если в скрипте мы держим всю историю, то в агенте ее как правило ограничиваем для быстрого пересчета агента.
Из-за этого последние бары могут не совпадать в скрипте(лаборатории) и агенте. Что приводит к разнице расчетов между скриптом (лаборатория) и торгующим агентом.

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

Рассмотрим несколько иллюстраций, чтобы понять настройки расширенного блока сжать.

- Давайте посмотрим на проблему вблизи. Нестандартный таймфрейм без выравнивания. Сжатые бары в один и тот же час в разные дни имеют разное время. Смотрим на сжатый бар в районе двадцати одного часа каждый день.  ....
 В настройках блока у нас просто стоит 53 минуты, выравнивание не стоит. Таким образом бары построены просто от начала истории.
 Если сейчас поставить выравнивание 1440 минут, т.е. сутки, то теперь каждые 24 часа программа начинает строить бары от нуля часов нуля минут.
 Теперь, если посмотреть на график какого-то бара каждый день, например в 21 час, начало не стандартного таймфрейма всегда одинаково.
 Т.е. мы включили привязку построения баров к началу суток. Эта привязка к нуля часам действует всегда для определения параметров блока.
 Если сейчас посмотреть на начало сессии 10 часов, то бар, на который приходится начало торгов, начинается в ….
- Как сделать выравнивание ровно в 10 часов утра. Используется параметр Сдвиг выравнивания. Если поставить параметр 600, т.е. это 600 минут, т.е. 10 часов. С такими параметрами Сжатие выравнивается каждые сутки ровно в 10:00, а не в 12 ночи.

Блок позволяет делать выравнивание каждый час. Т.е. в интервале ставим 11 минут, а выравнивание каждый час. Т.о. каждый новый час сжатие начинает новый сжатый бар, в конце часа всегда остается не полный бар.
 - еще пример, чтобы еще лучше понять логику сжатия и посмотреть на еще один параметр, рассмотрим те же 11 минут, но выравнивание будем делать каждые три часа, с условием, что первый бар должен начаться ровно в 10:00 утра. В данном случае используем сдвиг, просто сдвиг всегда работает от последнего выравнивания. Если посмотреть на построение баров, то у нас бары начали строятся от 00:00 часов, далее начали строятся в 3часа ночи, далее в 6 часов утра, далее в 9 часов утра. Так вот между этим девяти часовым началом построения и десятью утрами остается остаток 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-й метод обладает небольшим запаздыванием, равным одному базовому интервалу, т.е. одной минуте, в нашем примере, и может применяться для тестирования стратегий опирающихся на короткие (секундные) интервалы, для имитации возможных задержек исполнения, таких как медленные каналы связи и т.п.  Плюс для малоликвидных инструментов, Чтобы не ждать окончания базового бара, можно использовать пересчет Интервал+сделка(в свойствах скрипта) вместе с третьим методом. Т.о. сигнал всегда получите ровно с концом большого бара, как только придет пачка с тиками окончания часа.



  • No labels