Блок "Обновляемое значение"
Данный блок предназначен для хранения числового значения "внутри" одного пересчета скрипта/агента. Значение не сохраняется между пересчетами скрипта/агента (для хранения данных между пересчетами необходимо использовать блоки Сохранить в глобальный кеш, Загрузить из глобального кеша). Блок является непотоковым, то есть хранит только одно значение, тем не менее, при использовании блока в дальнейших расчетах, то есть если от блока протянуть дальше связь к формуле, имеется возможность обратиться к предыдущим значениям через синтаксис ОбновляемоеЗначение[-N], где N - количество баров назад от текущего.
В блоке имеются следующие настройки: -- Начальное значение. Задает начальное значение блока с которого блок будет вести отсчет. Полезно использовать, к примеру, в сценариях работы с "Трейл-Стопами", когда необходимо собрать "Трейл" для шортовой позиции, в этом случае в блок изначально прописываем какое-либо максимальное число, которое в рамках данного инструмента никогда не будет достигнуто, например, 1.000.000. По мере работы скрипта число в блоке будет уменьшаться, тем самым поджимая шортовый "Трейл" к текущей цене -- Не очищать. Данная настройка задает отсутствие необходимости очистки блока при выходе из позиции. Если настройка не установлена, то при закрытии позиции, с которой блок связан (используется в расчетах после входа в позицию, то есть подключен после кубика входа в позицию), данный блок будет очищен
Особенности блока: -- очищается между пересчетами как в лаборатории, так и в режиме агента -- в случае если на входы "Обновление" и "Сброс" одновременно приходят значения True, то в приоритете будет обновление блока, т.к. вход "Обновление" обрабатывается системой первым. При необходимости установить приоритет входа "Сброс" сигнал на вход "Обновление" пропускаем через блок "И", в который подаем как сигнал "Обновление", так и сигнал со входа "Сброс" через логический "НЕ". В этом случае при поступлении одновременных сигналов True на два входа в приоритете отработает вход "Сброс" https://t.me/tslabprorugroup/145139/175853 https://www.youtube.com/watch?v=5jDShVJ5otI
Задача. Считать количество моментов, когда некое Условие истинно. А при наступлении некого другого Условия, обнулить и начать считать заново. Реализация. Для решения нам потребуется само Условие. Пусть это будет простое пересечение Цены закрытия и EMA. Эти события мы и будем считать. А считать будем до тех пор, пока количество пересечений будет < некой величины, допустим 10. После этого нужно «сбросить» счетчик и начать заново. Разберемся сначала с подсчетом количества событий. Для начала назовем блок Обновляемое значение – accum. Далее собираем: • Блок Пересечения соединяем с блоком Обновляемое значение. Стрелка должна быть направлена от блока Пересечение к Обновляемому значению • Добавляем блок Формула. • Соединяем Блок Формула и блок Обновляемое значение так, чтобы стрелка была направлена от блока Обновляемое значение в блок Формула. Этим самым мы передаем хранимое значение блока в блок Формула • Пишем в блоке Формула: accum+1 • Теперь соединяем Блок Формула и блок Обновляемое значение так, чтобы стрелка была направлена от блока Формула в блок Обновляемое значение. Этим самым мы возвращаем в блок Обновляемое значение хранимую там ранее величину увеличенную на 1. Т.е. проще говоря, посчитали еще одно событие – «плюс один» Сейчас в блоке Обновляемое значение идет подсчет всех Пересечений. Осталось реализовать, чтобы выполнялось условие accum<10. Для этого модифицируем выражение в блоке Формула: Code:
Что говорит: Если текущее значение accum < 10, то прибавляем 1 (учитываем событие), в противном случае, обнуляем.
Скачать скрипт Increment.tscript
Пример, как вернуть значение некого параметра, заданного пользователем (это может быть просто цена или результат некого выражения) только при наступлении некого события, иначе хранит предыдущее. Например, у нас есть некое условие – пересечение_сверху двух EMA. В этот момент необходимо получать Цену закрытия и хранить это значение до нового пересечения_сверху EMA. Нам понадобятся: • Блок Цена закрытия • Условие Пересечение сверху двух EMA • Блок Обновляемое значение Теперь собираем. К Блоку Обновляемое значение должны подходить две стрелки: от Цены закрытия и Пересечение сверху. Перезаписывание в блок Обновляемое значение будет производиться только когда Пересечение сверху истинно. Далее выводим блок Обновляемое значение на график и смотрим, что получилось. В примере присутствует блок (для примера) Формула, которое возвращает Цену закрытия только в момент истинности условия Пересечение сверху, на других барах возвращается 0.
Code:
Скачать скрипт Sample_Update_value.tscript
Пример. Вход в позицию Лонг, при пересечении снизу close свечи EMA.
Стоп-лосс: Цена входа минус % StopPrc .
При достижении дохода более %ProfitPrc, перенос стоп-лосс на цену "Цена входа" плюс % BreakevenPrc.
Для коротких(Шорт) позиций, учитывайте, что Параметр Начальное в обновляемом значении должен быть выше графика цены. Скачать скрипт Sample_StopBreakeven.tscript
Блок обновляемое значение имеет особенность. Когда участвует в закрытии позиций, блок очищается, возвращаясь на начальное значение.
На картинке 1, мы взяли "Закрытие" по условию Время>100000&&Время<170000, т.е. блок "обновляемое значение" отдает "Закрытие" с 10 утра до 17 вечера, после чего отдает закрытие бара 16:59, рис1:
Теперь возьмем эту цену и дадим блоку закрытия позиции по стоп-лосс. Посмотрите, что произойдет с графиком нашего индикатора , рис2:
Т.е. блок очистил значение до Начального. По умолчанию в Начальном стоит 0.
Это свойство Обновляемого значения работы с блоками "позиция" является "историческим", изначально блок не имел отдельного входа управлением очистки.
А так как программа меняется уже при работающих скриптах, на "живых" деньгах у людей, новичкам может показаться , что некоторые свойства работы блоков лишние.
Для того чтобы блок не возвращался на начальное значение, при участии в блоках закрытия позиции,
выделите блок и в свойствах блока поставьте "Не очищать".
Скачать скрипт DoNotClear.tscript
Если время равно 17 часам, отдать Закрытие бара.
Если время меньше 17 часов и больше 10 часов очистить Обновляемое значение до Начального значения.
В свойствах связи Обновляемого значения с панелью графика стоит Стиль графика "Линии без нулей".
Так как начальное значение равно 0, на графике обновляемое значение отдает Закрытие бара 16:59 с 17 часов до 10 часов утра.
Внимание! Если условие очищения и условие обновления выдают true одновременно, то очищения не произойдет. Очищение выполняется, только в случаях, если условие обновления false.
Определяет очередь расчета Обновляемого значения в алгоритме, в общем порядке(по умолчанию), в конце алгоритма(в очереди данной ветки расчета) или после выхода из позиции.
Прочитайте статью на данную тему: Показывать номер кубика
Обновляемое