Основные функции – Robo.trading

Основные функции

  • Переключение контекста и функция безопасности
  • Устранение пропусков и прогнозирование
  • Понимание предвидения
  • Запрос данных младшего таймфрейма
  • Состояния баров. Встроенные переменные barstate.*
  • Информация о сессии и времени
  • Функция и переменная time
  • Встроенные переменные для работы со временем
  • Расширенные и обычные сессии
  • Данные нестандартных типов графиков
  • График Heikin-Ashi
  • График Renko
  • График линейного разрыва
  • График Каги
  • График pointfigure

Переключение контекста и функция безопасности

  • Устранение пробелов и прогнозирование
  • Понимание предвидения
  • Запрос данных младшего таймфрейма

Функция security позволяет скриптам запрашивать данные из тикеров и/или таймфреймов, отличных от тех, на которых работает скрипт.

Предположим, следующий сценарий выполняется на графике IBM в течение 1 минуты. Он будет отображать цену закрытия тикера IBM, но с таймфреймом 15 минут.

//@version=4
study("Example security 1", overlay=true)
ibm_15 = security("NYSE:IBM", "15", close)
plot(ibm_15)

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

Имя тикера можно определить двумя вариантами: с префиксом, содержащим биржу (или поставщика данных), или без нее. Например: «NYSE:IBM», «BATS:IBM»или «IBM». Если обмен не предусмотрен, по умолчанию будет использоваться BATS. Текущее имя тикера сохраняется во встроенных переменных syminfo.ticker и syminfo.tickeridsyminfo.ticker содержит, например, значение имени тикера без префикса обмена «MSFT». syminfo.tickerid содержит значение имени тикера с его префиксом обмена, например, «BATS:MSFT» или «NASDAQ:MSFT». Рекомендуется использовать, syminfo.tickerid чтобы избежать неоднозначности в значениях, возвращаемых security.

Второй аргумент security функции resolution (т.е. таймфрейм ) также является строкой. Все внутридневные таймфреймы определяются в минутах. Самый низкий таймфрейм составляет одну минуту и обозначается символом «1». Можно запросить любое [1] количество минут: «5», «10», «21»и т.д. Часовой таймфрейм также устанавливается в минутах [2]. Например, следующие значения означают один час, два часа и четыре часа соответственно: «60», «120», «240». Таймфрейм со значением 1 день обозначается символом «D» или «1D». Можно запросить любое количество дней: «2D», «3D» и т.д. Еженедельные и ежемесячные таймфреймы устанавливаются аналогичным образом: «W», «1W», «2W»,…, «M», «1M», «2M». «M» и «1M»обозначают один и тот же месячный таймфрейм «W»и «1W» один и тот же недельный таймфрейм. Третьим параметром функции security может быть любое арифметическое выражение или вызов функции, которая будет вычисляться в контексте выбранной серии. Таймфрейм тикера основного графика хранится во встроенной переменной timeframe.period.

С помощью функции security пользователи могут просматривать 1-минутный график, отображая SMA (или любое другое выражение) с любым другим таймфреймом (например, день, неделя, месяц):

//@version=4
study(title="High Time Frame MA", overlay=true)
src = close, len = 9
out = sma(src, len)
out1 = security(syminfo.tickerid, 'D', out)
plot(out1)

Можно объявить следующую переменную:

spread = high - low

и рассчитать её за 1 минуту, 15 минут и 60 минут :

spread_1 = security(tickerid, '1', spread)
spread_15 = security(tickerid, '15', spread)
spread_60 = security(tickerid, '60', spread)

Функция security возвращает серию, которая затем адаптируется к временной шкале тикера текущего графика. Этот результат может быть либо показан непосредственно на графике (т.е. с помощью plot), либо использован в дальнейших расчетах. Скрипт «Advance Decline Ratio» иллюстрирует более активное использование функции security:

//@version=4
study(title = "Advance Decline Ratio", shorttitle="ADR")
ratio(t1, t2, source) =>
s1 = security(t1, timeframe.period, source)
s2 = security(t2, timeframe.period, source)
s1 / s2
plot(ratio("USI:ADVN.NY", "USI:DECL.NY", close))

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

Устранение пропусков и прогнозирование

Есть два переключателя, которые определяют, как запрошенные данные security будут сопоставлены с текущим таймфреймом.

Первый gaps контролирует пропуски в данных. При значении по умолчанию barmerge.gaps_off данные объединяются непрерывно (без пропусков na). Все пропуски, если таковые имеются, заполняются предыдущим ближайшим не имеющим значения na. Если используется barmerge.gaps_on, то объединенные данные могут содержать пропуски в виде значений na.

Второй переключатель, lookahead был добавлен в Pine Script версии 3. Параметр имеет два возможных значения: barmerge.lookahead_off и barmerge.lookahead_on для переключения между новым поведением security умолчанию и старым поведением, начиная с Pine v1 и v2.

Этот пример показывает разницу на 5-минутном графике:

//@version=4
study('My Script', overlay=true)
a = security(syminfo.tickerid, '60', low, lookahead=barmerge.lookahead_off)
plot(a, color=color.red)
b = security(syminfo.tickerid, '60', low, lookahead=barmerge.lookahead_on)
plot(b, color=color.lime)

Зеленая линия на графике — это минимальная цена часового бара, запрашиваемого с опережением. Это старое поведение функции security. Зеленая линия, основанная на исторических данных, отображается на ценовом уровне часового минимума сразу после создания нового часового бара (пунктирные синие вертикальные линии).

Красная линия — это минимальная (low) цена часового бара, которая запрашивается без предварительного просмотра (lookahead off). В этом случае запрашиваемая цена low часового исторического бара будет указана только на последнем минутном баре запрашиваемого часа, когда low часового бара не будут возвращать будущие данные.

Пунктирная линия цвета фуксии представляет собой начало данных в реальном времени. Вы можете видеть, что barmerge.lookahead_on и barmerge.lookahead_off ведут себя так же на данных реального времени, т.е. так же, как и barmerge.lookahead_off.

Понимание предвидения

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

//@version=2
//...
a = security(tickerid, 'D', close[1]) // It's barmerge.lookahead_on, because version is 2

В этом случае выражение close[1] получает значение close предыдущего дня, поэтому конструкция не использует будущие данные.

В Pine v3 или более поздней версии мы можем переписать это двумя разными способами, используя barmerge.lookahead_on или barmerge.lookahead_off. Если вы используете barmerge.lookahead_on, то все довольно просто:

//@version=4
//...
a = security(syminfo.tickerid, 'D', close[1], lookahead=barmerge.lookahead_on)

Поскольку исходная конструкция не использует будущие данные, ее можно переписать, используя barmerge.lookahead_off. Если вы используете barmerge.lookahead_off, скрипт будет более сложным, но показывает, как работает параметр lookahead:

//@version=4
//...
indexHighTF = barstate.isrealtime ? 1 : 0
indexCurrTF = barstate.isrealtime ? 0 : 1
a0 = security(syminfo.tickerid, 'D', close[indexHighTF], lookahead=barmerge.lookahead_off)
a = a0[indexCurrTF]

Когда индикатор основан на исторических данных (т.е. barstate.isrealtime ложный), мы берем текущее закрытие ежедневного тикера и сдвигаем результат вызова функции security на один бар вправо в текущем тикере. При вычислении индикатора на основе данных реального времени мы берем цену закрытия предыдущего дня без изменения данных в security.

Запрос данных младшего таймфрейма

Функция security предназначена для запроса данных таймфрейма больше таймфрейм текущего графика. На 60-минутном графике это означало бы запрос 240, D, W или любого другого большего таймфрейма.

Не рекомендуется запрашивать данные для таймфрейма ниже таймфрейма текущего графика, например, данные за 1 минуту с 5-минутного графика. Основная проблема в таком случае заключается в том, что некоторая часть 1-минутных данных неизбежно будет потеряна, так как невозможно отобразить их на 5- минутном графике и не нарушить временной график. В таких случаях поведение security может быть весьма неожиданным.

Следующий пример иллюстрирует это:

// Add this script on a "5" minute chart
//@version=4
study("Lookahead On/Off", overlay=true, precision=5)
l_on = security(syminfo.tickerid, "1", close, lookahead=barmerge.lookahead_on)
l_off = security(syminfo.tickerid, "1", close, lookahead=barmerge.lookahead_off)
plot(l_on, color=color.red)
plot(l_off, color=color.blue)

В этом индикаторе построены две линии, соответствующие разным значениям lookahead параметра. Красная линия показывает данные, возвращаемые security с помощью lookahead=barmerge.lookahead_on. Синяя линия с lookahead=barmerge.lookahead_off. Давайте посмотрим на 5-минутный бар, начинающийся в 07:50. Красная линия на этом баре имеет значение 1.13151, что соответствует значению первого из пяти 1-минутных баров, попадающих во временной диапазон 07: 50–07: 54. С другой стороны, синяя линия на том же баре имеет значение 1,13121, что соответствует последнему из пяти 1-минутных баров того же временного диапазона.

Сноски

1 На самом деле максимальное поддерживаемое разрешение минут — «1440» (количество минут в 24 часах).

2 Запрос данных «1h»или «1H»разрешения приведет к ошибке. Вместо этого используйте «60».

Бар состояния. Встроенные переменные barstate. *

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

  • barstate.isfirst- true если текущий бар первый во всем диапазоне доступных баров, иначе false.
  • barstate.islast- true если текущий бар является последним во всем диапазоне доступных баров, иначе false. Этот флаг помогает определить последний исторический бар.
  • barstate.ishistory- true если текущее обновление данных является обновлением исторического бара, иначе false (то есть в реальном времени).
  • barstate.isrealtime- true если текущее обновление данных является обновлением бара в реальном времени, иначе false (то есть это историческое значение). Обратите внимание, что каждый бар в реальном времени также является последним.
  • barstate.isnew- true если текущее обновление данных является первым (открывающим) обновлением нового бара, иначе false.
  • barstate.isconfirmed- true если текущее обновление данных является последним (закрывающим) обновлением текущего бара, иначе false. Следующее обновление данных будет открытием нового бара [1].

Все исторические бары считаются новыми барами. Это связано с тем, что скрипт получает их в последовательном порядке от самых старых к более новым. Для баров, которые обновляются в реальном времени, столбец считается новым только в момент открытия этого бара.

Вот пример сценария с использованием переменных barstate.*:

//@version=4
study("Bar States", overlay = true)
first = barstate.isfirst
last = barstate.islast
hist = barstate.ishistory
rt = barstate.isrealtime
new = barstate.isnew
conf = barstate.isconfirmed
t = new ? "new" : conf ? "conf" : "intra-bar"
t := t + (hist ? "\nhist" : rt ? "\nrt" : "")
t := t + (first ? "\nfirst" : last ? "\nlast" : "")
label.new(bar_index, na, yloc=yloc.abovebar, text=t,
color=hist ? color.green : color.red)

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

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

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

Сноски

1 Переменная barstate.isconfirmed возвращает только состояние данных текущего тикера на графике. Она не принимает во внимание какие-либо данные вторичного тикера, запрашиваемые security функцией.

Информация о сеансе и времени

  • Функция и переменная time
  • Встроенные переменные для работы со временем

Функция time и переменная

Pine предоставляет средства для работы с информацией о торговых сессиях, времени и дате. На этом графике IBM через 30 минут выполняются два скрипта: “Bar date/time” и “Session bars”.

Это сценарий “Bar date/time”:

//@version=4
study("Bar date/time")
plot(time)

Переменная time возвращает дату / время (метку времени) время открытия каждого бара в формате UNIX [1] и в часовом поясе биржи. Как видно из скриншота, значение time на последнем баре равно 1397593800000. Это значение представляет собой количество миллисекунд, прошедших с 00:00:00 UTC, 1 января 1970 года, и соответствует вторнику, 15 апреля. 2014 в 20:30:00 UTC. Индикатор времени на графике на снимке экрана показывает время последнего бара как 2014-04-15 16:30, потому что разница между часовым поясом биржи, который является временем по умолчанию, возвращаемым функцией time, составляет 4 часа.

Второй скрипт — “Session bars”:

//@version=4
study("Session bars")
t = time(timeframe.period, "0930-1600")
plot(na(t) ? 0 : 1)

Это показывает, как пользователь может различать бары обычного сеанса и расширенные часы баров, используя встроенную функцию time. а не переменную time. Обратите внимание, что фон за этими барами окрашен в соответствии с настройками графика; а не из-за скрипта.Функция time возвращает время начала бара в миллисекундах UNIX время, или na если бар находится за пределами данной торговой сессии (09: 30-16: 00 в нашем примере). Функция time принимает два аргумента: resolution используемое для определения метки времени баров и session, спецификация сессии в виде строки, содержащей начало и конец торговой сессии в часовом поясе биржи. Строка «0930-1600» соответствует торговой сессии символа IBM. Это примеры спецификаций торговых сессий:

0000-0000

С понедельника по пятницу 24-часовая сессия начинается в полночь.

0900-1600,1700-2000

Сеанс, который начинается в 9:00, прерывается с 16:00 до 17:00 и продолжается до 20:00. Действует с понедельника по пятницу.

2000-1630: 1234567

Ночная сессия, которая начинается в 20:00 и заканчивается в 16:30 следующего дня.

0930-1700: 146

Сеанс, который начинается в 9:30 и заканчивается в 17:00 по воскресеньям (1), средам (4) и пятницам (6) (остальные дни недели — выходные).

24×7

Полный 24-часовой сеанс, начинающийся в 00:00 каждый день.

0000-0000: 1234567

То же, что и «24×7».

0000-0000: 23456

То же, что и в предыдущем примере, но только с понедельника по пятницу.

1700-1700: 23456

Ночной сеанс. В сессия понедельника начинается в воскресенье в 17:00 и заканчивается в понедельник в 17:00. Применяется с понедельника по пятницу. Эквивалент 1700-1700

1000-1001: 26

Странный сеанс, который длится всего одну минуту по понедельникам (2) и одну минуту по пятницам (6).

Спецификация сеанса, используемая для второго аргумента time функции, не обязательно должна соответствовать реальной торговой сессии тикера. Гипотетические спецификации сеанса можно использовать для выделения других баров ряда данных.

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

//@version=4
study("new 30 min bar")
is_newbar(res) =>
t = time(res)
not na(t) and (na(t[1]) or t > t[1])
plot(is_newbar("30") ? 1 : 0)

Пользовательская функция is_newbar из предыдущего примера может использоваться во многих ситуациях. Здесь мы используем её для отображения максимума и минимума открытия рынка на дневном графике:

//@version=4
study("Opening high/low", overlay=true)
highTimeFrame = input("D", type=input.resolution)
sessSpec = input("0930-1600", type=input.session)
is_newbar(res, sess) =>
t = time(res, sess)
na(t[1]) and not na(t) or t[1] < t
newbar = is_newbar("1440", sessSpec)
var float s1 = na
var float s2 = na
if newbar
s1 := low
s2 := high
plot(s1, style=plot.style_circles, linewidth=3, color=color.red)
plot(s2, style=plot.style_circles, linewidth=3, color=color.lime)

Обратите внимание на переменные highTimeFrame и sessSpec. Они определяются с помощью функции input и ее type параметра, чтобы указать их тип.

Встроенные переменные для работы со временем

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

Самые основные переменные:

  • time — UNIX время начала текущего бара в миллисекундах, часовой пояс UTC.
  • timenow — Текущее время UNIX в миллисекундах, часовой пояс UTC.
  • syminfo.timezone — часовой пояс биржи серии основных тикеров графика.

Переменные, дающие информацию о времени начала текущего бара:

  • year — Год текущего бара.
  • month — месяц текущего бара.
  • weekofyear — Номер недели текущего бара.
  • dayofmonth — Дата текущего бара.
  • dayofweek — День недели для текущего бара. Вы можете использовать sunday, monday, tuesday, wednesday, thursday, friday и saturday переменные для сравнения.
  • hour — Час времени начала текущего бара (в часовом поясе Exchange).
  • minute — минута текущего времени начала бара (в обменном часовом поясе).
  • second — секунда времени начала текущего бара (в часовом поясе биржи).

Функции для «построения» времени UNIX:

  • year(t) — возвращает год для указанного времени в формате UTC t.
  • month(t) — возвращает месяц для указанного времени UTC t.
  • weekofyear(t) — возвращает неделю года для указанного времени в формате UTC t.
  • dayofmonth(t) — возвращает день месяца для указанного времени в формате UTC t.
  • dayofweek(t) — возвращает день недели для указанного времени в формате UTC t.
  • hour(t) — Возвращает час для указанного времени в формате UTC t.
  • minute(t) — возвращает минуты для указанного времени в формате UTC t.
  • second(t) — возвращает секунду для указанного времени UTC t.
  • timestamp(year, month, day, hour, minute) — возвращает UNIX-время указанной даты и времени. Обратите внимание, есть также перегруженная версия с дополнительным параметром timezone.

Все эти переменные и функции возвращают время в часовом поясе биржи, за исключением переменных time и timenow, которые возвращают время в часовом поясе UTC.

Сноски

1 Время UNIX измеряется в секундах. Pine Script использует время UNIX, умноженное на 1000, то есть в миллисекундах.

Расширенные и обычные сессии.

В TradingView вы можете получить доступ к расширенным часам сессий, щелкнув правой кнопкой мыши по графику и выбрав «Настройки» → «Инструмент» → «Расширенная сессия» (только для внутредневных графиков). Существует два типа сессий: обычные (исключая пред- и пострыночные данные) и расширенные (включая пред- и пострыночные данные). Pine скрипты могут запрашивать дополнительные данные о сеансах с помощью функции security.

Функция security может быть вызвана с именем тикера (“EXCHANGE_PREFIX:TICKER”, например, «BATS: AAPL») в качестве первого аргумента. При таком использовании функция security будет возвращать данные для обычного сеанса.

Например:

//@version=4
study("Example 1: Regular Session Data")
cc = security("BATS:AAPL", timeframe.period, close, true)
plot(cc, style=plot.style_linebr)

Если вы хотите, чтобы вызов security возвращал данные расширенного сеанса, вы должны сначала использовать функцию tickerid для создания первого аргумента вызова security:

//@version=4
study("Example 2: Extended Session Data")
t = tickerid("BATS", "AAPL", session.extended)
cc = security(t, timeframe.period, close, true)
plot(cc, style=plot.style_linebr)

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

Первый аргумент функции tickerid — это префикс обмена («BATS»), а второй аргумент — это тикер («AAPL»). Третий аргумент указывает тип сеанса (session.extended или session.regular). И так, пример 1 можно переписать так:

//@version=4
study("Example 3: Regular Session Data (using tickerid)")
t = tickerid("BATS", "AAPL", session.regular)
cc = security("BATS:AAPL", timeframe.period, close, true)
plot(cc, style=plot.style_linebr)

Если вы хотите запросить ту же спецификацию сеанса, что и для основного тикера графика, опустите третий аргумент; он необязателен. Или, если вы хотите, чтобы ваш код явно объявил о вашем намерении, используйте встроенную переменную syminfo.session в качестве третьего аргумента функции tickerid, так как она содержит тип сеанса основного тикера графика:

//@version=4
study("Example 4: Same as Main Symbol Session Type Data")
t = tickerid("BATS", "AAPL", syminfo.session)
cc = security(t, timeframe.period, close, true)
plot(cc, style=plot.style_linebr)

Данные нестандартных типов графиков

  • График Heikin-Ashi
  • График Renko
  • График линейного разрыва
  • График Каги
  • График pointfigure

Эти функции позволяют скриптам получать информацию из нестандартных баров или типов графиков, независимо от типа графика, на которой выполняется скрипт. Это heikinashi, renko, linebreak, kagi и pointfigure. Все они работают одинаково; они создают специальный идентификатор тикера, который будет использоваться в качестве первого аргумента при вызове функции security.

График Heikin-Ashi

Heikin-Ashi в переводе с японского означает средний бар. Цены открытия, максимума, минимума и закрытия свечей Heikin-Ashi являются синтетическими; это не фактические цены. Каждое значение рассчитывается с использованием комбинаций обычных значений OHLC из текущего и предыдущего бара. Используемые расчеты делают бары Heikin-Ashi менее шумными, чем обычные свечи.

Функция heikinashi создает специальный идентификатор тикера для запроса данных Heikin-Ashi с помощью функции security.

Этот скрипт запрашивает low цены баров Heikin-Ashi и строит их поверх обычных свечей:

//@version=4
study("Example 5", overlay=true)
ha_t = heikinashi(syminfo.tickerid)
ha_low = security(ha_t, timeframe.period, low)
plot(ha_low)

Обратите внимание, что low цены баров Heikin-Ashi отличаются от low цен обычных свечей.

Если вы хотите отключить данные о расширенных часах в примере 5, вам нужно сначала использовать функцию tickerid, а не напрямую использовать переменную syminfo.tickerid:

//@version=4
study("Example 6", overlay=true)
t = tickerid(syminfo.prefix, syminfo.ticker, session.regular)
ha_t = heikinashi(t)
ha_low = security(ha_t, timeframe.period, low, gaps=barmerge.gaps_on)
plot(ha_low, style=plot.style_linebr)

Обратите внимание, что мы используем дополнительный четвертый параметр с securitygaps=barmerge.gaps_on, который инструктирует функцию не использовать предыдущие значения для заполнения интервалов, где отсутствуют данные. Это означает, что мы получим пустые области в течение дополнительных часов. Чтобы это было видно на графике, нам также нужно использовать специальный стиль графика (style=plot.style_linebr), стиль Line With Breaks «Линия с разрывами».

Вы можете построить Heikin-Ashi бары из скрипта так, чтобы они выглядели в точности как бары Heikin-Ashi графика:

//@version=4
study("Example 6.1")
ha_t = heikinashi(syminfo.tickerid)
ha_open = security(ha_t, timeframe.period, open)
ha_high = security(ha_t, timeframe.period, high)
ha_low = security(ha_t, timeframe.period, low)
ha_close = security(ha_t, timeframe.period, close)
palette = ha_close >= ha_open ? color.green : color.red
plotcandle(ha_open, ha_high, ha_low, ha_close, color=palette)

График renko

Renko бары только графическое движение цен, без учета времени и объема. Они построены из тиков и выглядят как кирпичи, сложенные в соседние колонки [1]. Новый кирпич рисуется после того, как цена переходит верхнюю или нижнюю границу на заранее определенную величину.

//@version=4
study("Example 7", overlay=true)
renko_t = renko(syminfo.tickerid, "ATR", 10)
renko_low = security(renko_t, timeframe.period, low)
plot(renko_low)

Обратите внимание, что вы не можете построить кирпичи Ренко из сценария Pine в точности так, как они выглядят. Вы можете получить только ряд чисел, подобных значениям OHLC для баров Ренко, и использовать их в своих алгоритмах.

График линейный разрыв

Тип графика «Линейный разрыв» отображает ряд вертикальных прямоугольников, основанных на изменениях цен [1].

//@version=4
study("Example 8", overlay=true)
lb_t = linebreak(syminfo.tickerid, 3)
lb_close = security(lb_t, timeframe.period, close)
plot(lb_close)

Обратите внимание, что вы не можете построить прямоугольники Line Break из скрипта Pine в точности так, как они выглядят. Вы можете получить только серию чисел, аналогичных значениям OHLC для графика разрыва строки, и использовать их в своих алгоритмах.

График каги

График Каги состоит из непрерывной линии, меняющей направление. Направление меняется, когда цена изменяется [1] сверх установленного значения.

//@version=4
study("Example 9", overlay=true)
kagi_t = kagi(syminfo.tickerid, 1)
kagi_close = security(kagi_t, timeframe.period, close)
plot(kagi_close)

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

График pointfigure

Графики Point and Figure (PnF) только отображают движения цен [1], без учета времени. Столбец X отображается при росте цены, а столбец O отображается при падении цены.

Обратите внимание, что вы не можете построить PnF X и O из сценария Pine точно так, как они выглядят. Вы можете получить только серию чисел, аналогичных значениям OHLC для диаграмм PnF, и использовать их в своих алгоритмах. Каждый столбец X или O представлен четырьмя числами. Вы можете думать о них как о синтетических значениях OHLC PnF.

//@version=4
study("Example 10", overlay=true)
pnf_t = pointfigure(syminfo.tickerid, "hl", "ATR", 14, 3)
pnf_open = security(pnf_t, timeframe.period, open, true)
pnf_close = security(pnf_t, timeframe.period, close, true)
plot(pnf_open, color=color.green, style=plot.style_linebr, linewidth=4)
plot(pnf_close, color=color.red, style=plot.style_linebr, linewidth=4)

 

Сноски

1 ( 1, 2, 3, 4 ) На TradingView типы графиков Renko, Line Break, Kagi и PnF генерируются из значений OHLC с младшего таймфрейма. Таким образом, эти типы диаграмм представляют собой лишь приблизительное представление того, какими они были бы, если бы были созданы из тиковых данных.

/

Robo.Trading

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