Кодинг индикатора ShiftMA

Кодинг индикатора ShiftMA

Автор: Noro
26.03.2019

Статья о том как самостоятельно создать (запрограммировать) индикатор ShiftMA на сервисе TradingView.com, используя их встроенный язык программирования PineScript. С пошаговой инструкцией и кликабельными снимками экрана. Мы создадим индикатор, а не стратегию, значит проводить тесты торговли на ценах прошлого (бектест) им не получится.

Создание скрипта

Пример будет приводиться на русскоязычной версии сайта TradingView.com.

  • Шаг 1. В самом низу интерфейса жмём кнопку «редактор Pine».
  • Шаг 2. Жмём «Новый».
  • Шаг 3. В самом верху выпавшего списка «Пустой скрипт индикатора».

При создании скрипта индикатора автоматически появляются 3 строки, как на снимке экрана выше, давайте их разберём.

Комментарий. Два символа «слеш» подряд в начале строки означают что эта строка не работает. Так оставляют заметки-комментарии в коде.

Версия языка. Исключение сделано для версии языка. Если в начале символ «собачка» после «слешей», то далее можно объявить номер версии языка. Рекомендуется версия 3 (последняя). Первая уже не работает, а вторая версия может «перерисовываться», а нам этого не надо.

Тип скрипта. Во второй строке указан тип скрипта, который может быть либо «study» (индикатор технического анализа), либо «strategy» (торговая стратегия), одно из двух. Причем что-то одно указать обязательно. Далее нужны скобки, в которых можно указать дополнительные параметры. Например название.

Название. Обязательно должно быть внутри двойных кавычек. Можно на русском языке.

PLOT. Эта команда рисует линию. Линия будет на том уровне цены, который указан в скобках.

CLOSE. В данном примере индикатор будет рисовать линию по ценам закрытий периодов (например, свечей).

Сохранение скрипта

Чтобы мы (или другие) скрипт наш потом смогли найти, то придумаем ему название. Кстати говоря, пока Вы специально не опубликуете скрипт для всех он будет доступен только Вам и не виден другим. В примере назвал «ShiftMA индикатор».

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

  • Шаг 4. Жмём «Сохранить».
  • Шаг 5. Пишем такое же имя скрипта если оно отличается (бывает).
  • Шаг 6. Жмём «Сохранить» в появившемся окне.

Запуск скрипта

Для того чтобы программировать скрипт очень желательно и очень удобно иметь быструю обратную связь. То есть всё время видеть что изменится после того как мы добавили/изменили какую то строку программного кода. Вот почему мы сначала запускаем скрипт сразу, хотя мы в нём еще ничего кроме названия не поменяли.

  • Шаг 7. Жмём кнопку «индикаторы», которая над графиком.
  • Шаг 8. В появившемся окне жмём «Мои скрипты».
  • Шаг 9. В появившиеся справа списке скриптов жмём по нашему.

Кроме этого можно найти его в строке поиска, если ввести его имя. Но имя нужно обязательно писать с первого слова, а не любое случайное слово. Если Ваш скрипт почему-то не находится, то полностью обновите страницу в браузере (F5).

Редактирование скрипта

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

В первую очередь, хочется сделать из него overlay-индикатор. Overlay означает буквально «поверх» (графика). Чтобы индикатор не отображался под графиком. По умолчанию этот режим отключен, чтобы его включить надо будет добавить параметр в команду study. После чего перезапустить скрипт. Все параметры записываются через запятую. Пробел после запятой не обязателен, но желателен, так как так код становится читабельнее и понятнее.

study(«ShiftMA Индикатор», overlay = true)

Для индикатора ShiftMA нам в первую очередь понадобится простое скользящее среднее (simple moving average, SMA), с этого и начнём. Нам так же понадобится создать переменную, в которую мы будем записывать наше скользящее среднее. Эту переменную и вставим в команду PLOT, чтобы она сразу отображалась поверх графика.

Получить простое скользящее среднее очень легко. Для этого есть команда sma с двумя параметрами, где первый параметр это источник цены (например, close, OHLC4 и так далее), а второй — количество периодов (свечей), то есть длинна. Переменную я назвал MA, и получилось следующее:

ma = sma(close, 3)

Теперь надо сделать так чтобы она отображалась на графике. Для этого уберу close из команды PLOT, так как тут это всё равно не нужно. Всё вместе теперь выглядит так:

//@version=3
study(«ShiftMA Индикатор», overlay = true)
ma = sma(close, 3)
plot(ma)

Теперь добавлю еще 2 линии индикатора, которые нужны для открытия длинных и коротких позиций. Для начала они будут на расстоянии 10% от цены. Тогда у меня должно быть 3 команды PLOT. Переменные назову long и short, и рассчитываться они будут от переменной ma. Получилось так:

//@version=3
study(«ShiftMA Индикатор», overlay = true)
ma = sma(close, 3)
long = ma — (ma / 100 * 10)
short = ma + (ma / 100 * 10)
plot(ma)
plot(long)
plot(short)

Конечно прибавить или вычесть 10% из значения ma можно было бы и более простыми способами, но я выбрал такой способ, ниже Вы поймете почему.

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

  • linewidth — задает толщину линии: 1, 2 или 3
  • color — сами догадаетесь
  • transp — сокращение от слова transparency (прозрачность)

 

И получилось следующее:

plot(ma, linewidth = 2, color = blue, transp = 0)
plot(long, linewidth = 2, color = lime, transp = 0)
plot(short, linewidth = 2, color = red, transp = 0)

Параметры скрипта

Теперь скрипт показывает всё что нужно, но не имеет изменяемых пользователем параметров. Вот их и будем добавлять. Есть команда INPUT, а переменной можно присваивать её значения. Сделаю 2 переменных для лонга и шорта. По умолчанию будет значение 10. И эти новые переменные подставлю туда где ранее было установлено 10. Получилось так:

//@version=3
study(«ShiftMA Индикатор», overlay = true)
shiftlong = input(10.0)
shiftshort = input(10.0)
ma = sma(close, 3)
long = ma — (ma / 100 * shiftlong)
short = ma + (ma / 100 * shiftshort)
plot(ma, linewidth = 2, color = blue, transp = 0)
plot(long, linewidth = 2, color = lime, transp = 0)
plot(short, linewidth = 2, color = red, transp = 0)

Кстати, в качестве разделителя дробной части нужно указывать точку, а не запятую, потому как так заведено в английском языке. Я написал в параметрах 10.0, а не 10 — это нужно чтобы пользовательский параметр позволял выбирать дробные значения.

Задание для закрепления?

Если хотите, можете сами додуматься как реализовать изменение пользователем параметра для длины (количество периодов/свечей) скользящего среднего. На данный момент там «зашито» 3 и пользователь это изменить не может.

 

Советы

Команды PLOT лучше размещать в самом конце скрипта, а команды типа INPUT в самом начале.