Trading Community
Trading Community личный блог
20 февраля 2023, 12:31

Примеры работы с "сериями" в Pine Script

Прежде чем перейдем к практическим примерам работы с сериями расскажу немного теории.

Основной тип данных, используемый в Pine script, называется серией. Это непрерывный список значений, который идёт назад во времени от текущего бара и где для каждого бара существует одно значение.

Примеры работы с "сериями" в Pine Script

Серии хранят последовательность исторических значений. К ним можно получить доступ с помощью [ ] оператора. Примерами встроенных последовательных переменных являются: openhigh, low, closevolume и time. Любое выражение, содержащее переменную серии, будет рассматриваться как сама серия. Например:

a = open + close + low + high // Сложение 4 серий

b = high * 3 // Умножение переменной серии на константу

c = low[1] // Ссылка на предыдущее значение «low», текущее low[0]

Записи close и close[0] равносильны, для обращения к текущему бару не обязательно указывать оператор [ ] с нулевым номером.

?: условный тернарный оператор:

условие? результат 1: результат 2

Если условие выполняется, то вернется результат 1, если нет, то результат 2.

условие 1? результат 1: условие 2? результат 2: результат 3

Если условие 1 выполняется, то вернется результат 1, если нет, то если условие 2 выполняется — вернется результат 2. А если не выполняются оба условия — вернется результат 3.

nz()  — встроенная функция, заменяет на NaN (ничего) значения с нулями.

Шаблоны которые я использую при программировании на Pine script:

Сумма/Счетчик.

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

x = 0 // задание переменной x

n = 1 // задание переменной n, равной 1, если это счетчик

x := условие? x[1] + n: nz(x[1]) // при выполнении условия, мы к предыдущему значению x прибавляем значение n, если условие не выполняется - присваивает своё предыдущее значение.

Графический результат

Из примера можно увидеть, что каждый раз когда low было ниже 30000 значение х увеличивалось на 1.

Присвоение переменной значения и удержание его постоянным.

x = 0 // задание переменной x

n = a // задание переменной a, или сразу в формуле пишите нужное значение вместо n

x := условие and x[1] == 0? x[1] + n: nz(x[1]) // присваивается значение n, если выполняется условие x предыдущее равно 0, что говорит о том, что ранее это условие не выполнялось.

Код Графический результат

Из примера видно, что один раз когда low было ниже 30000 значение х увеличивалось на 1, и более не реагировало на данное условие.

Присвоение переменной значения и удержание его до отмены условия.

x = 0 // задание переменной x

x := условие 1? 1: условие 2? 0: nz(x[1]) // Если выполняется условие 1  — присваивается 1, если выполняется условие 2  — присваивается 0, если не выполняется ни одно из условий — присваивается предыдущее.

Код Графический результат

Из примера видно, что каждый раз когда low было ниже 30000 значение х увеличивалось на 1, а когда выполнялось условие обратное первому (low было больше 30000х уменьшался до 0.

Также можно отменять другим условием.

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

Код

Если у вас есть вопросы по сериям и их использовании — пишите в комментариях.

8 Комментариев
  • kiryushka
    20 февраля 2023, 12:49
    time series это временной ряд по-русски
    а не серия
  • ezomm
    20 февраля 2023, 15:26
    Я в Метастоке 7.2 сочинял индюки на вижел бейсик. Проблема всех индюков  это — статичный период типа 14.Вместо него надо ставить формулу расчета периода.Чем сильнее тренд, тем период меньше и наоборот.Формула должна работать в диапазоне от 3 до 34 (64).
    Например посчитать суммарное перекрытие углов (пробой поддержки) за период 34(64).Чем больше sum (L-ref(H,-2),34) тем более период.Коридор  цены = боковик и период =34(64).Но перекрытие не должно заходить ниже начальной точки отсчета типа ref(L,34). Когда голова( 5я волна ) полностью закрывается коррекцией (А волна ) период =34(64).
    if (L>ref(L,-34),sum(L- ref(H,-2),34)).Это не полная формула расчета периода.Простая формула если посчитать количество перекрытий за период 34 .
      период для роста  = if (L>ref(L,-34),sum(if((L< ref(H,-2),1,0),34))

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн