Что такое Pine Script?
Pine Script — это язык сценариев, используемый для изменения ваших графиков на платформе TradingView. Платформа предоставляет вам множество функций для этого, но Pine Script позволяет вам двигаться к своей цели. Если вы хотите изменить цвета графиков ценового действия или протестировать новую стратегию, редактор Pine поможет вам настроить графики в реальном времени по вашему усмотрению.
Код хорошо документирован, поэтому обязательно ознакомьтесь с руководством пользователя для получения дополнительной информации. В этом руководстве мы стремимся обсудить некоторые основы и предоставить индикаторы, которые могут быть полезны при торговле цифровыми валютами.
подготовка
Начать использовать Pine Script очень легко. Любой код, который мы пишем, работает на серверах TradingView, поэтому мы можем использовать редактор и разрабатывать скрипты в браузере — никакой дополнительной загрузки или настройки не требуется.
В этом уроке мы создадим график валютной пары Bitcoin/Binance USD (BTCBUSD). Если у вас еще нет учетной записи, вы можете создать ее бесплатно (также доступна профессиональная подписка, но для этого руководства она не обязательна).
Перейдите по этой ссылке, и вы увидите диаграмму, похожую на следующую:

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

Полнофункциональный график. Вы можете редактировать временные рамки, нажимая на изображения над выделенными вкладками.
Мы не будем обсуждать, как использовать различные доступные инструменты, но если вы интересуетесь техническим анализом, мы настоятельно рекомендуем вам ознакомиться с ними, чтобы ознакомиться с ними. В левом нижнем углу (выделено на изображении) вы найдете несколько разных вкладок — нажмите «Редактор Pine».
Редактор сосны

Этот редактор предлагает вам набор очаровательных функций. Мы сообщим ему, что хотим сделать, затем нажмите «Добавить в диаграмму», чтобы наши комментарии появились вверху. Обратите внимание, что диаграмма может стать неопрятной, если вы введете несколько комментариев одновременно, поэтому мы будем удалять их между примерами (щелкните правой кнопкой мыши по диаграмме > Удалить индикаторы).
Вы можете видеть, что у нас уже есть две строки кода. Давайте нажмем «Добавить в диаграмму», чтобы посмотреть, что произойдет.

Вторая диаграмма добавляется под исходной диаграммой. Новая диаграмма будет представлять те же данные. Наведите указатель мыши на кнопку «Мой сценарий» и щелкните многоточие, чтобы удалить ее. Давайте обсудим код более подробно.
исследование("Мой сценарий")
Первая строка настраивает наши комментарии. Требуется только имя, по которому вы хотите, чтобы индикатор назывался («Мой скрипт» в данном случае), но есть также некоторые дополнительные переменные, которые мы можем добавить. Одной из таких переменных является overlay, которая сообщает платформе разместить индикатор на текущем графике (а не в новом секторе). Как вы можете видеть в первом примере, по умолчанию оно имеет значение false. Итак, сейчас мы не увидим его работающим, overlay=true добавляет индикатор на текущий график.
сюжет (закрыть)
Эта строка представляет собой инструкцию для построения цены закрытия Биткойна. График представляет собой линейный график, но мы также можем отображать ценовое действие и гистограммы, как мы вскоре увидим.
Теперь попробуем следующее:
//@version=4 исследование("Мой сценарий", overlay=true)plot(open, color=color.purple)
Как только вы добавите этот символ, вы должны увидеть второй график (похоже, что исходный график сместился вправо). Вместо этого мы всего лишь построили цену открытия. Поскольку цена открытия текущего дня является ценой закрытия предыдущего дня, имеет смысл иметь аналогичную форму.
Хороший! Давайте избавимся от существующих комментариев (помните, что мы делаем это, щелкнув правой кнопкой мыши и нажав «Удалить индикаторы»). Наведите указатель мыши на BTC/BUSD, а затем нажмите кнопку «Скрыть», чтобы также удалить текущий график.
Многие трейдеры предпочитают графики ценового действия, поскольку они дают нам больше информации, чем простые рисунки, как мы только что сделали. Давайте добавим их ниже.
//@version=4 исследование("Мой скрипт", overlay=true)plotcandle(open, high, low, close)
Хорошее начало, но отсутствие цвета делает его немного скучным. В идеале у нас должны быть красные свечи, когда цена открытия превышает цену закрытия в течение определенного периода времени, и зеленые свечи, когда цена закрытия превышает цену открытия. Мы добавим строку над свойством свечного графика():
//@version=4 исследование("Мой сценарий", overlay=true) цвета = открыть >= закрыть ? color.red : цвет.зеленый график свечи(открытие, максимум, минимум, закрытие)
Это происходит на каждом графике ценового действия, а также проверяется, превышает ли цена открытия цену закрытия или равна ей. В данном случае это означает, что цены упали за определенный период, поэтому график ценового действия будет окрашен в красный цвет. В противном случае он будет окрашен в зеленый цвет. Измените функцию drawcandle(), чтобы ввести цветовую схему:
//@version=4 исследование("Мой сценарий", overlay=true) цвета = открыть >= закрыть ? color.red : color.greenplotcandle(открытие, максимум, минимум, закрытие, цвет=цвета)
Удалите существующие индикаторы, если вы их еще не удалили, и добавьте этот индикатор на график. У нас должно быть что-то, что представляет собой обычный график ценового действия.

Рисование скользящих средних (MA)
Ниже приведены некоторые основы. Перейдем к первому пользовательскому индикатору – Экспоненциальной скользящей средней или EMA. Это ценный инструмент, который позволяет нам устранить отвлекающие факторы рынка и облегчить понимание движений рынка.
Экспоненциальная скользящая средняя немного отличается от простой скользящей средней (SMA), поскольку она фокусируется на самых последних данных. Он имеет тенденцию реагировать на внезапные движения и обычно используется в краткосрочных сделках (например, дневная торговля).
Простая скользящая средняя (SMA)
Мы также можем нарисовать простую скользящую среднюю, поэтому нам придется сравнить их позже. Добавьте эту строку в свой скрипт:
сюжет (sma (закрыть, 10))
Это среднее значение за предыдущие 10 дней. Отрегулируйте число в скобках, чтобы увидеть, насколько изменится кривая при учете разных периодов.

Простая скользящая средняя основана на данных за предыдущие 10 дней.
Экспоненциальная скользящая средняя (EMA)
Экспоненциальную скользящую среднюю может быть немного сложно понять, но не волнуйтесь. Рассмотрим уравнение подробно:
EMA = (Close – EMA предыдущего дня) * Множитель – EMA предыдущего дня
Так что же это нам говорит? Итак, новое скользящее среднее каждого дня рассчитывается на основе скользящего среднего предыдущего дня. Множитель представляет собой «вес данных» за самый последний период и рассчитывается по следующему уравнению:
Множитель = 2 / (Длина EMA + 1)
Для простых скользящих средних нам необходимо определить, как долго будет длиться экспоненциальная скользящая средняя. Структурно график экспоненциального скользящего среднего аналогичен графику простого скользящего среднего. Нарисуйте его рядом с простой скользящей средней, чтобы можно было сравнить их:
//@version=4 исследование("Мой сценарий", overlay=true)plot(sma(close,10))plot(ema(close,10))

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

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

Вы также можете легко изменить некоторые значения во всплывающем окне, нажав на колесо настроек.

Мы добавим два свойства input() в следующий скрипт, чтобы продемонстрировать, как это сделать.
График индекса относительной силы (RSI)
Индекс относительной силы (RSI) является одним из основных индикаторов технического анализа. Он известен как индикатор импульса, что означает, что он измеряет скорость, с которой активы покупаются и продаются. Рейтинг RSI оценивается по шкале от 0 до 100 и пытается сообщить инвесторам, перекуплен или перепродан актив. Обычно актив считается перепроданным, если его рейтинг меньше или равен 30, и считается перекупленным, если его рейтинг больше или равен 70.
Если вы перейдете в раздел «Новый» > «Стратегия RSI», вы увидите это сами. RSI измеряется за 14 периодов (т.е. 14 часов или 14 дней), но вы можете настроить эту настройку в соответствии со своей собственной стратегией.
Добавьте это в диаграмму. Теперь вы должны увидеть несколько стрелок (определяемых свойством enter.strategy() в коде). RsiLE указывает на потенциальные возможности покупки актива, поскольку он может оказаться в зоне перепроданности. В то время как RsiSE подчеркивает потенциальные точки продажи актива, когда он находится в зоне перекупленности. Обратите внимание, что, как и все индикаторы, на них не следует полагаться как на окончательное свидетельство роста или падения цен.
Выполните бэктест
Существует способ, позволяющий нам тестировать пользовательские индикаторы. Хотя прошлые результаты не являются гарантией будущих результатов, процесс тестирования скриптов дает нам представление о том, насколько эффективны они при получении сигналов.
Ниже приведен пример простого скрипта. Мы создадим простую стратегию для входа в длинную сделку, когда цена Биткойна упадет ниже 11 000 долларов США, и выхода из сделки, когда цена превысит 11 300 долларов США. Таким образом, мы можем узнать, насколько прибыльной была эта стратегия исторически.
//@version=4 Strategy("ToDaMoon", overlay=true) enter = input(11000) exit = input(11300) цена = close if (price <= enter) strategy.entry("BuyTheDip", Strategy.long , comment="BuyTheDip") if (цена >= выход) Strategy.close_all(comment="SellTheNews")
Здесь мы определили точки входа и выхода как переменные — обе являются входными, что означает, что мы можем изменить их на графике позже. Мы также установили переменную цены, которая записывает цену закрытия для каждого периода. Таким образом, в использовании операторов if есть что-то логичное. Если часть в квадратных скобках имеет значение true, блок с отступом будет активирован. В противном случае оно будет пропущено.
Также, если цена упадет или станет равной желаемой цене входа, выражение будет оценено как истинное, и мы откроем сделку на покупку. Как только цена станет равной или превысит требуемую цену выхода, будет активирован второй блок, а также закроются все открытые сделки.
Мы добавим комментарии к графику с помощью стрелок для обозначения точек входа и выхода, поэтому мы назвали эти точки в рамке комментариев (в данном примере «Купить при падении» и «Продать на новостях»). Скопируйте символ и добавьте его на диаграмму.

Теперь вы можете увидеть индикаторы на графике. Возможно, вам придется уменьшить масштаб, чтобы посмотреть.
TradingView применяет ваши правила к старым данным. Вы также заметите переход от редактора Pine к вкладке «Тестер стратегий». Это позволяет вам увидеть обзор потенциальной прибыли, список сделок и их результативность.

Сделки, в которые мы вошли и из которых вышли.
Свяжите элементы вместе
Пришло время написать нашу собственную программу, используя некоторые из описанных выше концепций. Мы объединим экспоненциальную скользящую среднюю и RSI, используя их значения, чтобы раскрасить графики ценового действия и получить мыслимую информацию.
Это не следует истолковывать как финансовый совет, поскольку не существует объективно определенного правильного способа использования этого показателя. Как и все другие индикаторы, этот индикатор следует использовать в сочетании с другими инструментами для разработки вашей инвестиционной стратегии.
Приступаем к работе над новым сценарием. Удалите все индикаторы с графика, а также скройте график BTC/BUSD, чтобы у нас был пустой график для начала работы.
Начнем с определения исследования. Вы можете использовать любое имя, просто не забудьте установить overlay=true.
Study(title="Скрипт Binance Academy", overlay=true)
Помните уравнение экспоненциального скользящего среднего, о котором мы говорили ранее. Нам необходимо предоставить множителю данные за период, который займет экспоненциальное скользящее среднее. Давайте сделаем это полем ввода, которое требует целого числа (следовательно, без десятичных знаков). Мы также укажем минимальное значение (minval) и значение по умолчанию (defval).
Study(title="Скрипт Binance Academy", overlay=true) emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0)
Мы можем рассчитать значение EMA для каждой свечи на графике, используя новую переменную:
Study(title="Скрипт Binance Academy", overlay=true) emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength)
удивительный. Что касается индекса относительной силы (RSI). Введем период аналогичным образом:
Study(title="Скрипт Binance Academy", overlay=true) emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input (title="Длина RSI", type=input.integer, defval=25, minval=0)
Теперь мы можем это посчитать:
Study(title="Скрипт Binance Academy", overlay=true) emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input (title="Длина RSI", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength)
На этом этапе вы должны знать, что цвета графиков ценового действия зависят от значений EMA и RSI. Давайте рассмотрим пример, когда (а) цена закрытия свечи пересекает EMA и (б) RSI выше 50.
Почему? Что ж, вы можете решить, что эти индикаторы можно использовать вместе, чтобы подсказать вам, когда покупать или продавать биткойны. Например, вы можете подумать, что выполнение обоих условий означает, что сейчас подходящее время для входа в длинную сделку. В качестве альтернативы вы можете использовать индикаторы, чтобы напоминать вам, когда не следует продавать, даже если другие индикаторы показывают обратное.
Итак, следующая строка выглядит так:
Study(title="Скрипт Binance Academy", overlay=true) emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input (title="Длина RSI", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) flowers = close > emaVal и rsiVal > 50 ? цвет.зеленый : цвет.красный
Если мы переведем это на простой английский язык, это означает, что если EMA превысит цену закрытия, а показатель RSI пересечет отметку 50, мы окрасим свечу в зеленый цвет. В противном случае он будет окрашен в красный цвет.
Затем постройте экспоненциальное скользящее среднее:
Study(title="Скрипт Binance Academy", overlay=true) emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input (title="Длина RSI", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) flowers = close > emaVal и rsiVal > 50 ? color.green : график color.red(emaVal, "EMA")
Наконец, нарисуйте свечи, обязательно включая переменную цвета:
Study(title="Скрипт Binance Academy", overlay=true) emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input (title="Длина RSI", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) flowers = close > emaVal и rsiVal > 50 ? color.green : color.redplot(emaVal, "EMA")plotcandle(open, high, low, close, color=colors)
И все, сценарий готов! Добавьте это в свою диаграмму, чтобы увидеть это в действии.

График BTC/BUSD с использованием EMA/RSI.
Заключительные мысли
В этой статье мы рассмотрели несколько основных примеров того, что можно сделать с помощью редактора Pine от TradingView. Вы должны иметь возможность оставлять простые комментарии к графику цен, чтобы получить дополнительную информацию о ваших индикаторах.
Мы выделили здесь только два индикатора, но можно легко создать более сложные индикаторы – путем определения встроенных скриптов заново или написания их самостоятельно.
Нужны вдохновляющие идеи? Следующие статьи могут помочь вам получить некоторые идеи для вашего следующего проекта:

