Серия «Инвестиционные боты (почти) с нуля»

1

Инвестиционные боты (почти) с нуля. Часть 2: свечи и индикаторы

Серия Инвестиционные боты (почти) с нуля

Всем привет.

В этой статье мы продолжим дорабатывать базовые инструменты для работы с инвестициями и начнем изучать индикаторы.

Сгенерировано с помощью <a href="https://pikabu.ru/story/investitsionnyie_botyi_pochti_s_nulya_chast_2_svechi_i_indikatoryi_13641970?u=https%3A%2F%2Fnanabanana.ai%2F&t=https%3A%2F%2Fnanabanana.ai%2F&h=88f480f1605c6c976f4bbe7305354b3fa452041e" title="https://nanabanana.ai/" target="_blank" rel="nofollow noopener">https://nanabanana.ai/</a>

Сгенерировано с помощью https://nanabanana.ai/

Коротко о том, чем мы тут занимаемся

Если вы пропустили предыдущие части, вот ссылки:

Инвестиционные боты (почти) с нуля. Часть 0: введение и постановка целей

Инвестиционные боты (почти) с нуля. Часть 1: теория и первые шаги реализации

Для лиги лени добавляю краткое описание.

Цель проста как мир: получать деньги ничего не делая. Это, конечно, упрощение, но именно этого я добиваюсь. Для этого я использую свои знания в программировании чтобы создать систему, которая будет торговать на бирже и приносить стабильный доход.

Параллельно в своем цикле статей я делюсь с вами, что я уже изучил и что получилось реализовать. Для обучения я активно использую https://grok.com/, он же помогает мне редактировать статью перед публикацией.

Ранее мы уже настроили API T-Банка и научились работать с портфелем и ордерами, вывели базовые данные о инструментах. Теперь добавим визуализацию — свечи и индикаторы.


График цены

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

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

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

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

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

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

Иллюстрация <a href="https://pikabu.ru/story/investitsionnyie_botyi_pochti_s_nulya_chast_2_svechi_i_indikatoryi_13641970?u=https%3A%2F%2Ftraderblog.net%2Fjaponskie-svechi%2F&t=https%3A%2F%2Ftraderblog.net%2Fjaponskie-svechi%2F&h=fd6ea259da79e57516d3db81ff68b51abdbc452f" title="https://traderblog.net/japonskie-svechi/" target="_blank" rel="nofollow noopener">https://traderblog.net/japonskie-svechi/</a>

Иллюстрация https://traderblog.net/japonskie-svechi/

Для отображения у себя я не стал изобретать велосипед и взял первую попавшуюся под руку готовую библиотеку для построения подобных графиков https://www.npmjs.com/package/lightweight-charts . Но пришлось ее немного допилить, так как изначально она не могла показывать детали по каждой свече. Куда ж без костылей? 😅

Получилось неплохо для начала.

Отображение свечей на деталях инструмента

Отображение свечей на деталях инструмента

Я добавил отображение основных параметров свечи при наведении на нее - дата, цена открытия и закрытия, минимум и максимум. Но не остановился на этом и добавил объёмы торгов общие и отдельно на покупку и продажу.

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

На этом завершаются наши подготовительные работы и, наконец, пора взяться за …

Индикаторы📈

Ожидали увидеть тут главу про сигналы? Я даже начал именно так писать, но до сигналов нужно рассмотреть сначала индикаторы и, так вышло, что сигналы вообще не вместились 😅.

Индикаторы - формула (или набор формул), которая преобразует цену, объём или другие рыночные данные в линию, гистограмму, точки или область на графике.

В этой статье я обещал рассказать про скользящие средние, с них и начнем.

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

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

Простой скользящей средней называют просто среднее арифметическое цен закрытия за последние N свечей. Берём, например, 20 последних дней(минут, часов и т.д.), складываем цены закрытия и делим на 20 — получаем значение SMA-20 на сегодня. Завтра добавляем новую цену, убираем самую старую — и линия «скользит» дальше. Отсюда и название — скользящая.

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

Какие преимущества и недостатки индикаторов обсудим в конце главы.

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

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

Получается, что EMA реагирует на изменения цены быстрее и резче, чем SMA с тем же периодом.

Расчет EMA сложнее SMA.

Первое значение берется как SMA за тот же период, дальнейшие считаются по формуле

EMA = (close*k)+(EMA_пред * (1-k))

где k = 2/(period + 1)

И вот тут мы дошли до состояния, что можно получить просто используя Т-Инвестиции. В прошлом, когда я пробовал вручную торговать на бирже (лет 5 назад), этого не было. Сейчас графики SMA и EMA можно посмотреть для любого инструмента в деталях. Поэтому, чтобы не грустить из-за этого, добавим еще несколько индикаторов.

Взвешенная скользящая средняя (Weighted Moving Average, WMA)

Изначально не хотел делать этот индикатор, но он нужен для расчета следующего индикатора, поэтому “а почему бы и нет?”, лишним не будет.

По сути, это альтернатива EMA, где вес последних цен выше, чем у старых, но расчет немного иной. WMA медленнее реагирует, чем EMA, но быстрее SMA.

WMA = (P₁·n + P₂·(n-1) + ... + Pₙ·1) / (1 + 2 + ... + n)

Где:

  • P₁ — самая последняя (текущая) цена закрытия

  • Pₙ — самая старая цена в окне (n дней назад)

  • n — период WMA (например, 10, 20, 50)

Знаменатель — это сумма весов. Также есть формула для расчета первых n натуральных чисел, которой мы воспользуемся для упрощения (1 + 2 + ... + n) = n(n+1)/2

Для оптимизации использовалось скользящее окно, с помощью которого удалось избавиться от внутреннего цикла.

Если говорить о плюсах и минусах, то можно сказать, что WMA - это что-то среднее между SMA и EMA, но, всё-таки, ближе к EMA.

(Экспоненциальная) Скользящая средняя Халла ((Exponential) Hull Moving Average, HMA/EHMA)

Этот индикатор один из самых быстрых и одновременно самых гладких скользящих средних.

Её придумал Алан Халл в 2005 году специально для того, чтобы максимально уменьшить запаздывание и при этом оставить линию достаточно гладкой (меньше ложных разворотов).

Изначальная логика строится на данных WMA и называется скользящей средней Халла (HMA), но есть экспоненциальная модификация (EHMA), когда в качестве основы используется EMA, сохранив всю остальную часть логики.

Формула очень сложная для расчета вручную, но компьютер пусть трудится.

HMA = WMA( 2 × WMA(n/2) − WMA(n) , √n )

Шаг 1.  WMA(n/2) - считаем WMA с половинным периодом

Шаг 2.  WMA(n) - считаем WMA с полным периодом

Шаг 3.  RawHMA  =  2 × WMA(n/2) − WMA(n)

Шаг 4.  HMA - считаем WMA с периодом √n, где на входе вместо свечей даем RawHMA.

Соответственно, для EHMA меняем WMA на EMA.

При этом для округления периода n/2 берется округление вниз, а для √n - обычное математическое.

Писать повторно WMA внутри HMA, конечно же, мы не будем и вызовем готовую функцию, созданную чуть ранее. Также, подстроим формат rawHma к формату свечей, чтобы можно было вызвать функцию WMA.

Сравнение скользящих средних🔍

Все рассмотренные скользящие средние смотрят за направлением тренда и реагируют на изменение этого тренда. Но результат отличается по скорости реакции и наличию шумов.

Теперь сравнительная таблица. Оценки по 5-балльной шкале: для сглаживания — 5 означает высокое сглаживание (меньше шума), для запаздывания — 5 означает низкий лаг (быстрая реакция).

Сравнительная таблица

Сравнительная таблица

Промежуточный результат✅

Графики в деталях инструмента

Графики в деталях инструмента

На детали инструмента был добавлен важнейший график - японские свечи, с возможностью выбора временного интервала, и возможность отобразить графики SMA, EMA, WMA, HMA, EHMA с периодами 9, 20, 50, 200.

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

Краткосрочные планы

Январь выдался на удивление продуктивным, надеюсь сохранить результативность и за месяц написать и выпустить следующую статью.

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

Показать полностью 5
2

Инвестиционные боты (почти) с нуля. Часть 1: теория и первые шаги реализации

Серия Инвестиционные боты (почти) с нуля

Всем привет.

В этой части мы изучим базовую теорию и перейдем к практическому применению.

Иллюстрация процесса (сгенерировано <!--noindex--><a href="https://pikabu.ru/story/investitsionnyie_botyi_pochti_s_nulya_chast_1_teoriya_i_pervyie_shagi_realizatsii_13600850?u=https%3A%2F%2Fgrok.com%2F&t=https%3A%2F%2Fgrok.com%2F&h=bdebfd4f244ba934ae65743f9a2c65cf3c49a746" title="https://grok.com/" target="_blank" rel="nofollow noopener">https://grok.com/</a><!--/noindex-->)

Иллюстрация процесса (сгенерировано https://grok.com/)

Коротко о том, чем мы тут занимаемся

Тут все описнано более подробно:

Инвестиционные боты (почти) с нуля. Часть 0: введение и постановка целей

Для лиги лени добавляю краткое описание.

Цель проста как мир: получать деньги ничего не делая. Это все упрощение, но именно этого я добиваюсь. Для этого я использую свои знания в программировании чтобы создать систему, которая будет торговать на бирже и приносить стабильный доход.

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


Начнем с теории 📖

Чтобы успешно торговать, нужно сначала разобраться в базовых понятиях.

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

Брокер — это посредник, который даёт тебе доступ на биржу. Без брокера обычный человек не может просто так купить акцию Сбера. Брокер открывает тебе счёт, берёт комиссию и исполняет твои заявки. Я выбрал Т-Банк (не реклама, почему можете узнать в части 0).

Инвестиции vs спекуляции — Инвестиции — это долгосрочное вложение (годы), чтобы получать доход от роста активов или дивидендов/купонов. Спекуляции — короткие сделки на разнице цен.

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

Риски и доходность — Выше потенциальный доход — выше риск. Например, депозит сейчас даёт 14–16% годовых почти без риска, а акции могут дать 20-30% или привести к потере 50%. Личный опыт показывает, что можно заработать 10% в месяц, а можно потерять 50% в день и получить заблокированные активы. Так что нужно быть аккуратным.

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

Портфель — Список твоих позиций: сколько акций/облигаций/валюты, текущая стоимость, прибыль/убыток.

Стакан заявок — Таблица лучших цен покупки (bid) и продажи (ask). Показывает баланс спроса/предложения.

Обычно зелёный — bids (покупатели), красный — asks (продавцы). Спред — разница между лучшими ценами.

Биржевой стакан. Иллюстрация <!--noindex--><a href="https://pikabu.ru/story/investitsionnyie_botyi_pochti_s_nulya_chast_1_teoriya_i_pervyie_shagi_realizatsii_13600850?u=https%3A%2F%2Fequity.today%2Fchto-takoe-birzhevoj-stakan.html&t=https%3A%2F%2Fequity.today%2Fchto-takoe-birzhevoj-stakan.html&h=4dc195016f58723bab53bb3557a960f9cbb4ca0a" title="https://equity.today/chto-takoe-birzhevoj-stakan.html" target="_blank" rel="nofollow noopener">https://equity.today/chto-takoe-birzhevoj-stakan.html</a><!--/noindex-->

Биржевой стакан. Иллюстрация https://equity.today/chto-takoe-birzhevoj-stakan.html

Чем можно торговать на Мосбирже, рассмотрим только базовые инструменты:

Акции → Доля в компании. Доход от роста цены и дивидендов.

Облигации → Долговые бумаги какой-то компании или государства.

Биржевые фонды → Доля в объединении денег многих инвесторов для покупки портфеля активов, управляемый некой организацией.

Валюта → Покупка иностранной валюты.


Переходим от теории к практике💻

Теперь, вооружившись теорией, перейдем к реализации на моем стеке.

Напомню что разработка ведется на платформе MarsX 3 версии (обоснование выбора можно узнать в части 0). Большая часть кода будет написана на Node.JS для интеграции используется API от ТБанка

Получение ключа доступа к API

Для того чтобы торговать в ТБанке, естественно, нужно быть их клиентом и иметь хотя бы один инвестиционный счет. Описаний того как это сделать много, а мне не платят за новых клиентов, поэтому как-нибудь сами справитесь :)

Перейдем к получению ключа. Для этого открываем страницу настроек инвестиций https://www.tbank.ru/invest/settings/ и в самом низу находим кнопку для создания нового токена.

Блок токенов

Блок токенов

На данном этапе нас интересует токен для песочницы, так как своими деньгами мы рисковать пока что не готовы.

Создание токена

Поздравляю! Ключ создан, теперь его нужно сохранить в укромное место и потом использовать для доступа к API.

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

Использование API

Документацию можно найти тут https://developer.tbank.ru/invest/api

В целом, ничего сложного в API нет, обычные REST запросы к внешнему сервису с токеном в заголовках запроса для авторизации.

Из интересного только способ отображение чисел, таких как цены, суммы и т.п. Для отображения числа ТБанк использует объекты с полями units и nano. units - целая часть числа, nano - дробная часть.

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

Так же стоит уточнить, для работы с большинством запросов нужно слать accountId - уникальные идентификатор счета, с которым проводятся манипуляции. Получить список этих счетов и создать новые можно с помощью API.

Работа с API

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

Конвертация units и nano во float

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

Для этого я сделал небольшой хелпер-конвертер значений во float тип данных.

Что реализовано на данный момент

  1. Сервис по работе с API песочницы и с реальными деньгами, в зависимости от выбранного аккаунта

  2. возможность переключать аккаунты и создавать новые в песочнице

  3. возможность добавлять деньги в аккаунт песочницы. Эх, была бы возможность так сделать на реальный счет - простым запросом пополнять баланс, без источника денег :) . На реальный счет только переводом с личного счета, смысла добавлять такую логику в систему пока что не вижу.

  4. выбранный аккаунт и его тип сохраняются в браузере и передаются на сервер с каждым запросом

  5. просмотр портфеля по выбранному аккаунту

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

  7. просмотр стакана для выбранного инструмента

  8. возможность выставления заявки на покупку/продажу с выбором типа заявки (лимитная, рыночная, лучшая цена)

  9. просмотр совершенных операций

Скриншоты результата

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

Логотип не существует еще, так как и названия у проекта еще нет.

Дашбоард, выбор аккаунта, список интсрументов по выбранному типу, детали инструмента и стакан заявок, история операций.

Краткосрочные планы

Как показала практика, изначальный план по 1-2 статьи в месяц провалился. Теперь цель хотя бы 1 статья в месяц.

В следующей статье начнем рассматривать сигналы которые можно использовать для определения точек покупки и продажи. На первых шагах рассмотрим: скользящие средние, возврат к среднему, RSI.

Если у вас есть идеи что стоит рассмотреть подробнее — пишите комментарии.

Показать полностью 10
0

Инвестиционные боты (почти) с нуля. Часть 0: введение и постановка целей

Серия Инвестиционные боты (почти) с нуля

Всем привет.

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

Важно: это мой личный эксперимент, инвестиции всегда связаны с риском потери капитала, и я не даю финансовых советов.

Иллюстрация результата (сгенерировано <!--noindex--><a href="https://pikabu.ru/story/investitsionnyie_botyi_pochti_s_nulya_chast_0_vvedenie_i_postanovka_tseley_13332493?u=https%3A%2F%2Fgrok.com%2F&t=https%3A%2F%2Fgrok.com%2F&h=bdebfd4f244ba934ae65743f9a2c65cf3c49a746" title="https://grok.com/" target="_blank" rel="nofollow noopener">https://grok.com/</a><!--/noindex-->)

Иллюстрация результата (сгенерировано https://grok.com/)

Немного о себе

13+ лет опыта в программировании, без опыта в финтехе. В данный момент занимаю должность техлида в одной компании, которая занимается разработкой софта для кинотеатров. Изначально писал на C# + MS SQL, в последние 6 лет пишу на JS + MongoDB. Специализируюсь на бэкенде, но готов работать с фронтендом.

Для чего этот цикл статей

На самом деле целей несколько:

  • Пожалуй, основная цель — сохранить мотивацию. Необходимость в публикации статей поможет мне поддерживать дисциплину в разработке.

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

  • Согласно Ричарду Фейнману: “хочешь понять сам — объясни другому”. У меня нет глубоких знаний в экономике и в том, как успешно торговать на бирже, я также буду постепенно изучать сам и рассказывать вам то, что я делаю. Это же является ответом на вопрос “почему не взять готовую систему?”.

Постановка цели

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

Стек

  • В качестве основы буду использовать платформу MarsX (https://marsx.dev). В данный момент актуальна версия 4, но я в рабочей деятельности использую  версию 3, поэтому буду разрабатывать на ней: изучение нового стека не ставится как цель, а версию 3 я уже глубоко знаю и даже принимал участие в ее разработке.

  • MarsX использует Node.js сервер, MongoDB базу данных, React и Vue.js для фронта, а также множество дополнительных интеграций, к примеру, с Azure Storage и Amazon DynamoDB, которые, возможно, будут полезны в реализации.

  • На старте для работы с биржой буду использовать REST API Т-Банка. Причина проста — у меня уже есть инвестиционный счет в Т-Банке. Есть большая вероятность сменить брокера в будущем, так как комиссии у Т-Банка не самые низкие.

  • Для помощи и консультаций буду использовать ИИ https://grok.com/ и https://chat.deepseek.com/.

Железо

На старте планирую всю разработку вести локально на личном ноутбуке HP ProBook 450 G8. Процессор i7-1165G7 имеет достаточно мощности для локальной работы, чтобы работа сервера в фоне была незаметна.

В будущем перенесу на личный домашний сервер (которого еще не существует), или в облако. Но это не скоро.

Цель по публикациям

Планирую писать 1-2 статьи в месяц. Может варьироваться в зависимости от личной загруженности и темпа подготовки материала для публикации.

Длительность цикла: не менее полугода, точно не определена.

Краткосрочные планы

В ближайшей статье будут описаны первые шаги, настройка основного интерфейса, подключение API Т-Банка и вывод данных о портфеле.

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

Если у вас есть идеи стратегий — пишите комментарии.

Интересены вам такие посты?
Всего голосов:
Показать полностью 1 1
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества