Как создавать индикаторы для технического анализа на TradingView
Главная
Статьи
Как создавать индикаторы для технического анализа на TradingView

Как создавать индикаторы для технического анализа на TradingView

Профессионал
Опубликовано Aug 28, 2020Обновлено Jun 15, 2023
13m

Введение

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

Для большинства трейдеров TradingView – популярная платформа для анализа графиков. Многофункциональное HTML5 веб-приложение, предлагающее множество инструментов технического анализа, используется миллионами пользователей для отслеживания движений на форексе, рынке криптовалют и на традиционных фондовых рынках.

TradingView предлагает целый набор мощных функций: его средствами можно отслеживать активы на множестве торговых платформ и выкладывать торговые идеи в собственной социальной сети TradingView. В этой статье мы рассмотрим возможности по настройке TradingView. Мы будем использовать Pine Script – язык программирования TradingView, обеспечивающий детальный контроль над макетами графиков.

Начнем!


Что такое Pine Script?

Pine Script – это скриптовый язык, с помощью которого можно настраивать графики на TradingView. Платформа уже предоставляет вам для этого множество функций, но Pine Script позволяет расширить возможности. Не важно, хотите вы изменить цвета свечей или протестировать новую стратегию, – с помощью редактора Pine вы можете настроить графики в реальном времени по своему усмотрению.

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


Настройка

Начать работу с Pine Script очень просто. Весь код, который мы пишем, запускается на серверах TradingView, а мы имеем доступ к редактору кода и можем писать скрипты прямо в браузере – не нужно скачивать сторонние приложения и что-то настраивать.

В этом руководстве мы будем строить график валютной пары Bitcoin/Binance USD (BTCBUSD). Если вы еще не зарегистрированы на TradingView, создайте бесплатный аккаунт (также доступна профессиональная подписка, но для этой статьи она не нужна). 

Перейдите по этой ссылке, и вы увидите график вроде такого:


график BTCBUSD на tradingview

Ваш график должен быть более актуальным.


Нам нужен подробный график – для перехода к нему нажмите на указанную кнопку. Мы увидим более подробный график, инструменты для рисования и инструменты для построения линий тренда.


Подробный график BTCBUSD на tradingview

Подробный график. В панели над выделенными вкладками вы можете установить желаемые таймфреймы.


Сейчас мы не будем обсуждать использование различных доступных инструментов, но если вы серьезно относитесь к техническому анализу, то настоятельно рекомендуем ознакомиться с ними. Слева внизу (выделены на рисунке) есть несколько вкладок – нажмите на Редактор Pine.


Редактор Pine


скриншот редактора pine


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

Как видите, у нас уже есть пара строчек кода. Нажмем кнопку «Добавить на график» и посмотрим, что произойдет.


Добавление первого скрипта на график tradingview


Под исходным графиком появился второй. Новый график представляет те же данные. Чтобы удалить второй график, наведите курсор на My Script и нажмите крестик. Теперь давайте рассмотрим код.

study("My Script")

Первая строка задает название графика. Для этого требуется только название индикатора (в данном случае "My Script"), но можно также задать дополнительные параметры. Один из них – наложение. Он означает размещение индикатора на существующем графике (а не в новом сегменте). Как мы можем видеть из первого примера, по умолчанию он установлен в false. Сейчас мы не будем тестировать это, но установка параметра overlay = true добавит индикатор на существующий график.

plot(close)

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

Теперь рассмотрим следующий пример:

//@version=4 study("My Script", overlay=true) plot(open, color=color.purple)

Добавив эту строку в редактор, вы должны увидеть второй график (который выглядит как оригинальный, но сдвинутый вправо). Мы построили график цены открытия, и, поскольку открытие текущего дня является закрытием предыдущего, логично, что графики имеют одинаковую форму.

Отлично! Давайте удалим созданные нами графики (вспомните, что для этого нужно нажать на графике правую кнопку мыши и выбрать «Удалить индикаторы»). Чтобы очистить текущий график, наведите курсор на график Bitcoin / BUSD и нажмите кнопку «Скрыть».

Многие трейдеры используют свечные графики, поскольку последние предоставляют больше информации, чем обычные (например, тот, который мы только что построили). Теперь добавим на график свечи. 

//@version=4 study("My Script", overlay=true) plotcandle(open, high, low, close)

Уже лучше, но из-за отсутствия цветов график невыразителен. В идеале нам нужно отрисовать свечи красным, если на таймфрейме цена открытия больше цены закрытия, и зеленым, если цена закрытия больше цены открытия. Добавим строку над функцией plotcandle():

//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close)

В этой строке мы проходим по всем свечам и проверяем: цена открытия больше или равна цене закрытия?Если да, то цена за период упала и свеча будет красной. В противном случае – зеленой. Чтобы добавить цветовую схему, измените функцию plotcandle() , как показано ниже:

//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close, color=colors)

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


Свечной график на tradingview

Прекрасно!


Построение скользящих средних (MA)

Мы изучили некоторые основы. Давайте перейдем к созданию нашего первого собственного индикатора – экспоненциальной скользящей средней, или EMA. Это ценный индикатор, поскольку он позволяет отфильтровать рыночный шум и сгладить ценовое движение. 

EMA отличается от простой скользящей средней (SMA) тем, что придает больший вес последним данным. EMA активнее реагирует на неожиданные движения рынка и часто используется в краткосрочных стратегиях (например, во внутридневной торговле).


Простая скользящая средняя (SMA)

Мы можем построить SMA, а потом сравнить ее с EMА. Добавьте в скрипт следующую строку:

plot(sma(close, 10))

Эта строка отобразит среднее значение за предыдущие 10 дней. Вы можете задать в скобках разные значения периода и посмотреть, как изменяется кривая.


Простая 10-дневная скользящая средняя

SMA за предыдущие 10 дней


Экспоненциальная скользящая средняя (EMA)

EMA немного сложнее для понимания, но не беспокойтесь. Сначала разберем формулу:

EMA = (цена закрытия - EMA за предыдущий день) * множитель - EMA за предыдущий день

О чем говорит эта формула? Для каждого дня мы рассчитываем новую скользящую среднюю на основе предыдущей. Множитель – «вес» предыдущего периода, который рассчитывается по следующей формуле:

множитель = 2 / (период EMA + 1)

Как и в случае с простой скользящей средней, нужно указать период построения EMA. По синтаксису функция для EMA аналогична функции SMA. Для наглядности построим график EMA рядом с SMA:

//@version=4 study("My Script", overlay=true) plot(sma(close, 10)) plot(ema(close,10))


EMA и SMA на одном графике tradingview

Разница между SMA и EMA


➟ Думаете, с чего начать работу с криптовалютами? Купите биткоин на Binance!


Встроенные скрипты

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

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



Экспоненциальная скользящая средняя в pine script

Добавьте код на график


Шаблонный код будет отличаться от написанного нами – обратите внимание на функции input(). Они удобны тем, что вы можете нажать в левом верхнем углу графика…


Изменение графика в интерфейсе tradingview


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


изменение входных параметров EMA


Чтобы это продемонстрировать, мы добавим в следующий скрипт две функции input().


Построение индикатора индекса относительной силы (RSI)

Индекс относительной силы (RSI) – еще один ключевой индикатор технического анализа. Он известен как индикатор импульса. Это означает, что он отображает скорость, по которой активы покупаются и продаются. Индекс RSI, расположенный на шкале от 0 до 100, говорит трейдерам о перекупленности или перепроданности актива. Как правило, актив считается перепроданным, если RSI меньше или равна 30, и перекупленным, если RSI больше или равна 70.

Можете проверить сами – перейдите в меню Новый > Стратегия RSI. RSI обычно измеряется за периоды в 14 единиц (то есть 14 часов или 14 дней), но вы можете настроить этот параметр в соответствии с собственной стратегией.

Добавьте его на графике. Вы должны увидеть несколько стрелок (определенных в коде функцией strategy.entry () ). RsiLE указывает на потенциальную возможность длинной позиции по активу, поскольку он может быть перепродан. RsiSE также указывает на потенциальную возможность короткой позиции по активу, поскольку он может быть перекуплен. Обратите внимание: как и в случае со всеми индикаторами, вы не должны полагаться на них как на гарантию того, что цены будут снижаться/расти.


Тестирование стратегий

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

Рассмотрим в качестве примера простой скрипт. Создадим простую стратегию, по которой будем открывать длинную позицию, когда цена BTC падает ниже 11 000 долларов США, и закрывать позицию, когда цена превышает 11 300 долларов США. Мы можем посмотреть, насколько прибыльной является эта стратегия применительно к истории рынка.

//@version=4 strategy("ToDaMoon", overlay=true) enter = input(11000) exit = input(11300) price = close if (price <= enter)     strategy.entry("BuyTheDip", strategy.long, comment="BuyTheDip") if (price >= exit)     strategy.close_all(comment="SellTheNews")

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

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

Кроме того, на графике мы показали стрелками места входа в позиции и выхода из них. Мы пометили эти точки с помощью параметра комментария (в этом примере «BuyTheDip» и «SellTheNews»). Скопируйте код и добавьте его на график.


активный индикатор на графике tradingview

Индикаторы на графике. Можно уменьшить масштаб


TradingView автоматически применяет ваши правила к более старым данным. Обратите внимание: вы переключились с Pine Editor на вкладку Strategy Tester. Здесь вы можете проанализировать потенциальную прибыль, просмотреть список сделок и эффективность каждой сделки.


Тестирование стратегии на Tradingview

Открытые и закрытые позиции


Подведем итоги

Теперь мы можем написать собственный сценарий, используя знакомые инструменты. Мы объединим на одном графике EMA и RSI, а потом используем их значения для раскрашивания свечей, чтобы получить информацию, которую можно легко визуализировать. 

Результаты графика не являются финансовым советом – объективно правильного способа использования не существует. Как и остальные индикаторы, его следует использовать вместе с другими инструментами для разработки собственной стратегии.

Давайте напишем наш новый скрипт. Чтобы было чистое пространство для работы, удалите с графика предыдущие индикаторы и скройте график Bitcoin/BUSD.

Начнем с определения нашего исследования. Назовите его по своему усмотрению, удостоверившись лишь в том, что overlay=true.

study(title="Binance Academy Script", overlay=true)

Вспомним формулу EMA, которую мы описали выше. Нам нужно определить множитель для периода EMA. Давайте сделаем его переменной (input), которая является целым числом (то есть без десятичных знаков). Также установим минимум (minval) и значение по умолчанию (defval).

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)


Используя эту новую переменную, мы можем вычислить значение EMA для каждой свечи:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength)


Хорошо. Теперь перейдем к RSI. Аналогичным способом зададим его период:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)

Теперь мы можем его посчитать:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength)

На этом этапе давайте зададим логику, которая раскрашивает свечи в зависимости от значений EMA и RSI. Рассмотрим ситуацию, когда цена закрытия свечи превышает EMA (а) и когда RSI выше 50 (б).

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

Следующая строка нашего скрипта будет выглядеть так:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50 ? color.green : color.red

Если мы переведем код на обычный язык, то получится, что, если значение EMA превышает цену закрытия и показатель RSI превышает 50, мы красим свечу в зеленый цвет. В противном случае цвет будет красным. 

Добавим EMA:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50 ? color.green : color.red plot(emaVal, "EMA")

Наконец, нарисуем свечи, добавив параметр цвета:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50 ? color.green : color.red plot(emaVal, "EMA") plotcandle(open, high, low, close, color=colors)

Вот весь наш скрипт! Чтобы увидеть его в действии, добавьте его на график.


Скрипт Tradingview в действии

График BTC/BUSD с индикатором EMA/RSI.


Резюме

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

В данной статье мы коснулись лишь пары индикаторов, но вы можете самостоятельно разобрать более сложные, либо выбрав встроенные скрипты из списка Новый, либо написав их самостоятельно.

Ищете вдохновение? Почерпнуть идеи для следующего проекта вы можете из статей ниже: