Введение

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

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

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

Давайте начнем!


Что такое Pine Script?

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

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


Настройка

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

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

Перейдите по этой ссылке, и вы увидите диаграмму, похожую на следующую:


BTCBUSD Chart on tradingview

Ваша, вероятно, будет более актуальной.


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


Full featured chart on tradingview for BTCBUSD

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


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


Редактор Сосны


screenshot of the pine editor


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

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


Adding first script to tradingview chart


Вторая диаграмма добавляется под оригинал. Новая диаграмма представляет те же данные. Наведите курсор на «Мой сценарий» и нажмите на крестик, чтобы удалить его. Теперь давайте углубимся в код.

исследование("Мой сценарий")

Эта первая строка просто настраивает нашу аннотацию. Требуется только имя, которое вы хотите назвать индикатором («Мой скрипт» в данном случае), но мы также можем добавить некоторые дополнительные параметры. Одним из них является наложение, которое сообщает TradingView разместить индикатор на существующем графике (а не в новом сегменте). Как вы можете видеть из нашего первого примера, по умолчанию оно имеет значение false. Хотя сейчас мы не увидим его в действии, overlay=true добавляет индикатор на существующий график.

сюжет (закрыть)

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

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

//@версия=4
исследование("Мой сценарий", overlay=true)
сюжет (открытый, цвет = color.purple)

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

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

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

//@версия=4
исследование("Мой сценарий", overlay=true)
plotcandle(открытие, максимум, минимум, закрытие)

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

//@версия=4
исследование("Мой сценарий", overlay=true)
цвета = открыть >= закрыть ? цвет.красный : цвет.зеленый
plotcandle(открытие, максимум, минимум, закрытие)

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

//@версия=4
исследование("Мой сценарий", overlay=true)
цвета = открыть >= закрыть ? цвет.красный: цвет.зеленый
plotcandle(открытие, максимум, минимум, закрытие, цвет=цвета)

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


Candlestick chart on tradingview

Красивый!


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

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

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


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

С таким же успехом мы могли бы построить SMA, чтобы потом сравнить их. Добавьте эту строку в свой скрипт:

сюжет (sma (закрыть, 10))

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


Simple moving average based on previous 10 days

SMA за предыдущие десять дней.


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

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

EMA = (Close – EMA предыдущего дня) * Множитель – EMA предыдущего дня

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

Множитель = 2 / (Длина EMA + 1)

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

//@версия=4
исследование("Мой сценарий", overlay=true)
сюжет (sma (закрыть, 10))
сюжет (ema (закрыть, 10))


EMA and SMA on one tradingview chart

Вы можете увидеть небольшую разницу между двумя типами MA.


➠ Хотите начать работу с криптовалютой? Купите биткойны на Binance!


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

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

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



Moving average exponential in pine script

Добавьте это в диаграмму.


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


Modifying a chart on tradingview interface


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


changing inputs on EMA


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


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

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

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

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


Бэктестирование

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

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

//@версия=4
стратегия("ToDaMoon", overlay=true)
введите = ввод (11000)
выход = ввод (11300)
цена = закрыть

if (цена <= введите)
Strategy.entry("BuyTheDip", Strategy.long, comment="BuyTheDip")
если (цена >= выход)
Strategy.close_all(comment="SellTheNews")

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

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

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


indicator active on tradingview chart

Теперь вы можете увидеть индикаторы на графике. Возможно, вам придется уменьшить масштаб.


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


Trading view strategy tester

Позиции, в которые мы вошли и из которых вышли.


Связывая это вместе

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

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

Теперь давайте поработаем над нашим новым скриптом. Удалите все свои индикаторы с графика, а также скройте график Bitcoin/BUSD, чтобы у нас был чистый холст для работы.

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

Study(title="Скрипт Binance Academy", overlay=true)

Помните нашу формулу EMA, приведенную ранее. Нам нужно предоставить множителю длину EMA. Давайте сделаем вход, требующий целого числа (то есть без десятичных знаков). Мы также установим минимальное значение (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(закрыть, emaLength)


Большой. Переходим к RSI. Аналогичным образом зададим ему длину:

Study(title="Скрипт Binance Academy", overlay=true)
emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0)
emaVal = ema(закрыть, 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(закрыть, emaLength)
rsiLength = input(title="Длина RSI", type=input.integer, defval=25, minval=0)
rsiVal = rsi(закрыть, 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(закрыть, emaLength)
rsiLength = input(title="Длина RSI", type=input.integer, defval=25, minval=0)
rsiVal = rsi(закрыть, rsiLength)
цвета = закрыть > emaVal и rsiVal > 50? цвет.зеленый : цвет.красный

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

Затем постройте EMA:

Study(title="Скрипт Binance Academy", overlay=true)
emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0)
emaVal = ema(закрыть, emaLength)
rsiLength = input(title="Длина RSI", type=input.integer, defval=25, minval=0)
rsiVal = rsi(закрыть, rsiLength)
цвета = закрыть > emaVal и rsiVal > 50? цвет.зеленый : цвет.красный
сюжет(emaVal, "EMA")

Наконец, постройте свечи, обязательно включив параметр цвета:

Study(title="Скрипт Binance Academy", overlay=true)
emaLength = input(title="Длина EMA", type=input.integer, defval=25, minval=0)
emaVal = ema(закрыть, emaLength)
rsiLength = input(title="Длина RSI", type=input.integer, defval=25, minval=0)
rsiVal = rsi(закрыть, rsiLength)
цвета = закрыть > emaVal и rsiVal > 50? цвет.зеленый : цвет.красный
сюжет(emaVal, "EMA")
plotcandle(открытие, максимум, минимум, закрытие, цвет=цвета)

И это сценарий! Добавьте его на диаграмму, чтобы увидеть его в действии.


Tradingview script in action

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


Заключительные мысли

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

Здесь нас заинтересовала только пара индикаторов, но более сложные легко раскрутить — либо выбрав встроенные скрипты из New, либо написав их самостоятельно.

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

  • Краткое руководство по индикатору Parabolic SAR

  • Руководство по освоению ретрейсмента Фибоначчи

  • Объяснение опережающих и запаздывающих индикаторов

  • Объяснение индикатора MACD