Исполняемая модель – Robo.trading

Исполняемая модель

  • Расчет на основе исторических баров
  • Расчет на основе баров в реальном времени
  • События, запускающие выполнение скрипта
  • Дополнительные ресурсы

Когда скрипт Pine загружается на график, он выполняется один раз на каждом историческом баре, используя доступные значения OHLCV (открытия, максимума, минимума, закрытия, объема) для каждого бара. Как только выполнение скрипта достигнет самого правого бара в наборе данных, если в данный момент активна торговля по символу графика, Pine индикаторы будут выполняться один раз при каждом обновлении, то есть при изменении цены или объема. По умолчанию стратегии Pine будут выполняться только при закрытии самой правой панели, но их также можно настроить для выполнения при каждом обновлении, как это делают индикаторы.

Все пары symbol/resolution (тикер/таймфрейм) имеют набор данных, содержащий ограниченное количество баров. При прокрутке графика влево для просмотра более ранних баров набора данных, на график загружаются соответствующие бары. Процесс загрузки останавливается, когда для этой конкретной пары symbol/resolution больше нет баров или загружено приблизительно 10000 баров [1]. Вы можете прокрутить график влево до самого первого бара набора данных, который имеет значение индекса 0.

Все бары в наборе данных являются историческими, кроме самого правого, если торговая сессия активна. Когда торговля активна в самом правом баре, он называется баром реального времени. Бар в реальном времени обновляется при обнаружении изменения цены или объема. Когда бар в реальном времени закрывается, он становится историческим, и открывается новый бар в реальном времени.

Расчет на основе исторических баров

Давайте возьмем простой скрипт и проследим его выполнение на исторических барах:

//@version=4
study("My Script", overlay=true)
src = close
a = sma(src, 5)
b = sma(src, 50)
c = cross(a, b)
plot(a, color=color.blue)
plot(b, color=color.black)
plotshape(c, color=color.red)

На исторических барах скрипт выполняется в момент, эквивалентном закрытию бара, когда все значения OHLCV известны для этого бара. Перед выполнением скрипта на баре, встроенные переменные, такие как open, high, low, close, volume и time устанавливаются на значения, соответствующие значениям этого бара. Скрипт исполняется однократно на каждом историческом баре.

Наш пример скрипта впервые выполняется на самом первом баре набора данных с индексом 0. Каждый скрипт выполняется, используя значения для текущего бара. Соответственно, на первом баре набора данных выполняется следующий оператор:

src = close

инициализирует переменную src со значением close для первого бара, и каждая последующая строка выполняется по очереди. Поскольку скрипт выполняется только один раз для каждого исторического бара, скрипт всегда будет рассчитывать, используя одно и то же значение close для конкретного исторического бара.

Выполнение каждой строки в сценарии производит вычисления, которые в свою очередь генерируют выходные значения индикатора, которые затем могут быть нанесены на график. В нашем примере для вывода некоторых значений используются вызовы plot и plotshape в конце скрипта. В случае стратегии, результат вычислений может быть использован для построения графиков значений или для выставления ордеров.

После выполнения и построения графиков на первом баре, скрипт выполняется на втором баре набора данных, который имеет индекс 1. Затем процесс повторяется до тех пор, пока все исторические бары в наборе данных не будут обработаны и скрипт не достигнет самого правого бара на графике.

Расчет на основе баров в реальном времени

Поведение скрипта Pine на баре реального времени очень отличается от поведения на исторических барах. Напомним, что бар реального времени является самым правым баром на графике, когда торговля активна на тикере графика. Также напомним, что стратегии могут вести себя на реальном баре двумя разными способами. По умолчанию они исполняются только при закрытии реального бара, но параметр calc_on_every_tick оператора объявления стратегии может быть установлен в true, чтобы изменить поведение стратегии таким образом, чтобы она выполнялась каждый раз при обновлении бара реального времени, как это делают индикаторы. Поведение, описанное здесь для индикаторов, будет, таким образом, применяться только к стратегиям, использующим переменную calc_on_every_tick=true.

Самое важное различие между выполнением сценариев на исторических графиках и графиках реального времени состоит в том, что, хотя они выполняются только один раз, скрипты выполняются каждый раз, когда происходит обновление на графике реального времени. Это влечет за собой то, что встроенные переменные, такие как highlow и close которые никогда не изменяются на историческом графике, могут изменяться при каждой итерации сценария на графике реального времени. Изменения встроенных переменных, используемых в вычислениях скрипта, в свою очередь, также вызывают изменения в результатах этих вычислений. Это необходимо, чтобы скрипт следовал за движением цены в реальном времени. В результате один и тот же сценарий может давать разные результаты каждый раз, когда он выполняется на графике реального времени.

Примечание.

На графике реального времени close переменная всегда представляет текущую цену. Точно так же, high и low встроенные переменные представляют собой самый высокий максимум и самый низкий минимум достиг с начала бара в режиме реального времени. Встроенные переменные Pine будут представлять только конечные значения бара в реальном времени при последнем обновлении бара.

Давайте последуем нашему примеру скрипта на баре реального времени.

Когда скрипт появляется на графике реального времени, он выполняется в первый раз. Он использует текущие значения встроенных переменных для получения набора результатов и строит при необходимости их графики. Перед повторным выполнением скрипта при следующем обновлении его пользовательские переменные сбрасываются в уже известное состояние, соответствующее состоянию последнего фиксированного значения (коммита) при закрытии предыдущего бара. Если по переменным не было сделано ни одного фиксированного значения, поскольку они инициализируются на каждом баре, то они инициализируются заново. В обоих случаях их последнее вычисленное состояние теряется. Состояние нанесенных меток и линий также сбрасывается. Этот сброс пользовательских переменных и графиков скрипта перед каждой новой итерацией скрипта на реальном баре называется откатом. Его действие заключается в сбросе скрипта в то же известное состояние, в котором он находился при открытии реального бара, поэтому вычисления на реальном баре всегда выполняются из чистого состояния.

Постоянный пересчет значений скрипта при изменении цены или объема на баре реального времени может привести к ситуации, когда переменная c в нашем примере становится верной, потому что произошло пересечение, и таким образом на графике появится красный маркер, нанесенный последней строкой скрипта. Если на следующем ценовом обновлении цена изменилась таким образом, что close значение больше не производит расчеты, делая c истинным, потому что больше нет пересечения, то маркер, нанесенный ранее, исчезнет.

Когда бар реального времени закрывается, скрипт выполняется последний раз. Как обычно, переменные откатываются перед выполнением. Однако, поскольку эта итерация является последней на реальном баре, по завершении вычислений переменные фиксируются до их конечных значений для данного бара.

Подводя итоги обработки баров в реальном времени:

  • Скрипт выполняется при открытии бара реального времени, а затем один раз за обновление.
  • Переменные откатываются перед каждым обновлением в реальном времени.
  • Переменные фиксируются один раз при обновлении закрывающего бара.

События, запускающие выполнение скрипта

Сценарий выполняется на полном наборе баров на графике, когда происходит одно из следующих событий:

  • Новый тикер или таймфрейм загружается на график.
  • Сценарий сохраняется или добавляется на диаграмму из Pine Editor.
  • Значение изменяется в диалоговом окне « Настройки / Входы» скрипта.
  • Значение изменяется в диалоговом окне Настройки / Свойства стратегии.
  • Обнаружено событие “обновление страницы”.

Сценарий выполняется на графике в реальном времени, когда торговля активна и:

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

Когда событие запускает выполнение скрипта на графике и заставляет его запускаться на тех барах, которые теперь стали историческими барами, расчет скрипта может иногда отличаться от того, который был, когда он рассчитывался при последнем закрытии обновления тех же баров, когда они были барами реального времени. Это связано с небольшими различиями между значениями OHLCV, сохраненными при закрытии баров реального времени, и значениями, извлеченными из каналов данных, когда те же бары стали историческими барами. Такое поведение также называют перерисовкой.

Дополнительные ресурсы

Ряд встроенных переменных barstate.* предоставляют информацию о текущем типе обновления бара (исторический, в реальном времени, закрытие и т.д.). Страница, на которой они документируются, также содержит скрипт, позволяющий визуализировать описанное выше различие между предыдущими барами в реальном времени и историческими барами: состояния баров. Встроенные переменные barstate.*.

Сноски

1 Лимит для общего количества исторических баров составляет около 10000 для пользователей Pro/Premium. Для бесплатных пользователей доступно около 5000 баров.

/

Robo.Trading

eVe Developer
Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять