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

Почему? Всё просто. Даже если вы открываете свои сделки вручную, то в большинстве случаев конкурируете уже не с людьми, а с кодом. На автоматические и алгоритмические торговые системы приходится:

  • Более 60% объёма торгов на американском фондовом рынке (данные J.P. Morgan).

  • От 49,1% до 80% сделок – на российском фондовом рынке, в зависимости от сегмента.

  • Более 80% объема на спотовом и фьючерсном рынке криптоактивов (по оценкам Binance Research).

Алгоритмическая торговля – это не про волшебные кнопки, которые делают деньги. Это про системность, дисциплину и снижение влияния эмоций. Именно поэтому всё больше участников рынка – от частных трейдеров до крупных институциональных игроков – переходят к алгоритмам.

Вы еще не перешли? А алгоритмы уже идут к вам. И лучше вы их, чем они вас…

Грамотный алгоритм – всегда залог успеха
Грамотный алгоритм – всегда залог успеха

Это ­моя первая статья из серии, посвященной алгоритмической торговле с использованием TradingView и языка Pine Script. Здесь я буду делиться практическими материалами по созданию торговых индикаторов и стратегий своими руками.

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

Мне есть, чему и кого-то научить. Во-первых, я преподаю финансовую математику и моделирование нестандартных процессов на рынке криптоактивов в Финансовом Институте. Т.е. учить умею. Во-вторых, разрабатываю, тестирую и актуализирую алгоритмические торговые системы для международного инвестиционного криптофонда Wild Boar – действующего, причем весьма эффективно. В общем, мне есть, чем с вами поделиться.

Давайте начинать.

Почему именно TradingView и Pine Script?

На мой взгляд, это идеальная связка для тех, кто хочет быстро войти в сферу и не тратить время на настройку инфраструктуры. В отличие от более профессиональных решений вроде TSLab, MetaTrader или QuantConnect, здесь всё работает из коробки.

Основные преимущества TradingView:

  • бесплатный доступ к рыночным данным с разных бирж и инструментов;

  • удобный визуальный интерфейс;

  • кроссплатформенность – можно писать код даже с телефона;

  • встроенное хранилище истории котировок, без необходимости вручную загружать CSV или подключать внешние API;

  • публикация и тестирование индикаторов в пару кликов;

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

Для сравнения: в TSLab вам придётся подключать API каждой биржи отдельно. Причём для фондового рынка это почти всегда платные каналы. Историю тоже нужно будет загружать вручную или получать через внешние источники. Это не плохо, просто не подходит для старта.

Pine Script: коротко о главном

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

Pine Script не перегружен синтаксисом: его логика близка к Python или JavaScript, но с ориентацией на анализ временных рядов. Вся работа происходит внутри графика. Вы пишете код, нажимаете «Добавить на график», и скрипт моментально на нем появляется. Не нужно думать о рендеринге, потоках данных или синхронизации с сервером – всё это берёт на себя платформа.

TradingView предоставляет полный доступ к документации по Pine Script, где можно найти описание всех функций, переменных и операторов. Официальную справку можно найти тут.

Если вы до этого никогда не программировали, Pine Script — отличный способ начать. А если вы уже знакомы с кодом, то освоение займёт буквально пару дней. Главное — практика. Именно ей мы дальше и займёмся.

Пишем RSI своими руками

Чтобы познакомиться с основами Pine Script и логикой построения индикаторов, начнём с реализации одного из самых популярных и часто используемых инструментов технического анализа – RSI (Relative Strength Index) или индекса относительной силы.

Этот индикатор был разработан Уэллсом Уайлдером в 1978 году и с тех пор стал практически стандартом для оценки силы и направленности текущего ценового движения. RSI измеряет скорость и амплитуду изменения цены и помогает определить, находится ли актив в состоянии перекупленности или перепроданности.

Классическая формула RSI выглядит так:

Классическая формула RSI
Классическая формула RSI

В большинстве случаев для расчёта берётся период в 14 свечей. Алгоритм работает следующим образом:

  1. Рассчитывается изменение цены между текущей и предыдущей свечой.

  2. Эти изменения делятся на положительные (приросты) и отрицательные (убытки).

  3. Считается скользящее среднее приростов и убытков за выбранный период.

  4. Полученное значение подставляется в формулу.

Значение RSI колеблется от 0 до 100. Уровень выше 70 традиционно интерпретируется как сигнал перекупленности, а ниже 30 – как сигнал перепроданности. Однако стоит понимать, что это не торговый сигнал сам по себе, а лишь индикатор потенциального разворота или замедления тренда.

Теперь от слов – к делу.


Чтобы реализовать индикатор RSI на TradingView действуем в описанном ниже порядке.

Шаг 1. Регистрируемся на сайте TradingView.

Шаг 2. Выбираем инструмент или торговую пару и открываем супер-график – так называется панель в TradingView. В качестве примера я выберу BTC/USDT на бирже Binance.

Для этого нажимаю на поисковую строку:

Шаг 2
Шаг 2

Затем печатаю тикер инструмента – в моем случае это BTCUSDT. Далее навожу на нужную биржу и нажимаю кнопку «Открыть график».

Шаг 3. В открывшемся графике перехожу во вкладку «Редактор Pine». Она находится в нижней части экрана, слева, рядом со скринером.

Чтобы открыть область написания кода на Pine Script – нажимаем на кнопку «Редактор Pine». Если вы еще ничего не писали, то, скорее всего, откроется вот такой индикатор по умолчанию:

Шаг 4. А теперь снова немного теории – без нее дальше никак. Первые строки в редакторе, которые вы видите на скрине выше, необязательны. Их можно смело удалить.

Но строка 4, на которой написано: //@version=6 обязательна! Именно она определяет, какая версия Pine Script будет использоваться. У версий есть небольшие отличия в синтаксисе и в функциях, так что еще раз: строку с версией необходимо сохранять.

Далее, уже под ней, вы видите сам код индикатора. Первое, что всегда пишется в редакторе – это то, что мы будем делать. Есть 3 варианта:

  • Индикатор (рассчитываются и рисуются линии на графике).

  • Стратегия (дополнительно идет тест результатов стратегии).

  • Библиотека (можно создавать собственные библиотеки, добавлять в них функции, а потом быстро пользоваться ими, чтобы не загружать код).

В этой статье мы рассмотрим первый вариант – то есть индикатор. Об остальных поговорим когда-нибудь в следующий раз. На скрине выше (см. строку 5) как раз индикатор и указан, поэтому оставляем функцию как есть.

Следующее, что идет после функции indicator – это отрисовка, которая запускается с помощью функции plot. Если в коде не будет функции, которая что-то обрисовывает или взывает оповещения, то скрипт не запустится. Это важно учитывать при написании индикаторов и стратегий.

Шаг 5. Давайте напишем сам индикатор RSI. Для этого вставляем в область такой код:

indicator(title = "Relative Strength Index", shorttitle = "RSI", overlay = false)
 
rsi_period = input.int(defval = 14, title = "RSI period", minval = 1, step = 1)
overbought_line = input.int(defval = 70, title = "Overbought line", minval = 0, maxval = 100, step = 1)
oversold_line = input.int(defval = 30, title = "Oversold line", minval = 0, maxval = 100, step = 1)
 
rsi(x, y) =>
    up = math.max(x - x[1], 0)
    down = math.max(x[1] - x, 0)
    rs = ta.sma(up, y) / ta.sma(down, y)
    result = 100 - 100 / (1 + rs)
    result
 
plot(series = rsi(close, rsi_period), title = "RSI line", color = #147461, linewidth = 2)
hline(price = overbought_line, title = "Overbought line", color = #1474618e, linestyle = hline.style_dotted)
hline(price = oversold_line, title = "Oversold line", color = #1474618e, linestyle = hline.style_dotted)


Выглядеть он должен следующим образом (не забываем про версию Pine Script):

Небольшое пояснение к коду. Первым делом мы объявляем, что будем делать – в нашем случае индикатор. Далее в эту функции входят различные параметры, у каждого из которых есть свое название. Например:

  • title – название индикатора,

  • shorttitle – короткое название, которое будет отображаться на графике,

  • overlay – где будет расположен график (true, тогда все отрисовки будут располагаться на основном графике ИЛИ false, тогда будет создана новая панель снизу основного графика).

Это основные параметры для индикатора. Чтобы посмотреть остальные – можно навести на функцию и с зажатым Ctrl нажать левую кнопкой мыши.

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

  • int означает, что будут целочисленные значения,

  • float – дробные, то есть можно писать 5.5 или 2.2 и т.д.

    По умолчанию стоит 14, 70 и 30, в зависимости от переменной. Далее идет название – чтобы пользователю было понятнее, что он меняет. Затем минимальное и максимальное значение, а также шаг. Есть и другие параметры, но мы пока остановимся на этих.

Следующий блок – функция расчета RSI. Чтобы ее написать, необходимо дать имя и два параметра на вход: x и y.

  • Когда мы будем вызывать функцию, то вместо x будем подставлять цены, чаще всего цены закрытия (close).

  • Место y – период, у нас он записан в инпутах.

Далее идет обязательный оператор =>. И на следующей строчке, через Tab, идет вычисление RSI.

Первые две строчки (13 и 14) выбирают максимальное значение из разницы цены текущей и предыдущей (если стоит [1] – значит, это прошлое значение), 0 для роста, разница между предыдущим и текущим днем, и 0 для падения – так, чтобы у нас были значения по модулю.

После чего рассчитывается RS, которую мы видели в формуле. Где среднее значение положительных изменений цены за период в 14 баров (в инпутах стоит период 14) делится на среднее значение положительных изменений цены за период в 14 баров.

Затем рассчитывается значение RSI – также по формуле, которую мы смотрели ранее. И в конце еще раз прописываем, что должна выдавать функция, когда к ней обращаются/вызывают.

Скрытый текст

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

Далее блок с отрисовками. В функции plot вставляем нашу функцию rsi (close, rsi_period).

Затем прописываем цвет. Его можно указывать в разных форматах, в том числе:

  • HEX

  • RGB (и RGBA)

  • готовыми цветами, например, color.red.

После цвета определяем толщину линии. Тут можно указывать любое неотрицательное значение.

Ниже функции plot идет hline. По сути – это тоже самое, что и plot, только значение всегда одно и будет нарисована горизонтальная линия (hline → horizontal line).

В данной отрисовке вставляется значение цены, устанавливается цвет и стиль линии. Для plot тоже есть стили, но в hline они более красивые. Плюс есть варианты:

  • сплошная линия (по умолчанию),

  • в точку,

  • в штрих.

Дополнительные параметры можно также посмотреть, нажав левой кнопкой мыши с зажатым Ctrl.

Шаг 6. После того, как мы написали код, его нужно добавить на график. Для этого нажимаем кнопку «Добавить на график» (или «обновить на графике», если вы уже добавляли код и просто что-то в нем поменяли).

После этого на графике появляется дополнительная панель с индикатором.

Панель с индикатором - под графиком
Панель с индикатором - под графиком

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

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

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

Мы можем задать период для расчета RSI (по коду не менее 1). Или изменить значение для линии перекупленности и перепроданности – это верхняя и нижняя граница соответственно.

Чтобы применить значения, нужно нажать на кнопку «Ок». Если хотим сохранить эти параметры, нажимаем на кнопку «Сделать по умолчанию» (внизу слева).

Я не советую нажимать на эту кнопку слишком часто. А вот делать это обдуманно – рекомендую. Потому что «по умолчанию» – текущее значение, сбросить настройки не получится. А сбросить их очень даже может быть надо, например, если вы выбрали разные значения, но не помните, какими они были по умолчанию. Ну, вы поняли.

Шаг 7. Чтобы сохранить индикатор, необходимо нажать соответствующую кнопку. Она находится внутри с названием индикатора – если нажать на эту область, всё сохранится.

Указываем название индикатора. Можете придумать что-то эдакое. А по умолчанию оно будет такое же, как и полное название индикатора в коде:

Нажимаем кнопку «Сохранить» – и готово.

Ваш индикатор появится в разделе «Индикаторы» в подтеме «Мои скрипты». Можете даже добавить его в избранное, нажав на звездочку/область слева.

Скрытый текст

P.s. в Pine Script есть встроенная функция ta.rsi, которая сразу рассчитывает значение RSI. Но это не значит, что я преследовал цель усложнить вам жизнь. Код и перечисленные выше «сложности» нужны для того, чтобы вы узнали, как можно писать собственные функции.

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

Подписывайтесь и добавляйте статью в избранное, чтобы не потеряться.

До новых встреч!

Комментарии (15)


  1. Yuryruz13
    14.06.2025 03:39

    А где тут собственно алгоритм? И зачем вы описали код RSI, если проще взять готовый индикатор или код из него? Алгоритм - это набор автоматизированных вычислений, которые могут быть преобразованы в действия без участия пользователя или давать пользователю конкретное решение (типа buy/sell). Пока же такого нет, возможно, вы хотели написать про это в сл.статьях?


    1. WildBoar_Fond Автор
      14.06.2025 03:39

      зачем вы описали код RSI

      В качестве примера

      возможно, вы хотели написать про это в сл.статьях

      Именно так


  1. empenoso
    14.06.2025 03:39

    Тоже что-то подобное писал, только ещё с примерами: https://habr.com/ru/articles/900162/


  1. kuza2000
    14.06.2025 03:39

    Для серьезной разработки нужен отладчик. Он есть?


  1. ShaggyCat2
    14.06.2025 03:39

    Хорошо бы в функции RSI добавить проверку на ноль второй SMA


  1. Daddy_Cool
    14.06.2025 03:39

    Хм. Интересно, а какой % прибыли и в течение какого времени получается на бирже?


    1. ddv88
      14.06.2025 03:39

      -100%. Все боты-скальперы которые знаю, торгуют примерно в 0, либо по $0.15-5 долларов с каждой сделки в зависимости от депо. Фигня это все, имхо. С такой бешеной волатильностью невозможно на основе сырых данных за счет вычислений индикаторов просчитать движение рынка. Здесь нужно как минимум обучать ИИ модель и настраивать торговлю не по осциляторам, а по карте ликвидаций.


      1. Daddy_Cool
        14.06.2025 03:39

        я так понимаю, проблема, что трейдеры зарабатывают медленно - пусть 100 сделок по доллару, а теряют деньги быстро. А что такое карта ликвидаций?


        1. ddv88
          14.06.2025 03:39

          Время - главный ресурс. Пока бот сифонит по доллару без понимания движения и ждет цену для закрытия ордера, трейдер находящийся постоянно в рынке и понимая куда пойдет курс на основе множества неочевидных факторов, зайдет в сделку на гораздо большую сумму, а значит получит больший профит за меньшее время. И дело тут не в портфеле, а в риск-менеджменте. Бот может и с $1М не выходить в профит неделями, трейдер с $100к может срезать по $2-3К ежедневно. Изучите концепцию Smart Money и все поймете. Киты и маркетмейкеры не торгуют по индикаторам.


          1. Daddy_Cool
            14.06.2025 03:39

            Наверняка существую агентства которые оценивают те или иные события и выдают оценку - положительную или отрицательную, которую бот может съесть.
            Ну там - Боинг грохнулся - ясное дело, что акции пойдут вниз, но Боинг контора крупная - значит вскоре пойдут опять вверх.
            Но это очевидные "фунаментальные" факторы. А "множество неочевидных факторов" - это например каких?


          1. WildBoar_Fond Автор
            14.06.2025 03:39

            трейдер находящийся постоянно в рынке и понимая куда пойдет курс на основе множества неочевидных факторов

            Хотелось бы глянуть на такого трейдера и спросить, почему он до сих пор не заработал все деньги мира)

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


      1. WildBoar_Fond Автор
        14.06.2025 03:39

        Не совсем ясно, откуда взялись боты-скальперы) Статья не об этом. Но за счет вычислений одних только индикаторов прибыль точно вряд ли получится – тут не поспоришь. Только комплекс инструментов + человеческий мозг. Об этом напишу в след. разы и покажу, какой профит получается на практике


  1. S1908
    14.06.2025 03:39

    А есть это все на c#? И со скольки можно начинать разработчику? Хочу сделать свою платформу стартап для трейдинга и подключить ии.


  1. Yozh-lyudoyed
    14.06.2025 03:39

    Алготорговля без ИИ - деньги на ветер. Кому нужно в тысячный раз реализовывать самодельный RSI? возьмите готовую библиотеку и не тратьте время.


  1. killer_msk
    14.06.2025 03:39

    ЛАЙК И ПОДПИСКА