Вступ
Без надійних торгових інструментів неможливо здійснити якісний технічний аналіз. Сильна торгова стратегія допоможе уникати поширених помилок, ефективніше управляти ризиками, знаходити і реалізовувати більше торгових можливостей.
Для більшості трейдерів 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, створіть безкоштовний обліковий запис (також доступна професійна передплата, але для цієї статті вона не потрібна).
Перейдіть за цим посиланням, і ви побачите графік на кшталт такого:
Ваш графік має бути більш актуальним.
Нам потрібен детальний графік – для переходу до нього натисніть на вказану кнопку. Ми побачимо докладніший графік, інструменти для малювання та інструменти для побудови ліній тренду.
Детальний графік. У панелі над виділеними вкладками можна встановити бажані таймфрейми.
Зараз ми не обговорюватимемо використання різних доступних інструментів, але якщо ви серйозно ставитеся до технічного аналізу, то рекомендуємо ознайомитися з ними. Зліва внизу (виділені на малюнку) є кілька вкладок – натисніть Редактор Pine.
Редактор Сосна
У цьому редакторі відбувається справжнє чаклунство. Щоб побачити результат, необхідно написати в редакторі інструкції, а потім натиснути кнопку «Додати графік». Зверніть увагу: якщо застосувати декілька власних індикаторів одночасно, графік може стати безладним, тому ми видалятимемо їх між прикладами (права кнопка миші на графіку > «Видалити індикатори»).
Як бачите, у нас вже є кілька рядків коду. Натисніть кнопку "Додати на графік" і подивимося, що станеться.
Під вихідним графіком з'явився другий. Новий графік представляє самі дані. Щоб видалити другий графік, наведіть курсор на My Script і натисніть хрестик. Тепер розглянемо код.
дослідження ("Мій сценарій")
Перший рядок задає назву графіка. Для цього потрібна лише назва індикатора (в даному випадку "My Script"), але можна також встановити додаткові параметри. Один із них – накладення. Він означає розміщення індикатора на існуючому графіку (а чи не новому сегменті). Як ми бачимо з першого прикладу, за умовчанням він встановлений у false. Зараз ми не тестуватимемо це, але встановлення параметра overlay = true додасть індикатор на існуючий графік.
ділянка (близько)
Цей рядок є інструкцією для побудови ціни закриття біткоїну; plot задає лінійний графік, але ми можемо додавати свічки та бари.
Тепер розглянемо наступний приклад:
//@version=4 study("My Script", overlay=true) plot(open, color=color.purple)
Додавши цей рядок до редактора, ви повинні побачити другий графік (який виглядає як оригінальний, але зрушений праворуч). Ми побудували графік ціни відкриття, і оскільки відкриття поточного дня є закриттям попереднього, логічно, що графіки мають однакову форму.
Чудово! Давайте видалимо створені нами графіки (згадайте, що для цього потрібно натиснути на графіку праву кнопку миші та вибрати "Видалити індикатори"). Щоб очистити поточний графік, наведіть курсор на графік Bitcoin/BUSD та натисніть кнопку «Приховати».
Багато трейдерів використовують свічкові графіки, оскільки останні надають більше інформації, ніж звичайні (наприклад, той, який ми щойно збудували). Тепер додамо на графік свічки.
//@version=4 study("My Script", overlay=true) plotcandle(відкритий, високий, низький, закритий)
Вже краще, але через відсутність кольорів графік невиразний. В ідеалі нам потрібно відмалювати свічки червоним, якщо на таймфреймі ціна відкриття більша за ціну закриття, і зеленим, якщо ціна закриття більша за ціну відкриття. Додамо рядок над функцією plotcandle():
//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle (відкритий, високий, низький, закритий)
У цьому рядку ми проходимо по всіх свічках і перевіряємо: ціна відкриття більша або дорівнює ціні закриття? Якщо так, то ціна за період впала і свічка буде червоною. Інакше – зеленою. Щоб додати колірну схему, змініть функцію plotcandle() , як показано нижче:
//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle(відкритий, високий, низький, закритий, колір=кольори)
Видаліть попередній графік, якщо ще не зробили цього, та додайте новий. Тепер у нас має вийти звичайний свічковий графік.
Прекрасно!
Побудова ковзних середніх (MA)
Ми вивчили деякі засади. Давайте перейдемо до створення нашого першого власного індикатора – експоненційної ковзної середньої, або EMA. Це цінний індикатор, оскільки він дозволяє відфільтрувати ринковий шум та згладити ціновий рух.
EMA відрізняється від простої ковзної середньої (SMA) тим, що надає більшої ваги останнім даним. EMA активніше реагує на несподівані рухи ринку та часто використовується у короткострокових стратегіях (наприклад, у внутрішньоденній торгівлі).
Проста ковзна середня (SMA)
Ми можемо побудувати SMA, а потім порівняти її з EMА. Додайте до скрипта наступний рядок:
plot(sma(close, 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))
Різниця між SMA та EMA
➟ Думаєте, з чого розпочати роботу з криптовалютами? Купуйте біткоїн на Binance!
Вбудовані скрипти
До цього часу ми писали код вручну, щоб докладніше в ньому розібратися. Але давайте вивчимо інструмент, який дозволить заощадити нам час, особливо якщо ми пишемо складніші сценарії і не хочемо робити це з нуля.
У верхньому правому куті редактора натисніть кнопку «Новий». З'явиться меню з різними технічними індикаторами. Щоб побачити вихідний код індикатора EMA, натисніть на пункт «Експоненційна середня ковзна».
Додати код на графік
Шаблонний код відрізнятиметься від написаного нами – зверніть увагу на функції input(). Вони зручні тим, що ви можете натиснути у лівому верхньому кутку графіка.
...і у спливаючому вікні легко змінити деякі значення, натиснувши колесо налаштувань.
Щоб продемонструвати це, ми додамо в наступний скрипт дві функції 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"), якщо (ціна >= вихід) strategy.close_all(comment="SellTheNews")
Тут ми визначили рівні входу та виходу як змінні – обидві є такими, що вводяться, тобто ми можемо потім змінити їх на графіку. Ми також створили змінну ціни, яка набуває значення закриття для кожного періоду. Логіка представлена як операторів if. Якщо частина в дужках істинна, буде запущений блок з відступом під нею. В іншому випадку його буде проігноровано.
Отже, якщо ціна менша або дорівнює бажаному значенню входу, перший вираз оцінюється як істинний і ми відкриваємо довгу позицію. Коли ціна стане рівною або перевищить бажане значення виходу, спрацює другий блок, який закриває всі відкриті позиції.
Крім того, на графіку ми показали стрілками місця входу в позиції та виходу з них. Ми позначили ці точки за допомогою параметра коментаря (у цьому прикладі BuyTheDip і SellTheNews). Скопіюйте код та додайте його на графік.
Індикатори на графіку. Можна зменшити масштаб
TradingView автоматично застосовує ваші правила до більш старих даних. Зверніть увагу: ви перейшли з Pine Editor на вкладку Strategy Tester. Тут ви можете проаналізувати потенційний прибуток, переглянути список угод та ефективність кожної угоди.
Відкриті та закриті позиції
Підведемо підсумки
Тепер ми можемо написати свій сценарій, використовуючи знайомі інструменти. Ми об'єднаємо на одному графіку EMA та RSI, а потім використовуємо їх значення для розфарбовування свічок, щоб отримати інформацію, яку можна легко візуалізувати.
Результати графіка не є фінансовою радою – об'єктивно правильного способу використання не існує. Як і інші індикатори, його слід використовувати разом з іншими інструментами розробки своєї стратегії.
Давайте напишемо наш новий скрипт. Щоб чистий простір для роботи, видаліть з графіка попередні індикатори та приховайте графік Bitcoin/BUSD.
Почнемо з визначення нашого дослідження. Назвіть його на власний розсуд, переконавшись лише у тому, що overlay=true.
study(title="Сценарій Binance Academy", overlay=true)
Згадаймо формулу EMA, яку ми описали вище. Нам потрібно визначити множник періоду EMA. Давайте зробимо його змінною (input), яка є цілим числом (тобто без десяткових знаків). Також встановимо мінімум (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 Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength)
Добре. Тепер перейдемо до RSI. Аналогічним способом поставимо його період:
study(title="Сценарій Binance Academy", overlay=true) emaLength = input(title="EMA Length", 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 Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, 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 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) кольори = close > emaVal і rsiVal > 50 ? колір.зелений : колір.червоний
Якщо ми переведемо код на звичайну мову, то вийде, що якщо значення EMA перевищує ціну закриття і показник RSI перевищує 50, ми фарбуємо свічку в зелений колір. В іншому випадку колір буде червоним.
Додати EMA:
study(title="Сценарій Binance Academy", 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) кольори = close > emaVal і rsiVal > 50 ? color.green : графік color.red(emaVal, "EMA")
Нарешті, намалюємо свічки, додавши параметр кольору:
study(title="Сценарій Binance Academy", 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) кольори = close > emaVal і rsiVal > 50 ? color.green : color.red plot(emaVal, "EMA") plotcandle(open, high, low, close, color=colors)
Ось наш скрипт! Щоб побачити його у дії, додайте його на графік.
Графік BTC/BUSD із індикатором EMA/RSI.
Резюме
У статті ми розглянули кілька простих прикладів використання Pine Editor від TradingView. На даний момент, якщо ви виконали наші приклади, то вже можете будувати прості підписи до цінових графіків та отримувати додаткову інформацію із власних індикаторів.
У цій статті ми торкнулися лише пари індикаторів, але ви можете самостійно розібрати складніші або вибравши вбудовані скрипти зі списку Новий, або написавши їх самостійно.
Шукаєте натхнення? Почерпнути ідеї для наступного проекту можна зі статей нижче:
Короткий посібник із використання параболічної системи SAR
Посібник з використання ліній Фібоначчі
Випереджаючі та запізнювальні індикатори
Що таке індикатор MACD