<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Тимур Гильмуллин про автоматизацию и процессы</title><subtitle>Канал про автоматизацию разработки и тестирования, построение процессов, карьерный рост в ИТ, DevOps и SecDevOps, алго-трейдинг и торги на бирже.</subtitle><author><name>Тимур Гильмуллин про автоматизацию и процессы</name></author><id>https://teletype.in/atom/tgilmullin</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/tgilmullin?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/tgilmullin?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-09T07:17:21.746Z</updated><entry><id>tgilmullin:fma-signals-how-it-works</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/fma-signals-how-it-works?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>⚡️ Как работают сигнальные сервисы в Telegram</title><published>2025-06-08T19:38:15.240Z</published><updated>2025-07-27T15:30:41.027Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/7f/ca/7fca39d4-2f2b-4448-bd74-c8ffa6a1412b.png"></media:thumbnail><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>финансы</tt:hashtag><tt:hashtag>роботы</tt:hashtag><tt:hashtag>сигналы</tt:hashtag><tt:hashtag>биржа</tt:hashtag><tt:hashtag>алгоритмы</tt:hashtag><tt:hashtag>python</tt:hashtag><tt:hashtag>вероятности</tt:hashtag><tt:hashtag>инвестирование</tt:hashtag><tt:hashtag>аналитика</tt:hashtag><tt:hashtag>fuzzylogic</tt:hashtag><tt:hashtag>теханализ</tt:hashtag><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/03/88/0388ccfb-54ee-4256-9b08-1929822269fd.png&quot;&gt;Сигнальные сервисы, в основе которых лежат авторские методики Fuzzy Market Analytics (FMA, «Нечёткая рыночная аналитика») публикуют сигналы по вероятным движениям цен на акции в автоматическом режиме — без задержек и ручной модерации. Все решения принимает алгоритм, работающий на базе нашей open-source платформы ⚙️ TKSBrokerAPI.</summary><content type="html">
  &lt;figure id=&quot;ImgI&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/03/88/0388ccfb-54ee-4256-9b08-1929822269fd.png&quot; width=&quot;1024&quot; /&gt;
    &lt;figcaption&gt;Наши виртуальные помощницы Ева и Мария запустили первый сервис краткосрочных сигналов по рынку российских акций: 🟢 &lt;a href=&quot;https://t.me/FuzzyMarketAnalytics&quot; target=&quot;_blank&quot;&gt;попробовать бесплатно →&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;tGsG&quot;&gt;Сигнальные сервисы, в основе которых лежат авторские методики &lt;a href=&quot;https://fuzzy-technologies.github.io/FMA/&quot; target=&quot;_blank&quot;&gt;Fuzzy Market Analytics&lt;/a&gt; (FMA, «Нечёткая рыночная аналитика») публикуют сигналы по вероятным движениям цен на акции в автоматическом режиме — без задержек и ручной модерации. Все решения принимает алгоритм, работающий на базе нашей open-source платформы ⚙️ &lt;a href=&quot;https://fuzzy-technologies.github.io/TKSBrokerAPI/&quot; target=&quot;_blank&quot;&gt;TKSBrokerAPI&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;AquL&quot;&gt;🤖 Бот отслеживает рынок и сообщает о моментах входа в позиции, указывает цели, вероятности и силу сигнала. Методики FMA основаны на вероятностных моделях, теханализе, нечёткой логике и выявляют ценовые аномалии с помощью модифицированного фильтра Хампеля. Отбор сильных сигналов выполняется по фазе, тренду и встроенной модели риска, используя прозрачную методику.&lt;/p&gt;
  &lt;p id=&quot;mWrq&quot;&gt;📚 Об этом мы подробно писали ранее:&lt;/p&gt;
  &lt;ul id=&quot;SlCE&quot;&gt;
    &lt;li id=&quot;Oj3T&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/trading-algorithm&quot; target=&quot;_blank&quot;&gt;«Инженерный взгляд на трейдинг: как работает сигнальный алгоритм торгового робота»&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;dQUu&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/trading-algorithm-history&quot; target=&quot;_blank&quot;&gt;«Через тернии к звёздам: история создания торгового алгоритма»&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;vqSv&quot;&gt;📡 Как рождается сигнал — от логов до публикации в Telegram&lt;/h2&gt;
  &lt;h3 id=&quot;rz1O&quot;&gt;⚙️ 1. Анализ рынка&lt;/h3&gt;
  &lt;p id=&quot;nVgF&quot;&gt;Алгоритм обрабатывает полторы сотни бумаг: определяет тренд, фазу, оценивает силу сигнала и вероятность достижения цели на горизонте. Ниже — пример из логов сервера, где фиксируется решение о публикации сигнала.&lt;/p&gt;
  &lt;figure id=&quot;Khgs&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/23/27/2327ebee-3e51-443a-9c32-c901247ebf9b.png&quot; width=&quot;1881&quot; /&gt;
    &lt;figcaption&gt;Скриншот из логов (читается снизу вверх), где бот сообщает о нахождении сигнала средней силы по QIWI согласно методике FMA&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XYGK&quot;&gt;Запись в логах имеет вид:&lt;/p&gt;
  &lt;pre id=&quot;5GeZ&quot;&gt;⚡ FMA BUY-сигнал: Buy, price: [3373.0] Target: [3415.0 / +1.2%] Strength: [High / 71.5%] Prob.: [Med / 41.5%] Horizon: [72h]&lt;/pre&gt;
  &lt;p id=&quot;wgDU&quot;&gt;Этот сигнал означает, что алгоритм FMA выявил сильный вход (High) в позицию и среднюю вероятность (Med, 41.5%) достижения цели 3415₽ (+1.2% от текущей 3373₽) на горизонте 72 часа по акции QIWI.&lt;/p&gt;
  &lt;h3 id=&quot;IsaQ&quot;&gt;📈 2. Телеметрия&lt;/h3&gt;
  &lt;p id=&quot;nLtQ&quot;&gt;Сервис сохраняет параметры принятого сигнала в хранилище: тикер, цель, вероятность, силу, конфигурацию и более полусотни гиперпараметров. Это позволяет верифицировать работу алгоритма и анализировать исторические сигналы.&lt;/p&gt;
  &lt;figure id=&quot;7lp3&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6c/ce/6cceee5e-cb02-47d4-b205-d9a32b2534b8.png&quot; width=&quot;2080&quot; /&gt;
    &lt;figcaption&gt;Скриншот из базы телеметрии — та же самая запись с сервера, о найденном сигнале по акции QIWI&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;UjJ8&quot;&gt;🟩 3. Публикация в Telegram&lt;/h3&gt;
  &lt;p id=&quot;lObb&quot;&gt;После фиксации сигнал автоматически публикуется в канал. Пользователь получает пуш-уведомление и может оценить параметры входа, прочитав короткий пост в канале и посмотрев на график.&lt;/p&gt;
  &lt;figure id=&quot;22rz&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ad/15/ad15000d-625e-4a72-ac3e-42ab9acbcedd.png&quot; width=&quot;1220&quot; /&gt;
    &lt;figcaption&gt;Пуш-уведомление на телефоне о новом сигнале&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;ylwq&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/77/f5/77f5159d-6f75-418b-9486-b3a90e44ca14.png&quot; width=&quot;446&quot; /&gt;
    &lt;figcaption&gt;Пример сигнала в Telegram-канале: тикер, цена входа, целевая цена, сила и вероятность&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;q5wc&quot;&gt;❓ Как читать сигналы&lt;/p&gt;
  &lt;p id=&quot;IbTP&quot;&gt;Каждый сигнал — это статистическая оценка вероятности достижения цели. Указывается: тикер, компания, цена покупки, целевая цена, нечёткая сила сигнала и вероятность достижимости цены.&lt;/p&gt;
  &lt;pre id=&quot;wsLo&quot;&gt;🕛⚡ Сигнал в 15:47&lt;/pre&gt;
  &lt;pre id=&quot;T8Ua&quot;&gt;🟩 #FTECH — Нечёткие технологии
• Покупка: 📈 115.9
• Цель: 🎯 123.0 / +3.1%
• Сила: 🟡🟡 выс.
• Вер-ть: 🔵 ср. / 40.4%&lt;/pre&gt;
  &lt;figure id=&quot;GgIT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5c/e5/5ce59f46-cbf3-4977-bbd6-9cfd5b38c50c.png&quot; width=&quot;1220&quot; /&gt;
    &lt;figcaption&gt;Подпишитесь на наш первый сервис краткосрочных сигналов по рынку российских акций:&lt;br /&gt;🟢 &lt;a href=&quot;https://t.me/FuzzyMarketAnalytics&quot; target=&quot;_blank&quot;&gt;попробовать бесплатно →&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;TUwh&quot;&gt;🔗 Полезные ссылки&lt;/h3&gt;
  &lt;ul id=&quot;gupm&quot;&gt;
    &lt;li id=&quot;h7G5&quot;&gt;🌐 Полный FAQ по сигналам и описание методик FMA: &lt;a href=&quot;https://fuzzy-technologies.github.io/FMA/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/FMA&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;JaKw&quot;&gt;⚙️ Платформа TKSBrokerAPI: &lt;a href=&quot;https://fuzzy-technologies.github.io/TKSBrokerAPI/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/TKSBrokerAPI&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;p0MI&quot;&gt;📡 Подписка на биржевые сигналы: &lt;a href=&quot;https://t.me/FuzzyMarketAnalytics&quot; target=&quot;_blank&quot;&gt;t.me/FuzzyMarketAnalytics&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;tt-tags id=&quot;Y1Ld&quot;&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;финансы&quot;&gt;#финансы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;роботы&quot;&gt;#роботы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;сигналы&quot;&gt;#сигналы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;биржа&quot;&gt;#биржа&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;алгоритмы&quot;&gt;#алгоритмы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;python&quot;&gt;#python&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;вероятности&quot;&gt;#вероятности&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;инвестирование&quot;&gt;#инвестирование&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;аналитика&quot;&gt;#аналитика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;fuzzylogic&quot;&gt;#fuzzylogic&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;теханализ&quot;&gt;#теханализ&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>tgilmullin:trading-algorithm-history</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/trading-algorithm-history?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>Через тернии к звёздам: история создания торгового алгоритма</title><published>2025-04-17T08:30:01.143Z</published><updated>2025-06-22T19:09:29.441Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/84/a2/84a2f273-0543-4ece-9a0b-8a8f5dc8d4cc.png"></media:thumbnail><tt:hashtag>математика</tt:hashtag><tt:hashtag>datascience</tt:hashtag><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>алгоритмы</tt:hashtag><tt:hashtag>автоматизация</tt:hashtag><tt:hashtag>нечёткие_шкалы</tt:hashtag><tt:hashtag>инженерия</tt:hashtag><tt:hashtag>платформы</tt:hashtag><tt:hashtag>разработка</tt:hashtag><tt:hashtag>алготрейдинг</tt:hashtag><tt:hashtag>сигналы</tt:hashtag><tt:hashtag>история</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/db/0d/db0dad4e-b531-4650-85bb-f68efe6240d6.png&quot;&gt;🤖 От первых набросков на бумаге до полноценного сигнального и торгового робота. В этой статье — история того, как инженерная идея превращалась в работающий алгоритм: без магии, без нейросетей, только математика, здравый смысл и множество экспериментов.</summary><content type="html">
  &lt;figure id=&quot;52Ic&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/db/0d/db0dad4e-b531-4650-85bb-f68efe6240d6.png&quot; width=&quot;1536&quot; /&gt;
    &lt;figcaption&gt;Вдохновение, превращённое в алгоритм. От первых идей и математических набросков — до полноценной торговой системы, встроенной в платформу автоматизации&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;aOE3&quot;&gt;&lt;strong&gt;В этом рассказе:&lt;/strong&gt;&lt;/p&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#2y0W&quot;&gt;С чего всё начиналось&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#t1eX&quot;&gt;Эксперименты: от наблюдений к формализованной логике&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#H2gf&quot;&gt;Выделение базовых типов трендов на реальных графиках&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#rEZf&quot;&gt;Оценка рисков и достижимости целей&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#ogaJ&quot;&gt;Построение матрицы рисков&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#9GT1&quot;&gt;Разработка платформы TKSBrokerAPI&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#ciqb&quot;&gt;Постановка задачи прогнозирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#U0cU&quot;&gt;Финальная схема: как родился алгоритм&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#TUwh&quot;&gt;🔗 Полезные ссылки&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;2y0W&quot;&gt;С чего всё начиналось&lt;/h2&gt;
  &lt;p id=&quot;Nu3B&quot;&gt;Автоматизация биржевых процессов и разработка сигнальных алгоритмов — это не спонтанная идея, а результат многолетней инженерной и научной работы.&lt;/p&gt;
  &lt;p id=&quot;Dr0M&quot;&gt;Всё началось ещё в 2015 году, когда мы впервые занялись автоматизацией биржевой торговли, создав собственное API на Python для подключения к брокеру ZuluTrade. На тот момент это была одна из немногих систем, где можно было экспериментировать с автоматизацией через REST API и автоследованием.&lt;/p&gt;
  &lt;p id=&quot;tEz4&quot;&gt;Это была наша первая целенаправленная инженерная попытка разработать роботов для автоследования, которые автоматически принимали решение и совершали сделки на основе анализа ценовых рядов. Это заняло почти два года, но проект дал нам первый практический опыт работы с реальными биржевыми данными и брокерскими системами.&lt;/p&gt;
  &lt;p id=&quot;uXnN&quot;&gt;Именно тогда впервые появилась мысль — важно не просто «дойдёт ли цена», а «как именно она туда дойдёт?» Мы всерьёз надеялись, что нейросети помогут ответить на этот вопрос (спойлер: не помогли). После месяцев экспериментов стало ясно, что классические методы для «живых» торгов работают стабильнее, предсказуемее и быстрее. Но в защиту нейросетевого подхода стоит отметить, что с помощью ИИ можно гораздо быстрее проводить анализ сентимента рыночных новостей и фундаментальный анализ компаний.&lt;/p&gt;
  &lt;figure id=&quot;bEai&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/14/59/14596948-fd2a-428b-99ff-7767330415c1.png&quot; width=&quot;2800&quot; /&gt;
    &lt;figcaption&gt;Идея, родившаяся раньше алгоритма: важно не просто «дойдёт ли цена», а «как именно она туда дойдёт». На этом сохранившемся скриншоте — один из первых экспериментов с прогнозом движения по золоту, сделанный 6 июня 2017 года на 48 часов вперёд, без нейросетей, простыми алгоритмами. Наклон, уровни, форма движения — всё было довольно похоже. Тогда нам казалось, что этого уже достаточно для запуска автоматической торговли. Но впереди был ещё долгий путь — через десятки ошибок, ресёрчей и переосмыслений&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;GlKv&quot;&gt;Позднее мы разработали &lt;strong&gt;PriceGenerator &lt;/strong&gt;— платформу для генерации тестовых биржевых данных. На выходе получаются цены, статистически подобные реальным, и даже их графики очень похожи на графики настоящих акций. Это позволяет воспроизводить поведение рынка в условиях, когда реальная история недоступна или не подходит под конкретные требования алгоритма. Платформа стала следующим шагом: необходимым инструментом для тестирования торговых алгоритмов и анализа динамики цен.&lt;/p&gt;
  &lt;figure id=&quot;2XhG&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/28/28/28283cd0-a438-4919-86c2-e629fb9f9a65.png&quot; width=&quot;2553&quot; /&gt;
    &lt;figcaption&gt;Фрагмент ценового ряда, сгенерированного PriceGenerator, с глубокими просадками, всплесками и реалистичными объёмами. Ряд с высокой волатильностью и шумами — именно такие «грязные» данные нужны для настоящего стресс-тестирования алгоритмов, прежде чем выпускать их в торговлю&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FNmV&quot;&gt;К 2020 году стало очевидно: нужно создать собственную платформу, адаптированную для работы через российских брокеров. Так началась разработка &lt;strong&gt;TKSBrokerAPI &lt;/strong&gt;— лёгкого и гибкого Python API для автоматизации торговых сценариев.&lt;/p&gt;
  &lt;h2 id=&quot;t1eX&quot;&gt;Эксперименты: от наблюдений к формализованной логике&lt;/h2&gt;
  &lt;p id=&quot;J6MI&quot;&gt;Работа над математикой для алгоритмов и торговой логикой для биржевых роботов велась по различным направлениям:&lt;/p&gt;
  &lt;ul id=&quot;iafK&quot;&gt;
    &lt;li id=&quot;ClXU&quot;&gt;анализ изменения цен;&lt;/li&gt;
    &lt;li id=&quot;3HHy&quot;&gt;выделение характерных типов трендов;&lt;/li&gt;
    &lt;li id=&quot;5OT1&quot;&gt;попытки формализовать риск и достижимость цели.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;H2gf&quot;&gt;Выделение базовых типов трендов на реальных графиках&lt;/h3&gt;
  &lt;p id=&quot;WKo9&quot;&gt;Изначально всё было, в буквальном смысле, в дорожных набросках: графики цены, разбитые на интервалы, простые типы трендов, формулы оценки риска в зависимости от положения цены в свече. Причём любые формулы сразу закладывались с расчётом на дальнейшую автоматизацию. Все идеи, что приходили в голову, в дороге, в путешествиях, по пути на работу, сразу же фиксировались на планшете.&lt;/p&gt;
  &lt;figure id=&quot;Q4IT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9e/28/9e2841dc-6ed0-4ade-990a-847c5212cb1f.png&quot; width=&quot;1176&quot; /&gt;
    &lt;figcaption&gt;Один из самых ранних черновиков: формализация задачи прогнозирования на отрезке времени с выделением ключевых точек (O-H-L-C), анализом тренда и делением на интервалы. Именно такие дорожные наброски стали основой будущего алгоритма&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IOYs&quot;&gt;На ранних этапах работы мы пытались определить, какие типы движений цены чаще всего встречаются на реальных рынках. Первые наброски представляли собой простую схему двух основных типов трендов, каждый из которых мог проявляться в двух видах.&lt;/p&gt;
  &lt;ol id=&quot;jwMb&quot;&gt;
    &lt;li id=&quot;O6gY&quot;&gt;Восходящий тренд:&lt;br /&gt;    • небольшое снижение цены, за которым следует устойчивый рост;&lt;br /&gt;    • быстрый рост цены с последующим коротким откатом.&lt;/li&gt;
    &lt;li id=&quot;q79u&quot;&gt;Нисходящий тренд:&lt;br /&gt;    • небольшой рост, за которым следует уверенное падение;&lt;br /&gt;    • быстрое падение с последующим небольшим восстановлением.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;8L7k&quot;&gt;В дальнейшем от типа и вида реального тренда зависел способ входа в позицию алгоритмом: отложенным ордером, либо немедленный вход в позицию маркет-ордером.&lt;/p&gt;
  &lt;p id=&quot;tjoC&quot;&gt;Рынок редко движется идеально ровно. Почти всегда есть шумы, выбросы, микроколебания — их также нужно учитывать при моделировании.&lt;/p&gt;
  &lt;p id=&quot;jKnw&quot;&gt;Эти наблюдения стали основой логики принятия решений и помогли сформировать базовую структуру будущего трейдингового алгоритма.&lt;/p&gt;
  &lt;figure id=&quot;8QJT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1e/72/1e726ad3-a80b-4119-bb74-ccb08512ad3b.png&quot; width=&quot;1200&quot; /&gt;
    &lt;figcaption&gt;Первые попытки классифицировать реальные движения цены при общем восходящем тренде. Такие простые, но наглядные паттерны помогли заложить основу для логики прогнозов и принятия решений в алгоритме. Случай нисходящего тренда описывался аналогично&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;rEZf&quot;&gt;Оценка рисков и достижимости целей&lt;/h3&gt;
  &lt;p id=&quot;lxmj&quot;&gt;Следующим важным шагом стало понимание: недостаточно просто классифицировать движение цены. Необходимо научиться оценивать силу сигналов, риск открытия позиции и вероятность достижения цели.&lt;/p&gt;
  &lt;p id=&quot;n8Jw&quot;&gt;В первых черновиках появились формулы нечёткой оценки риска: оценивая, где находится текущая цена относительно границ свечей различных интервалов (минимума, максимума, открытия и закрытия), можно было приблизительно определить вероятность движения в нужную сторону.&lt;/p&gt;
  &lt;p id=&quot;9pck&quot;&gt;Параллельно строились модели нечёткой оценки достижимости цели: если прогнозная точка находилась далеко от текущей цены, вероятность достижения снижалась. Если близко — возрастала.&lt;/p&gt;
  &lt;figure id=&quot;Lytk&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/48/43/48432d7a-74f3-42a1-9f4c-752106828153.png&quot; width=&quot;2416&quot; /&gt;
    &lt;figcaption&gt;Первые черновые схемы расчёта риска и достижимости цели. Использовались простые формулы с нормализацией цены относительно границ свечей и классификацией по уровням нечёткой шкалы {Min, Low, Med, High, Max}. Эти подходы легли в основу более формальной системы оценки сигналов&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;oGLS&quot;&gt;Также мы экспериментировали с реконструкцией графика цены по нечёткому прогнозу: если известны сила и направление сигнала, можно механически восстановить тело и тени очередной прогнозной свечи. Построив ряд таких свечей можно было визуально проверить достижимость цели, а также как будет выглядеть прогноз при разных вариантах движения. Простейшие формулы, основанные на вычислении центра будущей свечи и предполагаемом нечётком размере тела и теней, стали основой для генерации реалистичных прогнозов.&lt;/p&gt;
  &lt;figure id=&quot;JUuJ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2f/fc/2ffc1086-fbdc-47c4-84bf-d94aec58b2c6.png&quot; width=&quot;2372&quot; /&gt;
    &lt;figcaption&gt;Простейший механизм восстановления тела и теней свечи по направлению и величине нечёткого сигнала. Использовался на ранних этапах для визуализации результата прогноза: сначала вычислялся центр свечи, затем к нему добавлялись тело и тени, величина которых зависела от их нечёткой оценки. Это позволяло строить реалистичные цепочки прогнозных свечей (как на скриншоте выше от 2017 года) и наглядно оценивать достижимость цели, ещё до появления формализованного сигнального алгоритма&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;ogaJ&quot;&gt;Построение матрицы рисков&lt;/h3&gt;
  &lt;p id=&quot;zocJ&quot;&gt;Чтобы упростить алгоритм и перейти от отдельных числовых оценок к системной модели принятия решений, мы начали строить матрицу рисков на основе нечётких оценок. Это позволило перейти от «ощущений трейдера» к формализованным решениям, оставаясь при этом интуитивно понятными.&lt;/p&gt;
  &lt;p id=&quot;DLxf&quot;&gt;Идея была в том, чтобы объединить:&lt;/p&gt;
  &lt;ul id=&quot;rxgf&quot;&gt;
    &lt;li id=&quot;fQeD&quot;&gt;вероятность достижения цели;&lt;/li&gt;
    &lt;li id=&quot;9ArN&quot;&gt;оценку текущего риска позиции;&lt;/li&gt;
    &lt;li id=&quot;YfFe&quot;&gt;и субъективную оценку желательности открытия, закрытия или удержания сделки в текущих условиях.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;b3Pc&quot;&gt;На этом этапе появились первые наброски нечёткой матрицы принятия решений. По её столбцам отсчитывался нечёткий уровень риска, по строкам — нечёткая вероятность достижения цели, а на пересечении определялся ответ, да или нет (True или False), в зависимости от вопроса: мы желаем открыть (или усреднить), либо закрыть (или удержать) позицию.&lt;/p&gt;
  &lt;figure id=&quot;IAay&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ad/59/ad5948d2-f983-41e2-8101-4a236967d8c0.png&quot; width=&quot;1199&quot; /&gt;
    &lt;figcaption&gt;Нечёткая матрица принятия решений: по столбцам — нечёткий уровень риска, по строкам — нечёткая вероятность достижения цели. Цвета обозначают зону действия и значения нечётких уровней, а в ячейках указано, следует ли открывать / усреднять позицию или закрывать / удерживать (T — True, F — False). Такой подход позволил формализовать стратегию, сохранив её понимание человеком&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Fx40&quot;&gt;Матрица уже позволяла автоматически принимать решения, не полагаясь только на интуицию, но оставаясь понятной человеку.&lt;/p&gt;
  &lt;h2 id=&quot;9GT1&quot;&gt;Разработка платформы TKSBrokerAPI&lt;/h2&gt;
  &lt;p id=&quot;JZOW&quot;&gt;Параллельно с работой над торговым алгоритмом мы начали разрабатывать TKSBrokerAPI — универсальную платформу для взаимодействия с брокером и написания торговых и аналитических сценариев на Python.&lt;/p&gt;
  &lt;p id=&quot;tWzJ&quot;&gt;Целью было создание лёгкого и расширяемого API, который:&lt;/p&gt;
  &lt;ul id=&quot;AfQk&quot;&gt;
    &lt;li id=&quot;21xx&quot;&gt;подключался к брокерскому счёту через REST API;&lt;/li&gt;
    &lt;li id=&quot;9X12&quot;&gt;собирал и обрабатывал биржевые данные;&lt;/li&gt;
    &lt;li id=&quot;iOqr&quot;&gt;запускал торговые сценарии, оформленные в виде модулей Python.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;XTAb&quot;&gt;Изначально платформа задумывалась как техническая прослойка для упрощения сбора данных и аналитики, но быстро превратилась в полноценную базу для автоматизации торговли.&lt;/p&gt;
  &lt;p id=&quot;lJ9E&quot;&gt;Благодаря платформе стало возможным:&lt;/p&gt;
  &lt;ul id=&quot;4mdy&quot;&gt;
    &lt;li id=&quot;vUZs&quot;&gt;запрашивать текущие цены, объёмы и параметры инструментов;&lt;/li&gt;
    &lt;li id=&quot;5CWV&quot;&gt;управлять позициями и ордерами;&lt;/li&gt;
    &lt;li id=&quot;K1Bm&quot;&gt;собирать аналитику по портфелю;&lt;/li&gt;
    &lt;li id=&quot;VmAQ&quot;&gt;формировать отчёты в Markdown/HTML;&lt;/li&gt;
    &lt;li id=&quot;PfUX&quot;&gt;и встраивать запуск сценариев в CI/CD-конвейер.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;1Jjc&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/57/e0/57e076f5-a8c5-4093-8b83-faf254c21d60.png&quot; width=&quot;2190&quot; /&gt;
    &lt;figcaption&gt;Схематичная архитектура и основные возможности платформы TKSBrokerAPI: автоматизация торговых сценариев, сбор и обработка рыночных данных, генерация аналитических отчётов и поддержка шаблонов торговых сценариев на Python. Всё, что нужно для превращения торговых идей в работающие алгоритмы&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;ciqb&quot;&gt;Постановка задачи прогнозирования&lt;/h2&gt;
  &lt;p id=&quot;NcDe&quot;&gt;Когда общие наброски и принципы стали ясны, пришло время сформулировать задачу. На одном из первых черновиков мы впервые формализовали многокомпонентную постановку задачи так:&lt;/p&gt;
  &lt;ul id=&quot;8lSh&quot;&gt;
    &lt;li id=&quot;snYj&quot;&gt;реализовать прогнозирование цен для шести таймфреймов (5 минут, 15 минут, 1 час, 1 день, 1 неделя, 1 месяц);&lt;/li&gt;
    &lt;li id=&quot;WhVB&quot;&gt;провести оптимизацию количества инструментов для максимизации доходности;&lt;/li&gt;
    &lt;li id=&quot;kSLq&quot;&gt;исследовать и выявить наилучшие комбинации вложенных интервалов таймфреймов;&lt;/li&gt;
    &lt;li id=&quot;h5S6&quot;&gt;выбрать наиболее надёжные пары таймфреймов для прогноза.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;DsLF&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/22/b3/22b3ffef-cf7c-460e-826a-d00885d0e737.png&quot; width=&quot;1398&quot; /&gt;
    &lt;figcaption&gt;Одна из ранних попыток формально поставить задачу прогнозирования для нашего торгового робота. Здесь мы впервые описали прогнозирование на множестве таймфреймов, оценку вложенности интервалов и оптимизацию числа инструментов для максимизации доходности&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;YUGI&quot;&gt;Именно в этот момент стало понятно: для стабильной работы алгоритма нужно строить вероятностные модели на разных временных таймфреймах и для различных горизонтов.&lt;/p&gt;
  &lt;h2 id=&quot;U0cU&quot;&gt;Финальная схема: как родился алгоритм&lt;/h2&gt;
  &lt;p id=&quot;Z1sK&quot;&gt;Вершиной всей нашей работы стала финальная схема, над которой мы корпели несколько месяцев, исчеркав и удалив с доски не один вариант. &lt;/p&gt;
  &lt;p id=&quot;ZlnG&quot;&gt;На ней были собраны:&lt;/p&gt;
  &lt;ul id=&quot;sXgr&quot;&gt;
    &lt;li id=&quot;BWnN&quot;&gt;анализ ценовых рядов (очистка аномалий методом Хампеля, расчёт базовых статистик);&lt;/li&gt;
    &lt;li id=&quot;LIJ5&quot;&gt;определение канала волатильности (через Bollinger Bands);&lt;/li&gt;
    &lt;li id=&quot;XVI7&quot;&gt;построение прогнозов (расчёт волатильности и нечёткая оценка силы сигнала);&lt;/li&gt;
    &lt;li id=&quot;Cbji&quot;&gt;оценка достижимости цели (статистика и теория вероятностей);&lt;/li&gt;
    &lt;li id=&quot;ucKJ&quot;&gt;некоторые проверки возможности открытия позиции (проверка цен в стакане, проверка объёмов на аномальность);&lt;/li&gt;
    &lt;li id=&quot;EnrN&quot;&gt;некоторые базовые правила управления капиталом (Money Management Rules).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;sGmP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/97/28/97281c24-1326-429b-8680-996b7422bfcb.jpeg&quot; width=&quot;4096&quot; /&gt;
    &lt;figcaption&gt;Финальная схема алгоритма — результат многомесячной работы: на ней отражены ключевые идеи, формулы и логика, ставшие основой сигнального и торгового модуля. Именно с этой доски всё началось по-настоящему и алгоритм наконец-то сложился в единую систему&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5V8e&quot;&gt;Метод построения прогнозов и оценка достижимости цели стали ключевыми шагами для создания сигнального алгоритма. А созданная нами теоретическая база стала основой для дальнейшей реализации и тестирования алгоритма в реальной торговле. Сам алгоритм принятия решений был описан далее в табличном виде как свод правил открытия и закрытия сделок (таблицы Open / Close Rules).&lt;/p&gt;
  &lt;figure id=&quot;dKT7&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bc/46/bc461d64-1bdb-4d4e-97c0-cbc9ce30050f.png&quot; width=&quot;9500&quot; /&gt;
    &lt;figcaption&gt;Формализованные правила принятия решений: именно так алгоритм превращает биржевые данные в конкретные торговые действия. Таблицы принятия решений Open / Close Rules&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Az3c&quot;&gt;… А ведь всё началось в далёком 2015-м году с одного графика цены на золото и желания автоматически проанализировать его и спрогнозировать будущее движение, его силу и целевые уровни. Когда смотришь на итоговую реализацию — даже не верится, сколько всего было сделано: исследований, экспериментов, моделирования, программирования и автоматизации …&lt;/p&gt;
  &lt;p id=&quot;6s9W&quot;&gt;Финализируя свой рассказ хочется сказать, что разработка торгового (и, вообще, любого нового) алгоритма — это не история про «озарение за одну ночь». Это результат долгой инженерной работы и анализа реальных данных, математического моделирования трендов и рисков, построение архитектуры и разработка надёжных автоматизированных систем. Платформы PriceGenerator и TKSBrokerAPI, сигнальный и торговый алгоритмы, реализованные нами, стали логическим продолжением всех этих этапов. И, как это часто бывает в инженерных проектах, каждое новое решение рождалось не мгновенно, а через множество набросков, тестов, ошибок и переосмыслений.&lt;/p&gt;
  &lt;figure id=&quot;aaJ0&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/aa/05/aa0585b1-0045-4a0b-a6fc-0455a262acb4.png&quot; width=&quot;1890&quot; /&gt;
    &lt;figcaption&gt;Разработка сигнального и торгового алгоритма: от идеи до реализации — Тимур и Мансур Гильмуллины — сын и отец — инженер и учёный&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;TUwh&quot;&gt;🔗 Полезные ссылки&lt;/h3&gt;
  &lt;ul id=&quot;gupm&quot;&gt;
    &lt;li id=&quot;h7G5&quot;&gt;🌐 Полный FAQ по сигналам и описание методик FMA: &lt;a href=&quot;https://fuzzy-technologies.github.io/FMA/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/FMA&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;JaKw&quot;&gt;⚙️ Платформа TKSBrokerAPI: &lt;a href=&quot;https://fuzzy-technologies.github.io/TKSBrokerAPI/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/TKSBrokerAPI&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;p0MI&quot;&gt;📡 Подписка на биржевые сигналы: &lt;a href=&quot;https://web.tribute.tg/s/nub&quot; target=&quot;_blank&quot;&gt;web.tribute.tg/s/nub&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;99RS&quot;&gt;&lt;strong&gt;Что ещё почитать по теме разработки трейдинговых алгоритмов:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;9UvJ&quot;&gt;
    &lt;li id=&quot;mQ35&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/fuzzy-scales&quot; target=&quot;_blank&quot;&gt;«Что такое нечёткие измерительные шкалы»&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;4Vms&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/hampel-anomalies-filtering&quot; target=&quot;_blank&quot;&gt;«Как находить аномалии в числовых рядах»&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;2Pr9&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/target-probability&quot; target=&quot;_blank&quot;&gt;«Как оценить вероятность достижения цели»&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;f3dd&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/trading-algorithm&quot; target=&quot;_blank&quot;&gt;«Как работает сигнальный алгоритм торгового робота»&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;oH2q&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/PriceGenerator&quot; target=&quot;_blank&quot;&gt;«PriceGenerator — платформа для генерации цен, похожих на настоящие биржевые графики»&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;taWd&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;«TKSBrokerAPI — платформа для автоматизации торговых сценариев»&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;tt-tags id=&quot;w50N&quot;&gt;
    &lt;tt-tag name=&quot;математика&quot;&gt;#математика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;datascience&quot;&gt;#datascience&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;алгоритмы&quot;&gt;#алгоритмы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;автоматизация&quot;&gt;#автоматизация&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;нечёткие_шкалы&quot;&gt;#нечёткие_шкалы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;инженерия&quot;&gt;#инженерия&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;платформы&quot;&gt;#платформы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;разработка&quot;&gt;#разработка&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;алготрейдинг&quot;&gt;#алготрейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;сигналы&quot;&gt;#сигналы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;история&quot;&gt;#история&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>tgilmullin:trading-algorithm</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/trading-algorithm?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>Инженерный взгляд на трейдинг: как работает сигнальный алгоритм торгового робота</title><published>2025-04-13T18:32:56.406Z</published><updated>2025-06-22T19:12:05.951Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/36/65/3665c166-54a6-4fcc-aadd-ed1343457c46.png"></media:thumbnail><tt:hashtag>математика</tt:hashtag><tt:hashtag>datascience</tt:hashtag><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>финансы</tt:hashtag><tt:hashtag>статистика</tt:hashtag><tt:hashtag>вероятность</tt:hashtag><tt:hashtag>риски</tt:hashtag><tt:hashtag>оценка</tt:hashtag><tt:hashtag>роботы</tt:hashtag><tt:hashtag>алгоритмы</tt:hashtag><tt:hashtag>нечёткие_шкалы</tt:hashtag><tt:hashtag>торговля</tt:hashtag><tt:hashtag>money_management</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/11/be/11be3527-398a-4b9a-8ad0-b70fbeea8f63.png&quot;&gt;Автоматизация анализа биржевых данных позволяет принимать торговые решения быстрее и точнее. Но рынок — это сложная система: реальное движение цены сопровождается шумом, выбросами и нестабильностью. Простой прогноз вида «цена достигнет / не достигнет цели» здесь мало что значит.</summary><content type="html">
  &lt;figure id=&quot;M7F1&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/11/be/11be3527-398a-4b9a-8ad0-b70fbeea8f63.png&quot; width=&quot;1536&quot; /&gt;
    &lt;figcaption&gt;Алгоритм определяет нечёткую силу сигналов и уровень вероятности достижимости целевой цены&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;axrn&quot; data-align=&quot;right&quot;&gt;&lt;a href=&quot;https://www.linkedin.com/in/tgilmullin&quot; target=&quot;_blank&quot;&gt;Тимур Гильмуллин&lt;/a&gt; в соавторстве с &lt;a href=&quot;https://www.linkedin.com/in/mgilmullin&quot; target=&quot;_blank&quot;&gt;Мансуром Гильмуллиным&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;E8mJ&quot;&gt;В этой статье:&lt;/p&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#tA6P&quot;&gt;Основные этапы работы алгоритма&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#HWCL&quot;&gt;Как строятся торговые сигналы&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#j8lo&quot;&gt;Правила открытия и закрытия позиций&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#gBou&quot;&gt;Открытие и усреднение&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#Z324&quot;&gt;Удержание или фиксация прибыли&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#ueOw&quot;&gt;Правила управления капиталом&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Xj3Y&quot;&gt;Почему используется вероятностная оценка и нечёткая шкала&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#GJuq&quot;&gt;Не стоит полагаться на «чёткие» прогнозы&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#H6Zn&quot;&gt;Как используется нечёткая шкала&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#r6TC&quot;&gt;Фильтрация силы сигналов&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#wgCy&quot;&gt;Практическое использование алгоритма&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#TUwh&quot;&gt;🔗 Полезные ссылки&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;p id=&quot;WIDn&quot;&gt;Автоматизация анализа биржевых данных позволяет принимать торговые решения быстрее и точнее. Но рынок — это сложная система: реальное движение цены сопровождается шумом, выбросами и нестабильностью. Простой прогноз вроде «цена достигнет / не достигнет цели» здесь мало что значит. Также невозможно на 100% предугадать поведение и движение цены в будущем. Однако, торговать всё равно как-то необходимо и поэтому, чтобы торговать надёжно, требуется оценивать вероятность достижения целей, а не просто угадывать направление движения.&lt;/p&gt;
  &lt;p id=&quot;wcRg&quot;&gt;В этом блоге мы уже рассказывали о трёх ключевых компонентах, на которых строится реальный торговый алгоритм:&lt;/p&gt;
  &lt;ul id=&quot;Vwor&quot;&gt;
    &lt;li id=&quot;F6Zb&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/hampel-anomalies-filtering&quot; target=&quot;_blank&quot;&gt;фильтрация аномалий&lt;/a&gt; в данных модифицированным методом Хампеля — чтобы убрать выбросы, искажающие расчёты;&lt;/li&gt;
    &lt;li id=&quot;p2Ys&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/fuzzy-scales&quot; target=&quot;_blank&quot;&gt;нечёткие измерительные шкалы&lt;/a&gt; — чтобы интерпретировать риск и вероятность не только числом, но и понятными человеку уровнями;&lt;/li&gt;
    &lt;li id=&quot;n3la&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/target-probability&quot; target=&quot;_blank&quot;&gt;оценка достижимости целевой цены&lt;/a&gt; — чтобы не строить однозначные (часто неточные) прогнозы, а работать с реальными вероятностями успеха, используя мощный математический аппарат оценки вероятностей, статистики и анализа данных.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;gmcb&quot;&gt;Объединив все эти элементы, можно построить достаточно надёжную автоматическую сигнальную систему, которая:&lt;/p&gt;
  &lt;ul id=&quot;k8oJ&quot;&gt;
    &lt;li id=&quot;gkG3&quot;&gt;самостоятельно применяет правила управления капиталом (MMR, Money Management Rules);&lt;/li&gt;
    &lt;li id=&quot;thJX&quot;&gt;автоматически анализирует рыночное движение цен и выдаёт прогнозы по целям;&lt;/li&gt;
    &lt;li id=&quot;MPmk&quot;&gt;оценивает силу сигналов и вероятность достижения прогнозных целей;&lt;/li&gt;
    &lt;li id=&quot;dfZ3&quot;&gt;интерпретирует сигналы и риски на нечёткой шкале, понятной человеку;&lt;/li&gt;
    &lt;li id=&quot;LK9b&quot;&gt;а также принимает решения об открытии и усреднении позиции либо об удержании позиции или фиксации текущей прибыли на основе заранее заданных правил.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;UEXk&quot;&gt;В этой статье покажем, как устроен сам алгоритм: как он анализирует данные, принимает решения и управляет сделками.&lt;/p&gt;
  &lt;h2 id=&quot;tA6P&quot;&gt;Основные этапы работы алгоритма&lt;/h2&gt;
  &lt;p id=&quot;tUt1&quot;&gt;Задачи, решаемые алгоритмическим торговым роботом, следующие.&lt;/p&gt;
  &lt;ol id=&quot;FG0j&quot;&gt;
    &lt;li id=&quot;Dr4M&quot;&gt;Отобрать торговые сигналы с высокой вероятностью достижения целевой цены на основе анализа статистик ценовых рядов исторических данных.&lt;/li&gt;
    &lt;li id=&quot;P8OU&quot;&gt;Исключить аномальные всплески цен с помощью методов фильтрации (например, модифицированного метода Хампеля).&lt;/li&gt;
    &lt;li id=&quot;d87E&quot;&gt;Учесть динамику рынка на разных таймфреймах, чтобы корректно оценивать вероятности достижения целей. Для этого проанализировать статистики пятиминуток и часовых свечей для трейдерского алгоритма, либо часовые и дневные — для долгосрочного инвесторского алгоритма.&lt;/li&gt;
    &lt;li id=&quot;hElp&quot;&gt;Перевести числовую вероятность в понятные уровни качества сигналов с помощью универсальной нечёткой шкалы {Min, Low, Med, High, Max}.&lt;/li&gt;
    &lt;li id=&quot;wMHJ&quot;&gt;Отфильтровать и скорректировать силу торговых сигналов в зависимости от текущей вероятности успеха, чтобы динамически адаптироваться к меняющимся рыночным условиям.&lt;/li&gt;
    &lt;li id=&quot;Kya7&quot;&gt;Применять строгие правила удержания или открытия новых позиций, усреднения и фиксации прибыли для каждой сделки, исключив человеческий фактор и эмоциональные решения.&lt;/li&gt;
    &lt;li id=&quot;Qqq8&quot;&gt;Контролировать и перераспределять капитал на уровне портфеля с помощью глобальных правил:&lt;/li&gt;
  &lt;/ol&gt;
  &lt;ul id=&quot;PtN6&quot;&gt;
    &lt;ul id=&quot;jhaN&quot;&gt;
      &lt;li id=&quot;epbm&quot;&gt;закрытие убыточных или достаточного числа прибыльных позиций по заданным условиям;&lt;/li&gt;
      &lt;li id=&quot;TOad&quot;&gt;управление свободным кешем путём его перекладывания в фонды ликвидности, для повышения устойчивости торговой системы.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;FBrc&quot;&gt;&lt;strong&gt;Блок-схема работы алгоритма&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;a6NG&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/56/95/5695c6d1-eeaf-415d-9040-6601437f05ac.png&quot; width=&quot;438&quot; /&gt;
    &lt;figcaption&gt;Блок-схема работы трейдингового алгоритма&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;HWCL&quot;&gt;Как строятся торговые сигналы&lt;/h2&gt;
  &lt;p id=&quot;8CHe&quot;&gt;После очистки данных от аномалий и расчёта вероятности достижения цели, алгоритм переходит к формированию торговых сигналов: проверяются возможности закрытия имеющихся позиций и открытие новых. В цикле торговой итерации, параллельно для десятков инструментов, на основании правил «открытия / закрытия» позиций (Open / Close Rules) определяется множество характеристик ценовых рядов, как с помощью классического технического анализа (построение канала Bollinger Band, вычисление значения индикатора Parabolic SAR), так и вероятностные характеристики цен (логарифмические доходности, средние доходности, волатильность и стандартизированное отклонение). По итогу вычисляются желаемая целевая цена и значение силы сигнала на покупку или продажу.&lt;/p&gt;
  &lt;p id=&quot;K44p&quot;&gt;Каждый сигнал дополнительно анализируется по нескольким признакам:&lt;/p&gt;
  &lt;ul id=&quot;jvIB&quot;&gt;
    &lt;li id=&quot;ioWU&quot;&gt;оценивается вероятность достижения целевой цены;&lt;/li&gt;
    &lt;li id=&quot;y95A&quot;&gt;числовая вероятность и сила сигнала переводятся в уровень на нечёткой шкале {Min, Low, Med, High, Max};&lt;/li&gt;
    &lt;li id=&quot;XNNq&quot;&gt;выполняется фильтрация силы сигнала в зависимости от вероятности достижимости цели.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3Qj6&quot;&gt;На этом этапе слабые или нестабильные сигналы отсеиваются. Только если вероятность достаточно высокая и дополнительные условия выполнены, сигнал поступает в блок принятия решения об открытии сделки. Кроме того, сила сигнала напрямую влияет на используемые в торгах объёмы инструмента.&lt;/p&gt;
  &lt;p id=&quot;KDix&quot;&gt;Непосредственно перед выполнением самой сделки дополнительно анализируется текущее состояние биржевого стакана (Orders Book):&lt;/p&gt;
  &lt;ul id=&quot;XtSK&quot;&gt;
    &lt;li id=&quot;f60u&quot;&gt;наличие в нём достаточного объёма на покупку и продажу;&lt;/li&gt;
    &lt;li id=&quot;JirH&quot;&gt;приоритет выбранного направления;&lt;/li&gt;
    &lt;li id=&quot;jUUe&quot;&gt;отсутствие аномальных объёмов в стакане.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Nh6r&quot;&gt;Анализ стакана биржевых цен даёт дополнительный «рычаг» на отмену сделки. Например, если получен сигнал «покупать», но объёмы на продажу в разы больше, чем на покупку, стоит отказаться от покупки в текущий момент. Или если слишком много аномальных объёмов на продажу в стакане. Хотя, при наличии аномальных объёмов, также можно встать в покупку чуть выше аномалии, а на продажу — чуть ниже, по методике Front Running.&lt;/p&gt;
  &lt;h2 id=&quot;j8lo&quot;&gt;Правила открытия и закрытия позиций&lt;/h2&gt;
  &lt;p id=&quot;qnou&quot;&gt;Как было упомянуто выше, сила сигнала влияет на используемый в сделке объём для торгов и способ выставления заявок в стакан.&lt;/p&gt;
  &lt;ol id=&quot;zeoj&quot;&gt;
    &lt;li id=&quot;dOQs&quot;&gt;Для сигнала Max уровня:&lt;/li&gt;
    &lt;ul id=&quot;7Dr6&quot;&gt;
      &lt;li id=&quot;wWrY&quot;&gt;используется максимально допустимый объём для сделки по одному инструменту;&lt;/li&gt;
      &lt;li id=&quot;1rIY&quot;&gt;выставляется маркет-ордер «по рынку»:&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ol id=&quot;1eyU&quot;&gt;
      &lt;ul id=&quot;3Bv9&quot;&gt;
        &lt;li id=&quot;5NoN&quot;&gt;по цене первого продавца для сделок на покупку;&lt;/li&gt;
        &lt;li id=&quot;wsbb&quot;&gt;либо по цене первого покупателя для сделок на продажу.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/ol&gt;
    &lt;li id=&quot;i59f&quot;&gt;Для сигнала High уровня:&lt;/li&gt;
    &lt;ul id=&quot;cQH5&quot;&gt;
      &lt;li id=&quot;TT1O&quot;&gt;используется уменьшенный объём от разрешённого для сделки по одному инструменту;&lt;/li&gt;
      &lt;li id=&quot;mcCy&quot;&gt;выставляется стоп-ордер:&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ol id=&quot;MoZj&quot;&gt;
      &lt;ul id=&quot;87bt&quot;&gt;
        &lt;li id=&quot;p9fE&quot;&gt;по цене первого покупателя для сделок на покупку;&lt;/li&gt;
        &lt;li id=&quot;Kv30&quot;&gt;либо по цене первого продавца для сделок на продажу.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/ol&gt;
    &lt;li id=&quot;4g9Z&quot;&gt;Для сигнала Med уровня:&lt;/li&gt;
    &lt;ul id=&quot;gfLo&quot;&gt;
      &lt;li id=&quot;NI9S&quot;&gt;используется половина объёма, разрешённого для одной сделки;&lt;/li&gt;
      &lt;li id=&quot;g8fQ&quot;&gt;выставляется стоп-ордер&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ol id=&quot;3CYZ&quot;&gt;
      &lt;ul id=&quot;uWYv&quot;&gt;
        &lt;li id=&quot;6r2F&quot;&gt;по цене на 1 шаг выше первого аномального объёма покупателей (для сделок на покупку);&lt;/li&gt;
        &lt;li id=&quot;x4oU&quot;&gt;либо по цене на 1 шаг ниже первого аномального объёма продавцов (для сделок на продажу).&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/ol&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;uuxn&quot;&gt;Цветовые схемы для правил открытия и закрытия позиций показывают последовательность применения всё более строгих ограничений при повышении силы сигнала.&lt;/p&gt;
  &lt;h3 id=&quot;gBou&quot;&gt;Открытие и усреднение&lt;/h3&gt;
  &lt;ol id=&quot;pcMm&quot;&gt;
    &lt;li id=&quot;op0R&quot;&gt;Сделка открывается только при наличии сигнала достаточной силы (качества). Обычно это Med, High или Max.&lt;/li&gt;
    &lt;li id=&quot;vdoO&quot;&gt;Перед открытием проверяются лимиты по рискам на сделку.&lt;/li&gt;
    &lt;li id=&quot;zdah&quot;&gt;Допускается усреднение позиции, если выполняются условия:&lt;/li&gt;
  &lt;/ol&gt;
  &lt;ul id=&quot;rEVP&quot;&gt;
    &lt;li id=&quot;D2jV&quot;&gt;просадка по инструменту в допустимых пределах;&lt;/li&gt;
    &lt;li id=&quot;KVDx&quot;&gt;сохранение достаточной силы сигнала после усреднения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;fHR3&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cb/99/cb993189-2732-472a-8c01-207fc1dce360.png&quot; width=&quot;4750&quot; /&gt;
    &lt;figcaption&gt;Базовые правила для открытия или усреднения позиций [Buy]&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;Z324&quot;&gt;Удержание или фиксация прибыли&lt;/h3&gt;
  &lt;ol id=&quot;FBQi&quot;&gt;
    &lt;li id=&quot;ceS9&quot;&gt;Фиксация прибыли при достижении уровней: целевого (желаемого) или достаточного.&lt;/li&gt;
    &lt;li id=&quot;1KD3&quot;&gt;Принудительное закрытие сделки, если вероятность достижения цели существенно снизилась.&lt;/li&gt;
    &lt;li id=&quot;N0t5&quot;&gt;Ограничение убытков по стоп-уровням или превышению допустимого риска.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;1WyJ&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/67/41/6741aa2b-e548-4979-aee0-e51af9c1b05c.png&quot; width=&quot;4750&quot; /&gt;
    &lt;figcaption&gt;Базовые правила для открытия или усреднения позиций [Sell]&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;ueOw&quot;&gt;Правила управления капиталом&lt;/h2&gt;
  &lt;p id=&quot;aKiY&quot;&gt;&lt;strong&gt;Почему важно управлять капиталом&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;a9q6&quot;&gt;Помимо управления отдельными сделками, важной частью торговой системы является глобальное управление капиталом, — доступные в портфеле денежные средства для распределения по активам. Даже если каждая отдельная сделка выглядит выгодной и с большой вероятностью достижения цели, без общего контроля над портфелем можно быстро увеличить риски.&lt;/p&gt;
  &lt;p id=&quot;6TrT&quot;&gt;&lt;strong&gt;Как устроены правила управления капиталом (Money Management Rules)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;tIef&quot;&gt;Базовые правила достаточно простые и нацелены на постоянный рост стоимости портфеля:&lt;/p&gt;
  &lt;ol id=&quot;8uyT&quot;&gt;
    &lt;li id=&quot;CqJl&quot;&gt;Закрыть все позиции в портфеле при достижении общей суммарной прибыли выше установленного уровня.&lt;/li&gt;
    &lt;li id=&quot;RBcD&quot;&gt;Закрыть убыточные позиции, за счёт некоторого числа прибыльных позиций, если убыток превышает допустимый порог.&lt;/li&gt;
    &lt;li id=&quot;gmLx&quot;&gt;Управлять свободным денежным кешем:&lt;/li&gt;
  &lt;/ol&gt;
  &lt;ul id=&quot;bAje&quot;&gt;
    &lt;ul id=&quot;hPSq&quot;&gt;
      &lt;li id=&quot;v67J&quot;&gt;при отсутствии сигналов на покупку временно перевести свободные средства в фонды ликвидности с ежедневной капитализацией;&lt;/li&gt;
      &lt;li id=&quot;hE4S&quot;&gt;при необходимости что-либо купить, вернуть часть средств из фондов ликвидности.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;o3uw&quot;&gt;Процедуры Money Management Rules выполняются автоматически по расписанию — обычно 1–2 раза в день.&lt;/p&gt;
  &lt;h2 id=&quot;Xj3Y&quot;&gt;Почему используется вероятностная оценка и нечёткая шкала&lt;/h2&gt;
  &lt;h3 id=&quot;GJuq&quot;&gt;Не стоит полагаться на «чёткие» прогнозы&lt;/h3&gt;
  &lt;p id=&quot;lsEP&quot;&gt;Рынок по своей природе — это система с высоким уровнем неопределённости: рынок нестабилен, подвержен случайным колебаниям (в том числе из-за фейковых новостей) и аномальным ценовым скачкам. Даже при наличии сильного сигнала невозможно гарантировать 100% результат и достижение целевой цены. Поэтому вместо жёстких предсказаний в аналитических системах принято строить вероятностную оценку достижения цели.&lt;/p&gt;
  &lt;p id=&quot;tMD7&quot;&gt;Зачем нужна вероятностная оценка:&lt;/p&gt;
  &lt;ul id=&quot;Yayx&quot;&gt;
    &lt;li id=&quot;K5QI&quot;&gt;число отражает не факт достижения цели, а «степень уверенности» в её достижимости;&lt;/li&gt;
    &lt;li id=&quot;D1kf&quot;&gt;можно фильтровать только наиболее надёжные сделки.&lt;/li&gt;
    &lt;li id=&quot;USbm&quot;&gt;снижается доля рискованных решений и минимизируется человеческий фактор.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;H6Zn&quot;&gt;Как используется нечёткая шкала&lt;/h3&gt;
  &lt;p id=&quot;I7la&quot;&gt;Вероятности переводятся на уровни нечёткой шкалы:&lt;/p&gt;
  &lt;figure id=&quot;h9EA&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8a/b9/8ab9f8f7-b0c3-496f-bc93-95763179a870.png&quot; width=&quot;668&quot; /&gt;
    &lt;figcaption&gt;Несущие множества для уровней нечёткой шкалы вероятностей&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;nO5w&quot;&gt;Несущие множества приблизительные и могут пересекаться. Для корректной интерпретации используется «фазификация» — оценка степени принадлежности к каждому уровню.&lt;/p&gt;
  &lt;p id=&quot;7i3Q&quot;&gt;Сама универсальная нечёткая измерительная шкала при этом может выглядеть так:&lt;/p&gt;
  &lt;figure id=&quot;IYeL&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7d/6f/7d6fc182-b90b-4601-9321-ba19d0fa8381.png&quot; width=&quot;400&quot; /&gt;
    &lt;figcaption&gt;Универсальная нечёткая измерительная шкала с уровнями: Min — «минимальное», Low — «низкое», Med — «среднее», High — «высокое», Max — «максимальное» значение. Для её построения используются несущие множества и различные виды функций принадлежности: гиперболическая, колоколообразные и параболическая&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;r6TC&quot;&gt;Фильтрация силы сигналов&lt;/h3&gt;
  &lt;p id=&quot;zTYN&quot;&gt;Имея нечёткую оценку силы сигнала её легко скорректировать в зависимости от вероятности достижимости цели:&lt;/p&gt;
  &lt;figure id=&quot;ZhJX&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cc/28/cc28f3d7-7dc7-42cf-9664-3f8f9fc4b03c.png&quot; width=&quot;680&quot; /&gt;
    &lt;figcaption&gt;Коррекция силы сигнала в зависимости от вероятности&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;uKxj&quot;&gt;Пример простейшего фильтра сигналов:&lt;/p&gt;
  &lt;pre id=&quot;9hSh&quot;&gt;signalFilter = {
    &amp;quot;Max&amp;quot;: {&amp;quot;Max&amp;quot;: &amp;quot;Max&amp;quot;, &amp;quot;High&amp;quot;: &amp;quot;High&amp;quot;, &amp;quot;Med&amp;quot;: &amp;quot;Med&amp;quot;, &amp;quot;Low&amp;quot;: &amp;quot;Low&amp;quot;, &amp;quot;Min&amp;quot;: &amp;quot;Min&amp;quot;},
    &amp;quot;High&amp;quot;: {&amp;quot;Max&amp;quot;: &amp;quot;High&amp;quot;, &amp;quot;High&amp;quot;: &amp;quot;Med&amp;quot;, &amp;quot;Med&amp;quot;: &amp;quot;Low&amp;quot;, &amp;quot;Low&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;Min&amp;quot;: &amp;quot;Min&amp;quot;},
    &amp;quot;Med&amp;quot;: {&amp;quot;Max&amp;quot;: &amp;quot;Med&amp;quot;, &amp;quot;High&amp;quot;: &amp;quot;Low&amp;quot;, &amp;quot;Med&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;Low&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;Min&amp;quot;: &amp;quot;Min&amp;quot;},
    &amp;quot;Low&amp;quot;: {&amp;quot;Max&amp;quot;: &amp;quot;Low&amp;quot;, &amp;quot;High&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;Med&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;Low&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;Min&amp;quot;: &amp;quot;Min&amp;quot;},
    &amp;quot;Min&amp;quot;: {&amp;quot;Max&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;High&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;Med&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;Low&amp;quot;: &amp;quot;Min&amp;quot;, &amp;quot;Min&amp;quot;: &amp;quot;Min&amp;quot;},
}&lt;/pre&gt;
  &lt;h2 id=&quot;wgCy&quot;&gt;Практическое использование алгоритма&lt;/h2&gt;
  &lt;p id=&quot;mWKd&quot;&gt;Торговая система, построенная на вероятностной оценке достижимости цели и нечётких шкалах:&lt;/p&gt;
  &lt;ul id=&quot;GSvf&quot;&gt;
    &lt;li id=&quot;pD5k&quot;&gt;очищает данные от выбросов;&lt;/li&gt;
    &lt;li id=&quot;679o&quot;&gt;оценивает достижимость целей по реальным статистикам;&lt;/li&gt;
    &lt;li id=&quot;vwmD&quot;&gt;принимает решения осторожно, опираясь на вероятность, а не на жёсткие прогнозы;&lt;/li&gt;
    &lt;li id=&quot;Ueay&quot;&gt;управляет сделками и капиталом в рамках заданных правил.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;frUR&quot;&gt;Такой подход:&lt;/p&gt;
  &lt;ul id=&quot;lCJk&quot;&gt;
    &lt;li id=&quot;vtd9&quot;&gt;повышает надёжность торговых решений;&lt;/li&gt;
    &lt;li id=&quot;sA5f&quot;&gt;уменьшает долю случайных ошибок и снижает воздействие человеческого фактора;&lt;/li&gt;
    &lt;li id=&quot;xcEz&quot;&gt;системно контролирует риски;&lt;/li&gt;
    &lt;li id=&quot;DEt0&quot;&gt;динамически адаптируется к изменяющимся условиям реального рынка.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Xm1t&quot;&gt;Инженерный трейдинг — это не про догадки. Это работа с неопределённостью аккуратными математическими средствами: статистикой, вероятностями, нечёткими множествами и строгими правилами. На основе описанного алгоритма были созданы сервисы для автоматической генерации торговых сигналов и трейдинговый бот для работы на бирже.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;TUwh&quot;&gt;🔗 Полезные ссылки&lt;/h3&gt;
  &lt;ul id=&quot;gupm&quot;&gt;
    &lt;li id=&quot;h7G5&quot;&gt;🌐 Полный FAQ по сигналам и описание методик FMA: &lt;a href=&quot;https://fuzzy-technologies.github.io/FMA/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/FMA&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;JaKw&quot;&gt;⚙️ Платформа TKSBrokerAPI: &lt;a href=&quot;https://fuzzy-technologies.github.io/TKSBrokerAPI/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/TKSBrokerAPI&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;p0MI&quot;&gt;📡 Подписка на биржевые сигналы: &lt;a href=&quot;https://web.tribute.tg/s/nub&quot; target=&quot;_blank&quot;&gt;web.tribute.tg/s/nub&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;7rB7&quot;&gt;&lt;strong&gt;Дополнительные материалы к статье&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;OjkJ&quot;&gt;
    &lt;li id=&quot;rY9n&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/fuzzy-scales&quot; target=&quot;_blank&quot;&gt;«Что такое нечёткие измерительные шкалы»&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;gPOe&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/hampel-anomalies-filtering&quot; target=&quot;_blank&quot;&gt;«Как находить аномалии в числовых рядах»&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;pf8w&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/target-probability&quot; target=&quot;_blank&quot;&gt;«Как оценить вероятность достижения цели»&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;ijGm&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/trading-algorithm-history&quot; target=&quot;_blank&quot;&gt;«Через тернии к звёздам: история создания торгового алгоритма»&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;tt-tags id=&quot;Dydm&quot;&gt;
    &lt;tt-tag name=&quot;математика&quot;&gt;#математика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;datascience&quot;&gt;#datascience&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;финансы&quot;&gt;#финансы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;статистика&quot;&gt;#статистика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;вероятность&quot;&gt;#вероятность&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;риски&quot;&gt;#риски&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;оценка&quot;&gt;#оценка&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;роботы&quot;&gt;#роботы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;алгоритмы&quot;&gt;#алгоритмы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;нечёткие_шкалы&quot;&gt;#нечёткие_шкалы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;торговля&quot;&gt;#торговля&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;money_management&quot;&gt;#money_management&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>tgilmullin:target-probability</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/target-probability?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>Достигнет ли цена цели: оценка вероятности вместо гадания</title><published>2025-04-12T14:58:09.573Z</published><updated>2025-06-22T19:14:38.512Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/1f/4a/1f4afe46-6c21-4d86-9745-3ef9b98f116b.png"></media:thumbnail><tt:hashtag>математика</tt:hashtag><tt:hashtag>datascience</tt:hashtag><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>финансы</tt:hashtag><tt:hashtag>статистика</tt:hashtag><tt:hashtag>вероятность</tt:hashtag><tt:hashtag>цели</tt:hashtag><tt:hashtag>риски</tt:hashtag><tt:hashtag>оценка</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/10/67/1067de3b-104c-4871-8ef1-b52b8a3afa88.png&quot;&gt;Как понять, дойдёт ли цена до цели, а не гадать? На реальных рынках цена двигается непредсказуемо: шум, выбросы и нестабильность. Прежде чем принимать торговое решение, лучше не просто гадать, а оценить вероятность достижения прогнозного целевого уровня.</summary><content type="html">
  &lt;figure id=&quot;Jlbl&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/10/67/1067de3b-104c-4871-8ef1-b52b8a3afa88.png&quot; width=&quot;1536&quot; /&gt;
    &lt;figcaption&gt;Вероятная невероятность или невероятная вероятность!&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;t7Ml&quot;&gt;В этой статье:&lt;/p&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#1BGs&quot;&gt;Почему нельзя просто сказать «достигнет» или «не достигнет»&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#raNW&quot;&gt;Задача оценки вероятности достижения цели&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#QyN9&quot;&gt;Как оценивается вероятность достижения цели&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#YrQw&quot;&gt;Почему не стоит оценивать вероятность только числом&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#SVqP&quot;&gt;Практическая применимость оценки&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#TUwh&quot;&gt;🔗 Полезные ссылки&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;p id=&quot;Iskb&quot;&gt;В реальных задачах анализа данных и трейдинга часто требуется понять: насколько вероятно, что цена биржевого актива достигнет определённого или заранее заданного уровня. Это одна из ключевых задач алгоритмической торговли и риск-менеджмента, потому что помогает отфильтровать нереалистичные сигналы на открытие позиции по активу. Простой прогноз вроде «достигнет / не достигнет» здесь работает плохо: рынок нестабилен, подвержен случайным колебаниям, шуму и аномальным ценовым выбросам.&lt;/p&gt;
  &lt;p id=&quot;ldhu&quot;&gt;Поэтому вместо жёстких предсказаний целесообразно строить вероятностную оценку достижения цели. Для этого используются разные методы:&lt;/p&gt;
  &lt;ul id=&quot;Hc8l&quot;&gt;
    &lt;li id=&quot;l4Ui&quot;&gt;традиционные прогнозные модели (например, линейная регрессия и ARIMA);&lt;/li&gt;
    &lt;li id=&quot;YfIp&quot;&gt;машинное обучение и нейросети;&lt;/li&gt;
    &lt;li id=&quot;WkS0&quot;&gt;статистический подход: анализ распределения изменения цены и оценка вероятности достижения целевого уровня.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;vMRB&quot;&gt;Этот третий способ проще, легче объясним и надёжнее в условиях реальных зашумлённых данных. В том числе он хорошо подходит для автоматизированных сигнальных систем, где нужна быстрая оценка достижимости без «тяжёлых» моделей.&lt;/p&gt;
  &lt;h2 id=&quot;1BGs&quot;&gt;Почему нельзя просто сказать «достигнет» или «не достигнет»&lt;/h2&gt;
  &lt;p id=&quot;dJ8C&quot;&gt;На реальных рынках данные зашумлены, то есть имеют:&lt;/p&gt;
  &lt;ul id=&quot;TMBq&quot;&gt;
    &lt;li id=&quot;lMR6&quot;&gt;случайные всплески цен;&lt;/li&gt;
    &lt;li id=&quot;aBZv&quot;&gt;редкие экстремальные выбросы;&lt;/li&gt;
    &lt;li id=&quot;EnCt&quot;&gt;сбои в поставке котировок.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;YjP2&quot;&gt;Такие выбросы могут сильно исказить оценку — единичный «прокол уровня» на тонком рынке не означает, что цена стабильно достигает целей. Поэтому перед оценкой вероятности данные очищаются от аномалий, чтобы убрать влияние редких случайных всплесков.&lt;/p&gt;
  &lt;p id=&quot;Z8Ir&quot;&gt;Один из методов очистки — фильтрация методом Хампеля, о чём было написано в &lt;a href=&quot;https://teletype.in/@tgilmullin/hampel-anomalies-filtering&quot; target=&quot;_blank&quot;&gt;предыдущей статье&lt;/a&gt;. После фильтрации уже можно работать с очищенным рядом ценовых изменений и строить корректные оценки вероятности. Вместо аномального значения цены, можно использовать, например, среднее её двух соседей по ряду.&lt;/p&gt;
  &lt;h2 id=&quot;raNW&quot;&gt;Задача оценки вероятности достижения цели&lt;/h2&gt;
  &lt;p id=&quot;xFQC&quot;&gt;В качестве исходных данных используются исторические цены закрытия (close) стандартных биржевых свечей OHLCV (open, high, low, close, volume), представленные пятиминутными и часовыми интервалами (на самом деле, может быть выбрана любая пара таймфреймов). Значение цели, достижимость которой мы анализируем, может быть получено в результате внешнего прогноза (техническим или фундаментальным анализом) или задано как предположение эксперта без строгого обоснования.&lt;/p&gt;
  &lt;figure id=&quot;kZJd&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/89/da/89da228d-c01f-4a1e-8fb3-2fae16dc12e1.png&quot; width=&quot;851&quot; /&gt;
    &lt;figcaption&gt;Схематичное представление задачи: находясь в некотором моменте времени &lt;em&gt;Cₜ&lt;/em&gt; мы не знаем точно, как поведёт себя цена, а оцениваем лишь вероятность достижения целевого уровня на горизонта прогноза &lt;em&gt;H&lt;/em&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;PSq7&quot;&gt;Задача заключается в оценке интегральной вероятности достижения активом целевой цены от текущей цены Cₜ на заданном горизонте H свечей с помощью анализа числовых рядов значений цен актива для двух таймфреймов: пятиминутных C₅ₘ(t) и часовых C₁ₕ(t). Схематично постановка задачи представлена на рисунке.&lt;/p&gt;
  &lt;h2 id=&quot;QyN9&quot;&gt;Как оценивается вероятность достижения цели&lt;/h2&gt;
  &lt;p id=&quot;1uiu&quot;&gt;Чтобы оценить вероятность достижения ценой заданного уровня, используется следующий подход.&lt;/p&gt;
  &lt;ol id=&quot;Mr2A&quot;&gt;
    &lt;li id=&quot;WZk4&quot;&gt;Берём исторические данные: составляем числовые ряды из цен закрытия пятиминутных и часовых свечей.&lt;/li&gt;
    &lt;li id=&quot;uvvD&quot;&gt;Очищаем данные от выбросов, чтобы убрать аномальные скачки. Используем фильтрацию по Хампелю.&lt;/li&gt;
    &lt;li id=&quot;bchz&quot;&gt;Определяем начальную цену — ту, от которой будут выполняться все расчёты достижимости целевого уровня.&lt;/li&gt;
    &lt;li id=&quot;TtNq&quot;&gt;Рассчитываем различные статистики изменения цен за выбранные интервалы времени:&lt;br /&gt;   • логарифмические доходности;&lt;br /&gt;   • средние доходности;&lt;br /&gt;   • среднеквадратичное отклонение доходностей (волатильность);&lt;br /&gt;   • стандартизированное отклонение.&lt;/li&gt;
    &lt;li id=&quot;k7e8&quot;&gt;Используя функцию стандартного нормального распределения от значения стандартизированного отклонения — получаем вероятность того, что цена с нормальным распределением превысит целевой уровень.&lt;/li&gt;
    &lt;li id=&quot;Pw9x&quot;&gt;Далее строим агрегированные оценки достижимости для разных таймфреймов и затем интегральную оценку (в виде числа или нечёткого уровня).&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;8cmi&quot;&gt;Алгоритм выше описан только общими словами, без использования формул, чтобы не усложнять понимание метода.&lt;/p&gt;
  &lt;h3 id=&quot;YrQw&quot;&gt;Почему не стоит оценивать вероятность только числом&lt;/h3&gt;
  &lt;p id=&quot;6FnF&quot;&gt;Иногда точная числовая вероятность (например, 74.3%) даёт ложное ощущение уверенности — число создаёт иллюзию точности там, где есть неопределённость. На практике полезно использовать нечёткие шкалы вероятностей, особенно если данные нестабильные или неполные.&lt;/p&gt;
  &lt;p id=&quot;g0n1&quot;&gt;Нечёткие шкалы — разновидность качественных или уровневых шкал, где каждый уровень определяется некоторой лингвистической переменной (именованным нечётким множеством).&lt;/p&gt;
  &lt;p id=&quot;B5U6&quot;&gt;Вместо точного числа можно указать уровень вероятности:&lt;/p&gt;
  &lt;ul id=&quot;MMRO&quot;&gt;
    &lt;li id=&quot;SWOh&quot;&gt;«низкая вероятность»;&lt;/li&gt;
    &lt;li id=&quot;3t5H&quot;&gt;«средняя вероятность»;&lt;/li&gt;
    &lt;li id=&quot;PCSy&quot;&gt;«высокая вероятность».&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;tKTq&quot;&gt;Такой подход:&lt;/p&gt;
  &lt;ul id=&quot;Edxd&quot;&gt;
    &lt;li id=&quot;pAXm&quot;&gt;лучше воспринимается человеком;&lt;/li&gt;
    &lt;li id=&quot;9SX6&quot;&gt;отражает реальную неопределённость;&lt;/li&gt;
    &lt;li id=&quot;zd1D&quot;&gt;помогает строить более устойчивые автоматизированные системы принятия торговых решений.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;45Md&quot;&gt;Подробнее о нечётких шкалах и оценку с их использованием было рассказано в одной из &lt;a href=&quot;https://teletype.in/@tgilmullin/fuzzy-scales&quot; target=&quot;_blank&quot;&gt;предыдущих статей&lt;/a&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;SVqP&quot;&gt;Практическая применимость оценки&lt;/h2&gt;
  &lt;p id=&quot;bmMX&quot;&gt;Вероятностная оценка достижения цели — это не попытка угадать будущее, а инженерный способ оценить разумные границы достижения уровня цены на основе реальных данных.&lt;/p&gt;
  &lt;p id=&quot;9Uke&quot;&gt;Очищая исторические данные от выбросов и анализируя их статистические распределения, можно:&lt;/p&gt;
  &lt;ul id=&quot;WhTR&quot;&gt;
    &lt;li id=&quot;TMWn&quot;&gt;построить корректные вероятностные модели;&lt;/li&gt;
    &lt;li id=&quot;s6Hj&quot;&gt;сделать вывод о достижимости цели в реальных условиях;&lt;/li&gt;
    &lt;li id=&quot;zXCH&quot;&gt;выбрать более надёжные сценарии для торговли.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;bE4n&quot;&gt;Преимущество вероятностного подхода заключается в том, что:&lt;/p&gt;
  &lt;ul id=&quot;S7I2&quot;&gt;
    &lt;li id=&quot;fswU&quot;&gt;не требуется сложных обучающих процедур или громоздких моделей машинного обучения;&lt;/li&gt;
    &lt;li id=&quot;TVnD&quot;&gt;оценка проводится быстро, на основе элементарных статистик;&lt;/li&gt;
    &lt;li id=&quot;g7Jr&quot;&gt;алгоритм адаптивен и универсален, так как основан на данных о ценах закрытия, которые доступны на любой бирже для любых таймфреймов;&lt;/li&gt;
    &lt;li id=&quot;qp6q&quot;&gt;подход легко реализуется на любом языке программирования для использования в автоматических сигнальных системах;&lt;/li&gt;
    &lt;li id=&quot;bAPz&quot;&gt;метод хорошо интегрируется с алгоритмами автоматизации генерации торговых сигналов и системами поддержки принятия торговых решений.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;pKR8&quot;&gt;Интегральную оценку достижимости целевой цены можно дать как в виде числа, так и на нечётких шкалах. Числовая оценка удобна для использования в трейдинговых алгоритмах, а нечёткая оценка легче воспринимается экспертами.&lt;/p&gt;
  &lt;p id=&quot;Qeo3&quot;&gt;Это делает вероятностную оценку достижения цели удобным инструментом как для ручной аналитики, так и для алгоритмической торговли.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;TUwh&quot;&gt;🔗 Полезные ссылки&lt;/h3&gt;
  &lt;ul id=&quot;gupm&quot;&gt;
    &lt;li id=&quot;h7G5&quot;&gt;🌐 Полный FAQ по сигналам и описание методик FMA: &lt;a href=&quot;https://fuzzy-technologies.github.io/FMA/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/FMA&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;JaKw&quot;&gt;⚙️ Платформа TKSBrokerAPI: &lt;a href=&quot;https://fuzzy-technologies.github.io/TKSBrokerAPI/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/TKSBrokerAPI&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;p0MI&quot;&gt;📡 Подписка на биржевые сигналы: &lt;a href=&quot;https://web.tribute.tg/s/nub&quot; target=&quot;_blank&quot;&gt;web.tribute.tg/s/nub&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Vh6n&quot;&gt;&lt;strong&gt;Дополнительные материалы к статье&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;LDbM&quot;&gt;
    &lt;li id=&quot;kl1J&quot;&gt;&lt;a href=&quot;https://moitvivt.ru/ru/journal/pdf?id=1905&quot; target=&quot;_blank&quot;&gt;«Статистическая оценка вероятности достижения целевой цены на основе волатильности и доходности на разных таймфреймах»&lt;/a&gt; (2025)&lt;/li&gt;
    &lt;li id=&quot;AbPm&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/hampel-anomalies-filtering&quot; target=&quot;_blank&quot;&gt;«Быстрый поиск аномалий в числовых рядах без сложных моделей: метод Хампеля»&lt;/a&gt; (2025)&lt;/li&gt;
    &lt;li id=&quot;xFhh&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/fuzzy-scales&quot; target=&quot;_blank&quot;&gt;«Когда «да» и «нет» недостаточно: как работают нечёткие шкалы»&lt;/a&gt; (2025)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;tt-tags id=&quot;e4oU&quot;&gt;
    &lt;tt-tag name=&quot;математика&quot;&gt;#математика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;datascience&quot;&gt;#datascience&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;финансы&quot;&gt;#финансы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;статистика&quot;&gt;#статистика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;вероятность&quot;&gt;#вероятность&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;цели&quot;&gt;#цели&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;риски&quot;&gt;#риски&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;оценка&quot;&gt;#оценка&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>tgilmullin:hampel-anomalies-filtering</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/hampel-anomalies-filtering?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>Быстрый поиск аномалий в числовых рядах без сложных моделей: метод Хампеля</title><published>2025-04-11T19:23:58.760Z</published><updated>2025-06-22T19:16:42.193Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/e8/e2/e8e292b2-80b5-4ed6-912f-00504dfb0483.png"></media:thumbnail><tt:hashtag>математика</tt:hashtag><tt:hashtag>datascience</tt:hashtag><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>аномалии</tt:hashtag><tt:hashtag>хампель</tt:hashtag><tt:hashtag>фильтр</tt:hashtag><tt:hashtag>поиск</tt:hashtag><tt:hashtag>выбросы</tt:hashtag><tt:hashtag>статистика</tt:hashtag><tt:hashtag>hampel</tt:hashtag><tt:hashtag>statistics</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/97/4b/974bcf07-7bd8-4f28-bc2f-0e0825339241.png&quot;&gt;Автоматизируя обработку числовых данных в датасайенсе, трейдинге и кибербезопасности, мы часто сталкиваемся с задачей нахождения «аномальных» значений, которые нарушают общую картину...</summary><content type="html">
  &lt;figure id=&quot;wmoJ&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/97/4b/974bcf07-7bd8-4f28-bc2f-0e0825339241.png&quot; width=&quot;1536&quot; /&gt;
    &lt;figcaption&gt;Аномалии — они повсюду вокруг нас!&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;zbDK&quot;&gt;В этой статье:&lt;/p&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#z60q&quot;&gt;Идея метода Хампеля для борьбы с выбросами&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#Jn3n&quot;&gt;Суть метода Хампеля&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#CctA&quot;&gt;Проверка элемента ряда на аномальность&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#mzIf&quot;&gt;Как работает модифицированный метод Хампеля&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#3wKP&quot;&gt;Примеры работы фильтра Хампеля&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#N6jd&quot;&gt;Поиск индекса первого аномального элемента&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#rzaW&quot;&gt;Где применяется метод Хампеля&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#TUwh&quot;&gt;🔗 Полезные ссылки&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;p id=&quot;Eq8I&quot;&gt;Автоматизируя обработку числовых данных в датасайенсе, трейдинге и кибербезопасности, мы часто сталкиваемся с задачей нахождения выбросов — «аномальных» значений, которые нарушают общую картину. Выбросы в реальных данных встречаются постоянно: ошибки измерений, сетевые сбои, редкие пики цен или всплески активности на рынках. Всё это создаёт аномалии, которые искажают результаты анализа, могут ухудшать обучение моделей и приводить к неверным выводам.&lt;/p&gt;
  &lt;p id=&quot;s0bz&quot;&gt;Прежде чем строить сложные модели машинного обучения или принимать торговые решения, важно очистить данные от очевидных выбросов. Чтобы быстро и надёжно фильтровать аномалии без использования сложных моделей, применяют метод Хампеля — простой способ автоматической очистки данных. В этой статье объясняем, как он работает, и как использовать его на практике.&lt;/p&gt;
  &lt;h2 id=&quot;z60q&quot;&gt;Идея метода Хампеля для борьбы с выбросами&lt;/h2&gt;
  &lt;p id=&quot;h1wG&quot;&gt;Почему обычные методы плохо справляются с выбросами? Часто для анализа числовых рядов используют среднее значение и стандартное отклонение (показатель разброса данных). Однако даже один большой выброс может сильно сместить среднее и увеличить разброс, делая всю статистику ненадёжной.&lt;/p&gt;
  &lt;p id=&quot;p5kZ&quot;&gt;Пример: ряд чисел [10, 10, 10, 10, 1000].&lt;/p&gt;
  &lt;p id=&quot;zUrT&quot;&gt;Среднее: 208, хотя 4 из 5 значений — 10. Это происходит потому, что среднее чувствительно к выбросам.&lt;/p&gt;
  &lt;p id=&quot;FfwH&quot;&gt;Чтобы бороться с ними, Хампель предложил использовать устойчивую меру: медиану — значение, которое делит упорядоченный ряд пополам.&lt;/p&gt;
  &lt;ul id=&quot;UQs1&quot;&gt;
    &lt;li id=&quot;Y1Si&quot;&gt;Пример: в ряду [1, 3, 6] медиана = 3.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;u1Fe&quot;&gt;Также используется медианное абсолютное отклонение (MAD) — медиана отклонений элементов ряда от его медианы.&lt;/p&gt;
  &lt;ul id=&quot;McEo&quot;&gt;
    &lt;li id=&quot;SEnS&quot;&gt;Пример: для ряда [1, 3, 6] — медиана = 3, отклонения [2, 0, 3], медиана отклонений равна 2 (упорядочиваем отклонения [0, 2, 3] и берём центральный элемент).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ytdW&quot;&gt;Более формально значение MAD определяется так:&lt;/p&gt;
  &lt;p id=&quot;C5G4&quot;&gt;&lt;strong&gt;MAD(X) = Median(|x₁ − Median(X)|, …, |xₙ − Median(X)|)&lt;/strong&gt;,&lt;/p&gt;
  &lt;p id=&quot;GWQz&quot;&gt;где X — выборка из n наблюдений x₁, …, xₙ.&lt;/p&gt;
  &lt;h3 id=&quot;Jn3n&quot;&gt;Суть метода Хампеля&lt;/h3&gt;
  &lt;p id=&quot;1uhK&quot;&gt;Базовый алгоритм:&lt;/p&gt;
  &lt;ol id=&quot;ak45&quot;&gt;
    &lt;li id=&quot;A9Ki&quot;&gt;Для каждого элемента ряда берём соседей в скользящем окне (например, из 5 элементов).&lt;/li&gt;
    &lt;li id=&quot;KO6r&quot;&gt;Вычисляем медиану и MAD среди этих соседей.&lt;/li&gt;
    &lt;li id=&quot;NCTq&quot;&gt;Если отклонение текущего элемента от медианы больше порогового значения (обычно 3 × MAD), элемент считается выбросом.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;TmE0&quot;&gt;Более формально, по Хампелю: выброс (outlier) определяется как число x из выборки X, модуль разности которого и медианы выборки больше, чем MAD выборки, умноженное на специальный коэффициент k (scale factor), зависящий от распределения (≈1.4826 для нормального).&lt;/p&gt;
  &lt;p id=&quot;PsQ9&quot;&gt;На практике для построения фильтра выбросов Хампеля это определение модифицируется с использованием скользящих окон (sliding windows) и параметра s (sigma), порогового количества стандартных отклонений. Это значит, что медиана и MAD вычисляются для всех скользящих окон, состоящих из элементов выборки. Далее все модули разности элементов выборки и медианы сравниваются с MAD, умноженный на коэффициент k и умноженный на параметр s. Более высокий порог s стандартного отклонения делает фильтр более щадящим, более низкий порог идентифицирует больше чисел как выбросы.&lt;/p&gt;
  &lt;h3 id=&quot;CctA&quot;&gt;Проверка элемента ряда на аномальность&lt;/h3&gt;
  &lt;p id=&quot;mjSi&quot;&gt;Под аномалией (anomaly) числового ряда понимается такое число x из ряда X, которое по модулю отличается от медианы скользящего окна более чем в s раз от MAD этого окна, умноженного на коэффициент k.&lt;/p&gt;
  &lt;p id=&quot;alt3&quot;&gt;Все аномалии ряда образуют некоторое его подмножество A:&lt;/p&gt;
  &lt;p id=&quot;zLTw&quot;&gt;&lt;strong&gt;A = {a | |a − Median(Xᵢ)| &amp;gt; s ∙ k ∙ MAD(Xᵢ)}&lt;/strong&gt;,&lt;/p&gt;
  &lt;p id=&quot;3s6j&quot;&gt;где a — аномальный элемент из X, Х — исходный числовой ряд, Xᵢ — ряд чисел i-го скользящего окна, всего окон: (n − w + 1), где w — размер окна.&lt;/p&gt;
  &lt;p id=&quot;fiBJ&quot;&gt;Иными словами: ищем точки, которые сильно выбиваются из локальной медианы.&lt;/p&gt;
  &lt;p id=&quot;2dju&quot;&gt;Фильтр аномалий числового ряда определяется как функция:&lt;/p&gt;
  &lt;p id=&quot;BDlR&quot;&gt;&lt;strong&gt;F: X → {True, False}.  F (xᵢ) = True, если xᵢ ∈ A; False, если xᵢ ∉ A.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;3oBV&quot;&gt;Здесь Х — исходный числовой ряд, состоящий из n элементов xᵢ, A — множество аномалий.&lt;/p&gt;
  &lt;p id=&quot;dYUe&quot;&gt;Простыми словами, проверка элемента ряда на аномальность выполняется так:&lt;/p&gt;
  &lt;ul id=&quot;1g7Z&quot;&gt;
    &lt;li id=&quot;bHEM&quot;&gt;сначала считаем «типичное» значение точек (медиану) в соседях.&lt;/li&gt;
    &lt;li id=&quot;veQf&quot;&gt;сравниваем, насколько далеко от медианы расположена текущая точка, чем её соседи.&lt;/li&gt;
    &lt;li id=&quot;OJZv&quot;&gt;если далеко — это аномалия.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;mzIf&quot;&gt;Как работает модифицированный метод Хампеля&lt;/h3&gt;
  &lt;p id=&quot;iodj&quot;&gt;Метод Хампеля был адаптирован для реальных практических задач:&lt;/p&gt;
  &lt;ul id=&quot;6q7O&quot;&gt;
    &lt;li id=&quot;x2PN&quot;&gt;используются скользящие окна фиксированного размера w для локальной оценки;&lt;/li&gt;
    &lt;li id=&quot;Nh7X&quot;&gt;добавлен настраиваемый порог s — сколько отклонений считать допустимыми;&lt;/li&gt;
    &lt;li id=&quot;hcqu&quot;&gt;введён масштабирующий коэффициент k для нормализации MAD;&lt;/li&gt;
    &lt;li id=&quot;7oRD&quot;&gt;метод адаптирован для возможности детекта аномалий в первом и последнем элементах числового ряда.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;YN8b&quot;&gt;Всё это реализовано на языке Python в функции фильтрации HampelFilter() и в функции детекта аномалий HampelAnomalyDetection() из библиотеки &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/tksbrokerapi/TradeRoutines.py&quot; target=&quot;_blank&quot;&gt;TradeRoutines&lt;/a&gt; платформы ⚙️&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop&quot; target=&quot;_blank&quot;&gt;TKSBrokerAPI&lt;/a&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;3wKP&quot;&gt;Примеры работы фильтра Хампеля&lt;/h2&gt;
  &lt;p id=&quot;A8v7&quot;&gt;Фильтр-функция HampelFilter() обнаруживает аномалии, определяемые согласно определению выше. Настраиваемые параметры в ней:&lt;/p&gt;
  &lt;ul id=&quot;JPfP&quot;&gt;
    &lt;li id=&quot;NuHU&quot;&gt;window (переменная w из формул выше) — размер скользящего окна (по умолчанию 5);&lt;/li&gt;
    &lt;li id=&quot;zH69&quot;&gt;sigma (переменная s) — пороговое количество стандартных отклонений (по умолчанию 3);&lt;/li&gt;
    &lt;li id=&quot;IGge&quot;&gt;scaleFactor (переменная k) — специальный коэффициент, зависящий от распределения ряда (по умолчанию 1.4826).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;w6zR&quot;&gt;Функция фильтрации возвращает новый ряд F, состоящий из значений True или False, где True означает наличие аномального элемента на соответствующей позиции в исходном списке чисел.&lt;/p&gt;
  &lt;p id=&quot;pTqQ&quot;&gt;Например, в списке чисел [10, 10, 10, 10, 1000]:&lt;/p&gt;
  &lt;ul id=&quot;ZL2M&quot;&gt;
    &lt;li id=&quot;18FA&quot;&gt;Медиана = 10;&lt;/li&gt;
    &lt;li id=&quot;t9wU&quot;&gt;MAD = 0;&lt;/li&gt;
    &lt;li id=&quot;pKpr&quot;&gt;1000 — явный выброс;&lt;/li&gt;
    &lt;li id=&quot;xAog&quot;&gt;Фильтр корректно определит это число как аномалию: F = [False, False, False, False, True] — True на последней позиции говорит именно об этом.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;gvfL&quot;&gt;Примеры входных данных и результатов фильтрации, &lt;strong&gt;HampelFilter(window=5, sigma=3, scaleFactor=1.4826)&lt;/strong&gt;:&lt;/p&gt;
  &lt;figure id=&quot;qgBU&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/31/84/3184b30b-8e8d-4c5f-b355-cb520fcbb9cf.png&quot; width=&quot;625&quot; /&gt;
    &lt;figcaption&gt;Фильтрация списка чисел с окном 5&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;T5Nl&quot;&gt;Примеры входных данных и результатов фильтрации, &lt;strong&gt;HampelFilter(window=3, sigma=3, scaleFactor=1.4826)&lt;/strong&gt;:&lt;/p&gt;
  &lt;figure id=&quot;Vabf&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/63/4e/634e9407-2dc3-4359-b9cb-38bc3cc7f912.png&quot; width=&quot;692&quot; /&gt;
    &lt;figcaption&gt;Фильтрация списка чисел с окном 3&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;N6jd&quot;&gt;Поиск индекса первого аномального элемента&lt;/h2&gt;
  &lt;p id=&quot;4t8N&quot;&gt;На практике часто бывает нужно определить только первый аномальный или первый среди наибольших в числовом ряду элемент. Для этого используется функция HampelAnomalyDetection(). Она возвращает минимальный индекс элемента в списке найденных аномалий или индекс первого максимального элемента во входном ряду, если его индекс меньше индекса аномального элемента. Если в числовом ряду нет аномалий или все элементы равны (нет максимумов), то значение функции не определено (None). &lt;/p&gt;
  &lt;p id=&quot;CWCw&quot;&gt;Проще говоря, функция ищет самую первую «подозрительную» точку в ряду.&lt;/p&gt;
  &lt;p id=&quot;0EZz&quot;&gt;Примеры входных данных и результатов, &lt;strong&gt;HampelAnomalyDetection()&lt;/strong&gt;:&lt;/p&gt;
  &lt;figure id=&quot;DAqa&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9a/f6/9af6971f-874c-43c9-97f8-7c2b7f3a75f5.png&quot; width=&quot;411&quot; /&gt;
    &lt;figcaption&gt;Поиск аномалий с помощью функции HampelAnomalyDetection() со значениями по умолчанию&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;rzaW&quot;&gt;Где применяется метод Хампеля&lt;/h2&gt;
  &lt;p id=&quot;GG4W&quot;&gt;&lt;strong&gt;В кибербезопасности&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;eXG6&quot;&gt;При мониторинге сетевых событий метод Хампеля помогает обнаруживать подозрительные скачки активности без необходимости предварительного обучения моделей. Это полезно для систем раннего предупреждения о возможных атаках.&lt;/p&gt;
  &lt;p id=&quot;SdBM&quot;&gt;&lt;strong&gt;В анализе данных (Data Science)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;OncJ&quot;&gt;Фильтр позволяет очищать обучающие выборки для машинного обучения: автоматически удалять выбросы, которые портят модели. Это особенно важно, если данные собираются в реальном времени и могут содержать ошибки ввода, сетевые аномалии или сбои сенсоров.&lt;/p&gt;
  &lt;p id=&quot;SOkT&quot;&gt;&lt;strong&gt;В алгоритмическом трейдинге&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;XMfG&quot;&gt;Метод Хампеля используется для фильтрации аномалий в потоках биржевых данных (ценах, объёмах сделок, параметрах свечей OHLCV). Это позволяет автоматически исключать случайные выбросы — например, редкие пики цены из-за ошибки брокера или ложные всплески объёма — до передачи сигналов в торговый алгоритм. Фильтрация помогает торговому роботу избегать ложных входов и уменьшает количество ошибочных сделок.&lt;/p&gt;
  &lt;p id=&quot;OEnD&quot;&gt;Этот метод применяется в реальном времени для быстрой предобработки потоков котировок, подготовки данных для алгоритмов оценки вероятности достижения цены и для фильтрации аномалий перед построением торговых сигналов.&lt;/p&gt;
  &lt;p id=&quot;7bKv&quot;&gt;В нашем проекте по автоматизации трейдинга и выдаче торговых сигналов он используется как базовый фильтр:&lt;/p&gt;
  &lt;ul id=&quot;gx4Y&quot;&gt;
    &lt;li id=&quot;E5gk&quot;&gt;очищает поток цен от случайных выбросов, ищет аномалии в биржевом стакане;&lt;/li&gt;
    &lt;li id=&quot;H2Ft&quot;&gt;очищает исторические данные для оценки вероятности достижения целей;&lt;/li&gt;
    &lt;li id=&quot;MXdo&quot;&gt;позволяет алгоритмам работать более устойчиво в реальных рыночных условиях.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;FOYV&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c3/4e/c34e95b5-2c3c-47de-969d-9c6fa426f86d.png&quot; width=&quot;1768&quot; /&gt;
    &lt;figcaption&gt;Фильтрация аномальных OHLCV-свечей модифицированным методом Хампеля и выявление аномалий в стакане цен&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;NR24&quot;&gt;Таким образом, модифицированный метод Хампеля — это простой и эффективный инструмент для быстрого поиска аномалий в реальных числовых рядах. Этот метод — проверенное временем решение в инженерии обработки данных, которое помогает построить надёжный фундамент для более сложной обработки числовых рядов. Он прост в реализации, легко настраивается по чувствительности, адаптируется и масштабируется на большие объёмы данных. Это делает его отличным выбором для задач автоматического анализа биржевых цен, обработки временных рядов и предиктивной аналитики без необходимости строить сложные прогнозные модели.&lt;/p&gt;
  &lt;p id=&quot;fGO4&quot;&gt;Метод Хампеля — это не замена машинному обучению, а базовый фильтр, который улучшает качество любых моделей, работающих с данными. Его применение позволяет значительно повысить качество анализа автоматизированными системами и точность детекта аномалий в данных.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;TUwh&quot;&gt;🔗 Полезные ссылки&lt;/h3&gt;
  &lt;ul id=&quot;gupm&quot;&gt;
    &lt;li id=&quot;h7G5&quot;&gt;🌐 Полный FAQ по сигналам и описание методик FMA: &lt;a href=&quot;https://fuzzy-technologies.github.io/FMA/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/FMA&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;JaKw&quot;&gt;⚙️ Платформа TKSBrokerAPI: &lt;a href=&quot;https://fuzzy-technologies.github.io/TKSBrokerAPI/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/TKSBrokerAPI&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;p0MI&quot;&gt;📡 Подписка на биржевые сигналы: &lt;a href=&quot;https://web.tribute.tg/s/nub&quot; target=&quot;_blank&quot;&gt;web.tribute.tg/s/nub&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;0Ary&quot;&gt;&lt;strong&gt;Дополнительные материалы к статье&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;uqWV&quot;&gt;
    &lt;li id=&quot;w5C7&quot;&gt;&lt;a href=&quot;https://moitvivt.ru/ru/journal/pdf?id=1482&quot; target=&quot;_blank&quot;&gt;«Быстрый поиск аномалий в числовых рядах при помощи модифицированного метода Хампеля»&lt;/a&gt; (2023).&lt;/li&gt;
    &lt;li id=&quot;LC5j&quot;&gt;&lt;a href=&quot;https://www.kaggle.com/code/timurgilmullin/how-to-quickly-find-anomalies-in-number-series&quot; target=&quot;_blank&quot;&gt;Исследование на Kaggle&lt;/a&gt; (2023).&lt;/li&gt;
    &lt;li id=&quot;J6Wz&quot;&gt;&lt;a href=&quot;https://github.com/Tim55667757/PriceGenerator&quot; target=&quot;_blank&quot;&gt;Генератор тестовых биржевых данных PriceGenerator&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;mUxx&quot;&gt;&lt;a href=&quot;https://nbviewer.org/github/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/HampelFilteringExample.ipynb&quot; target=&quot;_blank&quot;&gt;Лабораторная работа по фильтрации аномалий методом Хампеля в Jupyter Notebook&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;IihT&quot;&gt;&lt;a href=&quot;https://tim55667757.github.io/TKSBrokerAPI/docs/tksbrokerapi/TradeRoutines&quot; target=&quot;_blank&quot;&gt;Код функции фильтрации аномалий методом Хампеля из библиотеки платформы ⚙️ TKSBrokerAPI&lt;/a&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;tt-tags id=&quot;smpY&quot;&gt;
    &lt;tt-tag name=&quot;математика&quot;&gt;#математика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;datascience&quot;&gt;#datascience&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;аномалии&quot;&gt;#аномалии&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;хампель&quot;&gt;#хампель&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;фильтр&quot;&gt;#фильтр&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;поиск&quot;&gt;#поиск&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;выбросы&quot;&gt;#выбросы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;статистика&quot;&gt;#статистика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;hampel&quot;&gt;#hampel&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;statistics&quot;&gt;#statistics&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>tgilmullin:fuzzy-scales</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/fuzzy-scales?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>Когда «да» и «нет» недостаточно: как работают нечёткие шкалы</title><published>2025-04-09T16:56:07.147Z</published><updated>2025-06-22T19:19:33.689Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/30/e5/30e5a0d9-2e6e-493a-b5a7-b179f3ce0da2.png"></media:thumbnail><tt:hashtag>математика</tt:hashtag><tt:hashtag>datascience</tt:hashtag><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>финансы</tt:hashtag><tt:hashtag>нечёткости</tt:hashtag><tt:hashtag>шкалы</tt:hashtag><tt:hashtag>риски</tt:hashtag><tt:hashtag>fuzzy</tt:hashtag><tt:hashtag>scales</tt:hashtag><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/c4/82/c4824957-a5c0-47c0-8911-b540c15d833f.png&quot;&gt;Как оценить сложные вещи, когда недостаточно просто сказать «да» или «нет»? В реальных задачах кибербезопасности, исследовании данных в датасайенс и при оценке финансовых рисков часто требуется описать неопределённость более аккуратно. В статье объясняю, как это делается с помощью нечётких шкал.</summary><content type="html">
  &lt;figure id=&quot;jpOV&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c4/82/c4824957-a5c0-47c0-8911-b540c15d833f.png&quot; width=&quot;1536&quot; /&gt;
    &lt;figcaption&gt;Минутка философии: оценка красоты девушек, тоже своего рода нечёткая оценка&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;S4uY&quot;&gt;В этой статье:&lt;/p&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#rtao&quot;&gt;Почему обычные шкалы не работают&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#3hCd&quot;&gt;Что такое «шкала желательности»&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#9MRg&quot;&gt;Как устроена нечёткая шкала&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#6kBA&quot;&gt;Примеры функций принадлежности&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#3Okc&quot;&gt;Как задать простую нечёткую шкалу&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#9QTM&quot;&gt;Где используются нечёткие шкалы&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#TUwh&quot;&gt;🔗 Полезные ссылки&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;p id=&quot;ofMb&quot;&gt;Автоматизируя процессы в различных областях, например, при анализе уровней угроз безопасности, при исследовании данных методами датасайенса, при оценке финансовых рисков в трейдинге, — мы постоянно работаем с неполной, отсутствующей или даже неточной информацией. Решения часто приходится принимать тогда, когда данные противоречивы или недостаточно точны. В таких ситуациях простая шкала «да/нет» или оценка от 0 до 1 становится бесполезной.&lt;/p&gt;
  &lt;p id=&quot;7tNO&quot;&gt;Чтобы справляться с неопределённостью и строить надёжные системы сигналов и принятия решений, используют &lt;strong&gt;нечёткие измерительные шкалы&lt;/strong&gt;. В этой статье коротко разберём, что это такое, зачем они нужны и как выглядят на практике.&lt;/p&gt;
  &lt;h2 id=&quot;rtao&quot;&gt;Почему обычные шкалы не работают&lt;/h2&gt;
  &lt;p id=&quot;QVWK&quot;&gt;Типичная шкала — это набор чисел, обычно состоящий из натуральных чисел и нуля. Например: {0, 1}.&lt;/p&gt;
  &lt;p id=&quot;u2Hu&quot;&gt;Если эту шкалу используют для оценки, например, состояния безопасности, то ноль можно интерпретировать как «небезопасно», а единицу как «полностью безопасно». Если требуется, шкалу расширяют: 0, 1, 2, 3, 4, ... N и просят оценить эксперта уровень безопасности одним из этих чисел.&lt;/p&gt;
  &lt;p id=&quot;lcoq&quot;&gt;Но на практике возникает масса промежуточных состояний:&lt;/p&gt;
  &lt;ul id=&quot;SlqP&quot;&gt;
    &lt;li id=&quot;F4e6&quot;&gt;Что делать, если система «скорее безопасна», но в некоторых случаях даёт сбой?&lt;/li&gt;
    &lt;li id=&quot;rs5t&quot;&gt;Как оценить актив, который «вроде бы перспективный», но без полной уверенности?&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;mVn0&quot;&gt;В реальном мире многие характеристики расплывчаты и нечётки, не фиксированы. Обычная шкала требует конкретного числа, а жизненные ситуации требуют гибкости.&lt;/p&gt;
  &lt;h2 id=&quot;3hCd&quot;&gt;Что такое «шкала желательности»&lt;/h2&gt;
  &lt;p id=&quot;NIcm&quot;&gt;Существует специальный тип шкал — «качественные шкалы». Как правило, это уровневые шкалы, где каждый промежуточный уровень интервала [0, 1] описывается некоторым понятным для эксперта-оценщика словом. Например, «высокий» или «низкий» уровень, либо «хорошее» или «плохое» качество некоторого параметра оцениваемого объекта.&lt;/p&gt;
  &lt;p id=&quot;vzaI&quot;&gt;Обычно для оценки промежуточных степеней качества на интервале [0, 1] используется известная качественная шкала — «шкала желательности Харрингтона» (desirability scale). Шкала желательности — это психофизическая шкала, которая устанавливает соответствие между физическими параметрами свойств исследуемого объекта и психологическими, субъективными оценками экспертов «желательности» того или иного значения этих свойств.&lt;/p&gt;
  &lt;figure id=&quot;fbAz&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a5/33/a533f0ae-edf1-4a11-99bc-994c0923f657.png&quot; width=&quot;500&quot; /&gt;
    &lt;figcaption&gt;Шкала желательности (desirability scale) Харрингтона для оценки степени качества между [0, 1]. Она определяется на [−3, 5] «функцией желательности» (desirability function): d(y) = exp(−exp(−y)). Эта функция возникла в результате наблюдений за решениями экспертов о предпочтениях соотнесения результатов эксперимента со значениями на отрезке [0, 1]. Функция позволяет оценивать предпочтение оценок для объектов различной размерности и природы. Кроме того, в областях, близких к 0 и 1, её «чувствительность» существенно ниже, чем в средней зоне. Выбор значений 0.37 и 0.63 обусловлен удобством вычислений, так как 0.37 ≈ e⁻¹, a 0.63 ≈ 1 − e⁻¹. За начало отсчёта обычно принимают значение в точке перегиба: d(0) ≈ 0.37. Допускаются отклонения границ уровней шкалы желательности на ±0.03&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;9MRg&quot;&gt;Как устроена нечёткая шкала&lt;/h2&gt;
  &lt;p id=&quot;fm24&quot;&gt;Нечёткая шкала описывает величину некоторой характеристики объекта не одним значением, а целым диапазоном с разной степенью принадлежности. Например, оценка надёжности может быть одновременно на 80% «высокой» и на 20% «средней».&lt;/p&gt;
  &lt;p id=&quot;7Wk9&quot;&gt;Вместо жёсткой границы между уровнями — плавные переходы.&lt;/p&gt;
  &lt;p id=&quot;LMKb&quot;&gt;Каждому возможному значению такой оценки ставится в соответствие «функция принадлежности». Эта функция показывает, насколько сильно значение относится к каждому уровню.&lt;/p&gt;
  &lt;p id=&quot;rVSl&quot;&gt;Например, температура воды 50°C с точки зрения человека может одновременно быть на 70% горячей и на 30% тёплой.&lt;/p&gt;
  &lt;p id=&quot;HchT&quot;&gt;Такой подход помогает эксперту принимать более устойчивые решения в реальных условиях, когда большинство данных — нечёткие величины.&lt;/p&gt;
  &lt;h3 id=&quot;6kBA&quot;&gt;Примеры функций принадлежности&lt;/h3&gt;
  &lt;p id=&quot;vEx8&quot;&gt;Чаще всего используются:&lt;/p&gt;
  &lt;ul id=&quot;IoQN&quot;&gt;
    &lt;li id=&quot;WxYJ&quot;&gt;гиперболические функции — обеспечивают плавный рост;&lt;/li&gt;
    &lt;li id=&quot;oZbB&quot;&gt;параболические функции — резкое изменение в середине;&lt;/li&gt;
    &lt;li id=&quot;QU7m&quot;&gt;колоколообразные функции — дают пик в центре шкалы;&lt;/li&gt;
    &lt;li id=&quot;smGZ&quot;&gt;треугольные функции — дают точное значение в вершине.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;4Fzg&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/46/ba/46bad7c5-5255-4fe3-b986-a87faff1704a.png&quot; width=&quot;800&quot; /&gt;
    &lt;figcaption&gt;Примеры специальных функций принадлежности, заданных своими параметрами: 1 — гиперболическая: μ_hyperbolic(x; 3; 5; 0.1); 2 — параболическая: μ_parabolic(x; 0; 1); 3 — колоколообразная: μ_bell(x; 0; 0.3; 0.4); 4 — треугольная: μ_triangle(x; 0.25; 0.5; 0.75)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;0u2j&quot;&gt;Выбор конкретной формы функций принадлежности экспертом зависит от особенностей задачи: где-то нужна плавность, где-то — резкий переход.&lt;/p&gt;
  &lt;h3 id=&quot;3Okc&quot;&gt;Как задать простую нечёткую шкалу&lt;/h3&gt;
  &lt;p id=&quot;sXNA&quot;&gt;Например, требуется оценить вероятность успешного выполнения торгового сигнала: достигнет ли цена целевого значения. Откуда получено само значение, нам неважно. Это может быть как внешний прогноз, полученный техническим или фундаментальным анализом, или определено на основе экспертной оценки без строгого обоснования.&lt;/p&gt;
  &lt;p id=&quot;bQ0y&quot;&gt;Чтобы построить свою шкалу:&lt;/p&gt;
  &lt;ol id=&quot;oXAS&quot;&gt;
    &lt;li id=&quot;hJzy&quot;&gt;Определяем диапазон измерений. Например: все числа от 0 до 1.&lt;/li&gt;
    &lt;li id=&quot;KN9P&quot;&gt;Выбираем уровни шкалы. Обычно используется универсальная шкала нечётких значений &lt;strong&gt;{Min, Low, Med, High, Max}&lt;/strong&gt;. Здесь Min означает минимальную вероятность достижения ценой целевого значения, Low — низкую, Med — среднюю, High — высокую и Max — максимальную вероятность. Такие обозначения позволяют избегать дробных промежуточных значений в диапазоне вычислений, но остаются понятными эксперту-человеку.&lt;/li&gt;
    &lt;li id=&quot;6cQf&quot;&gt;Строим функции принадлежности. Для простоты можно использовать треугольные или колоколообразные формы.&lt;/li&gt;
    &lt;li id=&quot;uld3&quot;&gt;Задаём пересечения. Например, значение 0.5 одновременно принадлежит уровню Med на 80% и High на 20%.&lt;/li&gt;
    &lt;li id=&quot;eBkq&quot;&gt;Проверяем на реальных данных. Смотрим, удовлетворяют ли нас реальные числовые оценки и сопоставление получаемых для них значений на нечёткой шкале.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;XBNE&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ed/f9/edf9eb5b-cf69-46df-89d5-7323cc9136f8.png&quot; width=&quot;800&quot; /&gt;
    &lt;figcaption&gt;Чёткая шкала [0, 1] и соответствующая ей универсальная нечёткая измерительная шкала с уровнями: Min — «минимальное», Low — «низкое», Med — «среднее», High — «высокое», Max — «максимальное» значение&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;9QTM&quot;&gt;Где используются нечёткие шкалы&lt;/h2&gt;
  &lt;p id=&quot;QohP&quot;&gt;Нечёткие шкалы находят своё применение в различных областях науки и в практических приложениях.&lt;/p&gt;
  &lt;ul id=&quot;fSKL&quot;&gt;
    &lt;li id=&quot;12VZ&quot;&gt;Анализ аномалий в биржевых данных: оценка отклонений без жёстких порогов.&lt;/li&gt;
    &lt;li id=&quot;IfCI&quot;&gt;Системы сигналов в трейдинге: прогноз вероятности достижения ценовых целей.&lt;/li&gt;
    &lt;li id=&quot;ReEp&quot;&gt;Автоматизация принятия решений: вывод комплексной оценки из множества частичных факторов.&lt;/li&gt;
    &lt;li id=&quot;rMjB&quot;&gt;Оценка риска выполняемых операций: балансирование между точностью данных и их надёжностью.&lt;/li&gt;
    &lt;li id=&quot;IJJt&quot;&gt;Экспертные оценки: возможность указания характеристик объектов на понятном человеку языке, вместо использования больших дробных чисел.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;TP0c&quot;&gt;&lt;strong&gt;Как нечёткие шкалы используются в кибербезопасности&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;il5c&quot;&gt;В кибербезопасности (Cyber Security) нечёткие шкалы позволяют корректно оценивать уровень угрозы, когда признаки атак размыты и не всегда однозначны. Это повышает качество обнаружения сложных атак, снижает количество ложных срабатываний и помогает системам безопасности работать устойчиво даже при недостатке информации.&lt;/p&gt;
  &lt;p id=&quot;T7Sl&quot;&gt;&lt;strong&gt;Как нечёткие шкалы используются при анализе данных&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;cOJk&quot;&gt;В анализе данных (Data Science) нечёткие шкалы помогают работать с «грязными» (зашумлёнными) и неполными наборами данных. Они позволяют строить модели, которые принимают решения не только на основании точных меток, но и при наличии шумов и неоднозначностей. Это особенно важно при работе с реальными данными, которые редко бывают идеально структурированными.&lt;/p&gt;
  &lt;p id=&quot;Comn&quot;&gt;&lt;strong&gt;Как нечёткие шкалы используются в трейдинговых сервисах&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;atqY&quot;&gt;Когда разрабатываешь сервис автоматической генерации сигналов или робота для алгоритмического трейдинга, нельзя полагаться только на чёткие метрики: рынок не даёт 100% гарантий. Нечёткие шкалы позволяют эксперту аккуратно учесть неопределённость и принимать более разумные решения — минимизируя ложные срабатывания и избегая ненужной самоуверенности.&lt;/p&gt;
  &lt;p id=&quot;A3wg&quot;&gt;Таким образом, нечёткие шкалы — это способ научить систему думать «приближённо», как это делает человек, когда сталкивается с неполной информацией. Это критически важно для построения надёжных алгоритмов для систем безопасности, анализа данных и алготрейдинга.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;TUwh&quot;&gt;🔗 Полезные ссылки&lt;/h3&gt;
  &lt;ul id=&quot;gupm&quot;&gt;
    &lt;li id=&quot;h7G5&quot;&gt;🌐 Полный FAQ по сигналам и описание методик FMA: &lt;a href=&quot;https://fuzzy-technologies.github.io/FMA/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/FMA&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;JaKw&quot;&gt;⚙️ Платформа TKSBrokerAPI: &lt;a href=&quot;https://fuzzy-technologies.github.io/TKSBrokerAPI/&quot; target=&quot;_blank&quot;&gt;fuzzy-technologies.github.io/TKSBrokerAPI&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;p0MI&quot;&gt;📡 Подписка на биржевые сигналы: &lt;a href=&quot;https://web.tribute.tg/s/nub&quot; target=&quot;_blank&quot;&gt;web.tribute.tg/s/nub&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;9WP5&quot;&gt;&lt;strong&gt;P. S.&lt;/strong&gt; Если интересно, как применяются нечёткие шкалы в задачах кибербезопасности, посмотрите эти статьи:&lt;/p&gt;
  &lt;ul id=&quot;PToa&quot;&gt;
    &lt;li id=&quot;Oq2T&quot;&gt;&lt;a href=&quot;https://s.fundamental-research.ru/pdf/2014/11-2/35511.pdf&quot; target=&quot;_blank&quot;&gt;«Подходы к автоматизации процесса валидации уязвимостей, найденных автоматическими сканерами безопасности, при помощи нечётких множеств и нейронных сетей»&lt;/a&gt; (2014)&lt;/li&gt;
    &lt;li id=&quot;rUMF&quot;&gt;&lt;a href=&quot;https://habr.com/ru/company/pt/blog/246197/&quot; target=&quot;_blank&quot;&gt;«Сканеры безопасности: автоматическая валидация уязвимостей с помощью нечетких множеств и нейронных сетей»&lt;/a&gt; (2014)&lt;/li&gt;
    &lt;li id=&quot;wlEx&quot;&gt;&lt;a href=&quot;https://habr.com/ru/company/pt/blog/274241/&quot; target=&quot;_blank&quot;&gt;«Сканеры безопасности: автоматическая классификация уязвимостей»&lt;/a&gt; (2015)&lt;/li&gt;
    &lt;li id=&quot;M1sz&quot;&gt;&lt;a href=&quot;https://habr.com/ru/company/pt/blog/323436/&quot; target=&quot;_blank&quot;&gt;«Как мы анализируем уязвимости с помощью нейронных сетей и нечеткой логики»&lt;/a&gt; (2017)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;tt-tags id=&quot;0bV2&quot;&gt;
    &lt;tt-tag name=&quot;математика&quot;&gt;#математика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;datascience&quot;&gt;#datascience&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;финансы&quot;&gt;#финансы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;нечёткости&quot;&gt;#нечёткости&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;шкалы&quot;&gt;#шкалы&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;риски&quot;&gt;#риски&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;fuzzy&quot;&gt;#fuzzy&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;scales&quot;&gt;#scales&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>tgilmullin:TKSBrokerAPI-Demo-Orders-Grid-Setter</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/TKSBrokerAPI-Demo-Orders-Grid-Setter?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>TKSBrokerAPI: автоматизация установки сетки ордеров</title><published>2025-01-31T10:04:22.707Z</published><updated>2025-01-31T10:04:22.707Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/0e/ca/0eca7f7a-5fbf-48b3-8388-a81b0b12eb9f.png"></media:thumbnail><tt:hashtag>платформа</tt:hashtag><tt:hashtag>tksbrokerapi</tt:hashtag><tt:hashtag>python</tt:hashtag><tt:hashtag>pandas</tt:hashtag><tt:hashtag>математика</tt:hashtag><tt:hashtag>datascience</tt:hashtag><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>сетка</tt:hashtag><tt:hashtag>ордеры</tt:hashtag><tt:hashtag>orders</tt:hashtag><tt:hashtag>grid</tt:hashtag><tt:hashtag>демо</tt:hashtag><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/34/5c/345c9640-38ec-4042-b43d-d0619e87c292.jpeg&quot;&gt;Торговля на бирже требует не только аналитического мышления, но и оперативности. Представьте, что вам нужно выставить десятки или даже сотни ордеров по разным инструментам. Немногие торговые платформы позволяют сделать такие операции «из коробки». Вручную это займёт часы, а вот с помощью сценария «Установщик сетки ордеров» на базе платформы ⚙️ TKSBrokerAPI — считаные секунды.</summary><content type="html">
  &lt;figure id=&quot;bagx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/34/5c/345c9640-38ec-4042-b43d-d0619e87c292.jpeg&quot; width=&quot;1024&quot; /&gt;
  &lt;/figure&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#lIh9&quot;&gt;Введение&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#l0lx&quot;&gt;Что такое «Установщик сетки ордеров»&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#Kwa2&quot;&gt;Основные возможности&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#r36R&quot;&gt;Как это работает&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#XZ3r&quot;&gt;Как запустить сценарий&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#7Q72&quot;&gt;Конфигурация&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#ISlK&quot;&gt;Требования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#wRlF&quot;&gt;Пошаговая инструкция&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#3eIh&quot;&gt;Пример запуска&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;lIh9&quot;&gt;Введение&lt;/h2&gt;
  &lt;p id=&quot;Vh8u&quot;&gt;Торговля на бирже требует не только аналитического мышления, но и оперативности. Представьте, что вам нужно выставить десятки или даже сотни ордеров по разным инструментам. Немногие торговые платформы позволяют сделать такие операции «из коробки». Вручную это займёт часы, а вот с помощью сценария «Установщик сетки ордеров» на базе платформы ⚙️ &lt;strong&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop&quot; target=&quot;_blank&quot;&gt;TKSBrokerAPI&lt;/a&gt;&lt;/strong&gt; — считаные секунды.&lt;/p&gt;
  &lt;p id=&quot;nM8q&quot;&gt;В этом кратком обзоре разберём, как работает этот сценарий, как его настроить и запустить, и почему он может стать вашим незаменимым помощником в торговле.&lt;/p&gt;
  &lt;h3 id=&quot;l0lx&quot;&gt;Что такое «Установщик сетки ордеров»&lt;/h3&gt;
  &lt;p id=&quot;YPGu&quot;&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop/docs/examples/OrdersGridSetter&quot; target=&quot;_blank&quot;&gt;«Установщик сетки ордеров»&lt;/a&gt; — это скрипт, который позволяет автоматически выставлять сетки лимитных или стоп-ордеров с заданным шагом в процентах от указанной цены первого ордера в сетке, определённой лотностью и направления. Он работает с помощью платформы TKSBrokerAPI и поддерживает параллельное выполнение, что позволяет одновременно обрабатывать множество инструментов, заданных по их тикерам.&lt;/p&gt;
  &lt;figure id=&quot;XF6U&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c7/21/c721a30e-c59f-498e-8aff-d3ed45246156.png&quot; width=&quot;1200&quot; /&gt;
    &lt;figcaption&gt;Схематичная иллюстрация для пояснения работы сценария &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop/docs/examples/OrdersGridSetter#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D1%89%D0%B8%D0%BA-%D1%81%D0%B5%D1%82%D0%BA%D0%B8-%D0%BE%D1%80%D0%B4%D0%B5%D1%80%D0%BE%D0%B2&quot; target=&quot;_blank&quot;&gt;«Установщик сетки ордеров»&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;Kwa2&quot;&gt;Основные возможности&lt;/h3&gt;
  &lt;ul id=&quot;jRqm&quot;&gt;
    &lt;li id=&quot;XXgU&quot;&gt;&lt;strong&gt;Параллельное выполнение.&lt;/strong&gt; Ордера выставляются одновременно для всех инструментов, указанных в конфигурации.&lt;/li&gt;
    &lt;li id=&quot;T36S&quot;&gt;&lt;strong&gt;Автоматическое определение цены.&lt;/strong&gt; Первый ордер размещается на заданном расстоянии в процентах от текущей цены, а остальные формируют сетку выше или ниже, с шагом, заданном в процентах от цены первого ордера.&lt;/li&gt;
    &lt;li id=&quot;OLhN&quot;&gt;&lt;strong&gt;Гибкая настройка&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;Huyi&quot;&gt;
      &lt;li id=&quot;yFTa&quot;&gt;Возможность задать:&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ul id=&quot;4AqU&quot;&gt;
      &lt;ul id=&quot;KRIT&quot;&gt;
        &lt;li id=&quot;ULwO&quot;&gt;&lt;strong&gt;целевую цену&lt;/strong&gt; для первого ордера в сетке (&lt;code&gt;target&lt;/code&gt; — действительное число), значение которой указывается в процентах от текущей рыночной цены инструмента — если она больше нуля, то первый ордер будет выставлен на заданный процент выше текущей цены, если меньше нуля, то ниже текущей цены, а если равна нулю, то сетка будет строиться начиная от текущей рыночной цены;&lt;/li&gt;
        &lt;li id=&quot;DsEQ&quot;&gt;&lt;strong&gt;шаг сетки&lt;/strong&gt; (&lt;code&gt;gridStep != 0&lt;/code&gt; — действительное ненулевое число) в процентах от цены первого ордера (&lt;code&gt;target&lt;/code&gt;) в сетке — если он больше нуля, то сетка будет строиться выше целевой цены, если меньше нуля, то ниже целевой цены;&lt;/li&gt;
        &lt;li id=&quot;lFQn&quot;&gt;&lt;strong&gt;лотность&lt;/strong&gt; (&lt;code&gt;volume &amp;gt;= 1&lt;/code&gt; — целое число) — объём инструмента для покупки или продажи, заданный целым количеством лотов; &lt;/li&gt;
        &lt;li id=&quot;jWak&quot;&gt;&lt;strong&gt;направление &lt;/strong&gt;(&lt;code&gt;direction: &amp;quot;Buy&amp;quot;&lt;/code&gt; или &lt;code&gt;direction: &amp;quot;Sell&amp;quot;&lt;/code&gt;) — указание скрипту: выставить ордера в сетке на покупку или на продажу.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;li id=&quot;rCW9&quot;&gt;Возможность указать &lt;strong&gt;тип ордера&lt;/strong&gt;:&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ul id=&quot;wkjs&quot;&gt;
      &lt;ul id=&quot;0JYO&quot;&gt;
        &lt;li id=&quot;WZqH&quot;&gt;&lt;strong&gt;лимитный &lt;/strong&gt;(&lt;code&gt;type: &amp;quot;Limit&amp;quot;)&lt;/code&gt; — заявка по ордеру выставляется в стакан цен и активна только до окончания текущей торговой сессии биржи;&lt;/li&gt;
        &lt;li id=&quot;USOU&quot;&gt;&lt;strong&gt;стоп-ордер&lt;/strong&gt;  (&lt;code&gt;type: &amp;quot;Stop&amp;quot;&lt;/code&gt;) — заявка по ордеру контролируется брокером, активна до указанной даты либо бессрочно, а при достижении цены исполнения ордера будет автоматически создана лимитная заявка.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;r36R&quot;&gt;Как это работает&lt;/h3&gt;
  &lt;p id=&quot;B7XW&quot;&gt;Основные шаги сценария следующие.&lt;/p&gt;
  &lt;ol id=&quot;29Tz&quot;&gt;
    &lt;li id=&quot;bfPL&quot;&gt;&lt;strong&gt;Получение текущих цен.&lt;/strong&gt; Скрипт запрашивает текущую цену для каждого тикера, указанного в конфигурации.&lt;/li&gt;
    &lt;li id=&quot;GCJ4&quot;&gt;&lt;strong&gt;Выставление ордеров.&lt;/strong&gt; В зависимости от выбранного направления и шага сетки, ордера выставляются автоматически. Первый ордер размещается на заданном расстоянии от текущей цены, а остальные формируют сетку выше или ниже него.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;T54j&quot;&gt;Скорость выставления ордеров ограничена лимитами брокера, но в среднем один ордер выставляется за &lt;code&gt;~0.25 ± 0.05&lt;/code&gt; секунды (без учёта таймаутов на подключения к серверу брокера). Это делает скрипт отличным инструментом для активных трейдеров, работающих с большим количеством инструментов.&lt;/p&gt;
  &lt;h2 id=&quot;XZ3r&quot;&gt;Как запустить сценарий&lt;/h2&gt;
  &lt;h3 id=&quot;7Q72&quot;&gt;Конфигурация&lt;/h3&gt;
  &lt;p id=&quot;8iiP&quot;&gt;Все параметры для сетки ордеров настраиваются в двух конфигурационных файлах: &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/OrdersGridSetter/config.yaml&quot; target=&quot;_blank&quot;&gt;config.yaml&lt;/a&gt;&lt;/code&gt; и &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/OrdersGridSetter/secrets.yaml&quot; target=&quot;_blank&quot;&gt;secrets.yaml&lt;/a&gt;&lt;/code&gt;. Эти файлы должны находиться рядом со скриптом, в котором реализован сценарий установщика ордеров: &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/OrdersGridSetter/TKSOrdersGridSetter.py&quot; target=&quot;_blank&quot;&gt;TKSOrdersGridSetter.py&lt;/a&gt;&lt;/code&gt;. За что отвечают параметры конфигурации и шаги самого скрипта, подробно описано в комментариях в коде.&lt;/p&gt;
  &lt;h3 id=&quot;ISlK&quot;&gt;Требования&lt;/h3&gt;
  &lt;ul id=&quot;9Hov&quot;&gt;
    &lt;li id=&quot;LKM8&quot;&gt;Python 3.9 или выше.&lt;/li&gt;
    &lt;li id=&quot;KwkD&quot;&gt;Установленные зависимости из файла &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/OrdersGridSetter/requirements.txt&quot; target=&quot;_blank&quot;&gt;requirements.txt&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;17tK&quot;&gt;&lt;a href=&quot;https://tinkoff.github.io/investAPI/token/&quot; target=&quot;_blank&quot;&gt;API-токен&lt;/a&gt; от брокера Тинькофф Инвестиции (вида &lt;code&gt;t.*****&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;k1k2&quot;&gt;Идентификатор счёта (&lt;code&gt;accountId&lt;/code&gt;) — его можно узнать используя команду платформы TKSBrokerAPI: &lt;code&gt;tksbrokerapi --accounts&lt;/code&gt; или спросив у техподдержки брокера.&lt;/li&gt;
    &lt;li id=&quot;GLkU&quot;&gt;Токен и идентификатор должны быть сохранены в конфигурационном файле &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/OrdersGridSetter/secrets.yaml&quot; target=&quot;_blank&quot;&gt;secrets.yaml&lt;/a&gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;wRlF&quot;&gt;Пошаговая инструкция&lt;/h3&gt;
  &lt;ul id=&quot;alfz&quot;&gt;
    &lt;li id=&quot;dYMe&quot;&gt;Клонируйте репозиторий:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;X6dP&quot;&gt;git clone https://github.com/Tim55667757/TKSBrokerAPI.git
cd TKSBrokerAPI&lt;/pre&gt;
  &lt;ul id=&quot;tOUd&quot;&gt;
    &lt;li id=&quot;nlA4&quot;&gt;Переключитесь на ветку &lt;code&gt;develop&lt;/code&gt;:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;RK0h&quot;&gt;git checkout -f develop
git pull&lt;/pre&gt;
  &lt;ul id=&quot;6QMi&quot;&gt;
    &lt;li id=&quot;VEfK&quot;&gt;Перейдите в папку с примером:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;mauL&quot;&gt;cd ./docs/examples/OrdersGridSetter&lt;/pre&gt;
  &lt;ul id=&quot;Kni9&quot;&gt;
    &lt;li id=&quot;OlX3&quot;&gt;Установите зависимости:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;y3tS&quot;&gt;python3 -m pip install -r requirements.txt&lt;/pre&gt;
  &lt;ul id=&quot;WPV6&quot;&gt;
    &lt;li id=&quot;xkQ9&quot;&gt;Запустите скрипт (если используются дефолтные файлы конфигурации, то их можно не указывать в параметрах команды):&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;ggNJ&quot;&gt;python3 TKSOrdersGridSetter.py config.yaml secrets.yaml&lt;/pre&gt;
  &lt;p id=&quot;lpMt&quot;&gt;Подробности о настройках конфигурации, авторизации и описание основных методов в скрипте установщика ордеров можно найти в документации (раздел &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop/docs/examples/OrdersGridSetter#%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA&quot; target=&quot;_blank&quot;&gt;«Установщик сетки ордеров»&lt;/a&gt;).&lt;/p&gt;
  &lt;h3 id=&quot;3eIh&quot;&gt;Пример запуска&lt;/h3&gt;
  &lt;p id=&quot;nqBT&quot;&gt;Если скрипт правильно сконфигурирован, то при запуске с текущими настройками вы увидите примерно следующий вывод в логах:&lt;/p&gt;
  &lt;figure id=&quot;Ofac&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a3/48/a348f33b-8e30-4d6d-ac2f-33bf1397c77c.png&quot; width=&quot;970&quot; /&gt;
    &lt;figcaption&gt;Пример лога работы скрипта &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop/docs/examples/OrdersGridSetter#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D1%89%D0%B8%D0%BA-%D1%81%D0%B5%D1%82%D0%BA%D0%B8-%D0%BE%D1%80%D0%B4%D0%B5%D1%80%D0%BE%D0%B2&quot; target=&quot;_blank&quot;&gt;«Установщик сетки ордеров»&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;es4k&quot;&gt;На примере видно, что было запущено два конвейера, в каждом обрабатывалось по одной акции. Затем по каждой акции было выставлено 5 ордеров по ценам, соответствующим заданным параметрам. Цены были рассчитаны автоматически, с учётом текущей цены инструментов.&lt;/p&gt;
  &lt;p id=&quot;kwIl&quot;&gt;Стоит отметить, что скрипт &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop/docs/examples/OrdersGridSetter#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D1%89%D0%B8%D0%BA-%D1%81%D0%B5%D1%82%D0%BA%D0%B8-%D0%BE%D1%80%D0%B4%D0%B5%D1%80%D0%BE%D0%B2&quot; target=&quot;_blank&quot;&gt;«Установщик сетки ордеров»&lt;/a&gt; на базе платформы TKSBrokerAPI — это мощный инструмент для автоматизации торговли. Он позволяет быстро и точно выставлять ордера, экономя время и минимизируя ошибки. Если вы работаете с большим количеством инструментов, этот скрипт станет вашим незаменимым помощником.&lt;/p&gt;
  &lt;p id=&quot;VG21&quot;&gt;Попробуйте платформу ⚙️ TKSBrokerAPI и сделайте свою торговлю более эффективной! 🚀&lt;/p&gt;
  &lt;figure id=&quot;ADTT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/f5/cff53c7d-dda7-44c0-af46-5dbcc8d7542b.png&quot; width=&quot;2484&quot; /&gt;
    &lt;figcaption&gt;Платформа &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;TKSBrokerAPI&lt;/a&gt;. Наш девиз: Технологии · Знания · Наука (Technologies · Knowledge · Science)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;563h&quot;&gt;На этом всё, а если у вас появились вопросы по работе платформы TKSBrokerAPI, то вы можете задать их на GitHub в разделе 👉 &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/issues/new&quot; target=&quot;_blank&quot;&gt;Issues&lt;/a&gt; 👈 (также подписывайтесь на блог разработчиков: &lt;a href=&quot;https://t.me/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;t.me/TKSBrokerAPI&lt;/a&gt;).&lt;/p&gt;
  &lt;p id=&quot;35Px&quot;&gt;Успехов вам в автоматизации биржевой торговли! И профита! 🚀 😉✌️&lt;/p&gt;
  &lt;p id=&quot;yECk&quot;&gt;⚙ Ссылка на проект: &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;github.com/Tim55667757/TKSBrokerAPI&lt;/a&gt;&lt;br /&gt;🎁 Поддержать проект: &lt;a href=&quot;https://yoomoney.ru/to/410015019068268&quot; target=&quot;_blank&quot;&gt;yoomoney.ru/to/410015019068268&lt;/a&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;iYQQ&quot;&gt;
    &lt;tt-tag name=&quot;платформа&quot;&gt;#платформа&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;tksbrokerapi&quot;&gt;#tksbrokerapi&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;python&quot;&gt;#python&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;pandas&quot;&gt;#pandas&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;математика&quot;&gt;#математика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;datascience&quot;&gt;#datascience&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;сетка&quot;&gt;#сетка&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;ордеры&quot;&gt;#ордеры&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;orders&quot;&gt;#orders&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;grid&quot;&gt;#grid&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;демо&quot;&gt;#демо&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>tgilmullin:TKSBrokerAPI-Demo-Anomaly-Detection</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/TKSBrokerAPI-Demo-Anomaly-Detection?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>TKSBrokerAPI: пишем бота для поиска аномальных объёмов</title><published>2025-01-30T22:11:02.344Z</published><updated>2025-01-30T22:11:02.344Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/79/9c/799c55ba-3c3f-40f5-bfff-b8571b8267d9.png"></media:thumbnail><tt:hashtag>платформа</tt:hashtag><tt:hashtag>tksbrokerapi</tt:hashtag><tt:hashtag>python</tt:hashtag><tt:hashtag>pandas</tt:hashtag><tt:hashtag>математика</tt:hashtag><tt:hashtag>datascience</tt:hashtag><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>стакан</tt:hashtag><tt:hashtag>аномалии</tt:hashtag><tt:hashtag>бот</tt:hashtag><tt:hashtag>демо</tt:hashtag><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/f2/12/f2121a5c-9bde-485b-9b31-b36daaf70dd3.jpeg&quot;&gt;Автоматизация биржевых операций — это не просто модный тренд, а насущная ежедневная необходимость для трейдеров и аналитиков. Рассмотрим один интересный кейс — автоматический анализ биржевого стакана цен и поиск аномальных объёмов покупок и продаж в нём с помощью платформы ⚙️ TKSBrokerAPI.</summary><content type="html">
  &lt;figure id=&quot;Yy2n&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f2/12/f2121a5c-9bde-485b-9b31-b36daaf70dd3.jpeg&quot; width=&quot;1024&quot; /&gt;
  &lt;/figure&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#WUAk&quot;&gt;Введение&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#az4y&quot;&gt;Модифицированный метод Хампеля: математика на службе у трейдера&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#6rWE&quot;&gt;Инструмент для автоматизации: платформа ⚙️ TKSBrokerAPI&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#HeUo&quot;&gt;Алгоритм автоматизации поиска аномалий&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#af5y&quot;&gt;Telegram-бот для поиска аномалий&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#mirh&quot;&gt;Как работает бот&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#R7sh&quot;&gt;Запуск бота&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;WUAk&quot;&gt;Введение&lt;/h2&gt;
  &lt;p id=&quot;ZXa8&quot;&gt;Автоматизация биржевых операций — это не просто модный тренд, а насущная ежедневная необходимость для трейдеров и аналитиков. Можно автоматизировать всё, что угодно: подготовку отчётов, визуализацию графиков, получение исторических данных, оповещения о рыночных событиях и даже совершение сделок, опираясь на умные алгоритмы. Рассмотрим один интересный кейс — автоматический анализ биржевого стакана цен и поиск аномальных объёмов покупок и продаж в нём.&lt;/p&gt;
  &lt;p id=&quot;Vmnk&quot;&gt;Почему аномалии в стакане важны? Биржевой стакан — это таблица текущих заявок на покупку и продажу, где отображаются цены и объёмы. Трейдеры часто ищут в нём аномалии — необычно большие объёмы заявок, которые могут сигнализировать о будущем движении цены. Существует гипотеза о том, что если на рынке в текущий момент времени в стакане преобладают крупные объёмы покупателей, то цена в краткосрочной перспективе, скорее всего, будет расти (или хотя бы не упадёт ниже этих уровней). Если же доминируют аномальные объёмы продавцов, цена, вероятно, снизится.&lt;/p&gt;
  &lt;p id=&quot;ZNrq&quot;&gt;На следующих скриншотах изображены стаканы цен с объёмами предложений продавцов и покупателей, которые трейдер визуально может принять за аномалии.&lt;/p&gt;
  &lt;figure id=&quot;BhtO&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/55/3b/553bb343-6d20-47ed-8c9c-d967da3cada6.png&quot; width=&quot;2700&quot; /&gt;
    &lt;figcaption&gt;Указанные на скриншотах значения объёмов в биржевом стакане трейдер визуально может принять за аномалии&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;GgTH&quot;&gt;Но как автоматически находить такие аномалии?&lt;/p&gt;
  &lt;h2 id=&quot;az4y&quot;&gt;Модифицированный метод Хампеля: математика на службе у трейдера&lt;/h2&gt;
  &lt;p id=&quot;qJAy&quot;&gt;Для поиска аномалий в числовых рядах (а объёмы в стакане — это именно числовой ряд) отлично подходит модифицированный метод Хампеля. Он позволяет быстро находить выбросы, которые значительно отличаются от остальных значений. Подробнее о методе можно прочитать в одной из &lt;a href=&quot;https://teletype.in/@tgilmullin/anomaly&quot; target=&quot;_blank&quot;&gt;предыдущих статей&lt;/a&gt;, а также изучить примеры и поэкспериментировать с данными в демонстрационном &lt;a href=&quot;https://nbviewer.org/github/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/HampelFilteringExample.ipynb&quot; target=&quot;_blank&quot;&gt;Jupyter-ноутбуке&lt;/a&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;6rWE&quot;&gt;Инструмент для автоматизации: платформа ⚙️ TKSBrokerAPI&lt;/h3&gt;
  &lt;p id=&quot;YqV0&quot;&gt;Чтобы автоматизировать поиск аномалий, понадобятся:&lt;/p&gt;
  &lt;ul id=&quot;nnee&quot;&gt;
    &lt;li id=&quot;iHMU&quot;&gt;Python 3.9+ — язык, на котором пишется аналитический сценарий и Telegram-бот;&lt;/li&gt;
    &lt;li id=&quot;xkNT&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;TKSBrokerAPI&lt;/a&gt; — платформа для работы с API брокера &lt;a href=&quot;https://tinkoff.ru/sl/AaX1Et1omnH&quot; target=&quot;_blank&quot;&gt;Тинькофф Инвестиции&lt;/a&gt;, которая упрощает получение данных из биржевого стакана и их обработку;&lt;/li&gt;
    &lt;li id=&quot;YfoE&quot;&gt;Requests — Python-библиотека, с помощью которой будут отправляться уведомления через Telegram.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;HeUo&quot;&gt;Алгоритм автоматизации поиска аномалий&lt;/h3&gt;
  &lt;p id=&quot;UDAt&quot;&gt;Основные шаги сценария, которые нужно предусмотреть при автоматизации поиска аномалий, следующие.&lt;/p&gt;
  &lt;ul id=&quot;OLSU&quot;&gt;
    &lt;li id=&quot;3n3F&quot;&gt;Скрипт должен уметь выходить на рынок по расписанию, указанному в формате crontab: &lt;code&gt;timeToWork: &amp;quot;*/2 10-21 * * 1-5&amp;quot;&lt;/code&gt; — c 10:00 утра до 22:00 вечера (включительно) в будние дни, каждые 2 минуты (или по &lt;a href=&quot;https://crontab.guru/#*/2_10-21_*_*_1-5&quot; target=&quot;_blank&quot;&gt;иному расписанию&lt;/a&gt;).&lt;/li&gt;
    &lt;li id=&quot;o6yU&quot;&gt;Скрипт должен запросить данные о состоянии биржевого стакана по указанным инструментам с глубиной стакана &lt;code&gt;depth &amp;lt;= 50&lt;/code&gt;. Действия должны выполняться в параллельном (мультипроцессном) конвейерном режиме, для ускорения общей работы по анализу большого списка инструментов.&lt;/li&gt;
    &lt;li id=&quot;jAUb&quot;&gt;Для каждого полученного стакана цен скрипт должен найти все аномалии в объёмах продавцов и покупателей. Для этого должна использоваться фильтрация числовых рядов модифицированным методом Хампеля по всей глубине стакана.&lt;/li&gt;
    &lt;li id=&quot;bQvS&quot;&gt;Если список аномалий по инструменту получился не пустой, то скрипт должен сформировать оповещение по шаблону. Затем он должен подключиться к указанному Telegram-боту по токену и отправить оповещение пользователю о найденной аномалии, а также сохранить информацию в логи.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;lwd2&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cb/77/cb77cd58-4383-4ea1-90a9-ac564b42fa3e.png&quot; width=&quot;401&quot; /&gt;
    &lt;figcaption&gt;Визуализация шагов алгоритма автоматизации поиска аномалий в виде блок-схемы&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;af5y&quot;&gt;Telegram-бот для поиска аномалий&lt;/h2&gt;
  &lt;p id=&quot;aEMJ&quot;&gt;Вот пример получившегося Telegram-бота: &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/AnomalyVolumesDetector/TKSAVDetector.py&quot; target=&quot;_blank&quot;&gt;TKSAVDetector.py&lt;/a&gt;&lt;/code&gt;, реализующего сценарий, описанный выше.&lt;/p&gt;
  &lt;h3 id=&quot;mirh&quot;&gt;Как работает бот&lt;/h3&gt;
  &lt;ol id=&quot;SQSs&quot;&gt;
    &lt;li id=&quot;y37k&quot;&gt;&lt;strong&gt;Сбор данных.&lt;/strong&gt; Бот через TKSBrokerAPI получает данные из стакана цен.&lt;/li&gt;
    &lt;li id=&quot;cAw1&quot;&gt;&lt;strong&gt;Поиск аномалий.&lt;/strong&gt; С помощью метода Хампеля анализируются объёмы покупок и продаж.&lt;/li&gt;
    &lt;li id=&quot;QwgZ&quot;&gt;&lt;strong&gt;Оповещения.&lt;/strong&gt; Если найдены аномалии, бот отправляет уведомление в Telegram. В сообщении указывается текущая цена инструмента и уровни с аномальными объёмами.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;47F7&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ac/09/ac098bc3-410d-4c98-b11f-9f2d75f805e4.jpeg&quot; width=&quot;1228&quot; /&gt;
    &lt;figcaption&gt;Пример оповещения об аномальных объёмах по инструменту в чате Telegram-бота&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;R7sh&quot;&gt;Запуск бота&lt;/h3&gt;
  &lt;p id=&quot;nImA&quot;&gt;Все параметры настраиваются в двух конфигурационных файлах: &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/AnomalyVolumesDetector/config.yaml&quot; target=&quot;_blank&quot;&gt;config.yaml&lt;/a&gt;&lt;/code&gt; и &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/AnomalyVolumesDetector/secrets.yaml&quot; target=&quot;_blank&quot;&gt;secrets.yaml&lt;/a&gt;&lt;/code&gt;, которые должны находиться рядом со скриптом &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/AnomalyVolumesDetector/TKSAVDetector.py&quot; target=&quot;_blank&quot;&gt;TKSAVDetector.py&lt;/a&gt;&lt;/code&gt;. Бот работает с &lt;code&gt;python &amp;gt;= 3.9&lt;/code&gt;, кроме того, должны быть установлены зависимости из &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/AnomalyVolumesDetector/requirements.txt&quot; target=&quot;_blank&quot;&gt;requirements.txt&lt;/a&gt;&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;Ivvg&quot;&gt;Подробнее о настройках конфигурации, авторизации и описание основных методов Telegram-бота для поиска аномалий читайте в документации (раздел &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop/docs/examples/AnomalyVolumesDetector#%D0%94%D0%B5%D1%82%D0%B5%D0%BA%D1%82%D0%BE%D1%80-%D0%B0%D0%BD%D0%BE%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85-%D0%BE%D0%B1%D1%8A%D1%91%D0%BC%D0%BE%D0%B2&quot; target=&quot;_blank&quot;&gt;«Детектор аномальных объёмов»&lt;/a&gt;).&lt;/p&gt;
  &lt;p id=&quot;NPnu&quot;&gt;Резюмируя статью, хочу отметить, что автоматизация анализа стакана цен с помощью платформы TKSBrokerAPI и модифицированного метода Хампеля — это мощный инструмент для трейдеров. Он позволяет оперативно находить аномалии и принимать решения на основе данных, а не интуиции. Если вы хотите глубже погрузиться в тему, попробуйте реализовать собственного Telegram-бота, используя пример выше, — это отличный способ прокачать навыки в Python и автоматизации! 🙂✌️&lt;/p&gt;
  &lt;figure id=&quot;HqFi&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/f5/cff53c7d-dda7-44c0-af46-5dbcc8d7542b.png&quot; width=&quot;2484&quot; /&gt;
    &lt;figcaption&gt;Платформа &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;TKSBrokerAPI&lt;/a&gt;. Наш девиз: Технологии · Знания · Наука (Technologies · Knowledge · Science)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;RoYw&quot;&gt;На этом всё, а если у вас появились вопросы по работе платформы TKSBrokerAPI, то вы можете задать их на GitHub в разделе 👉 &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/issues/new&quot; target=&quot;_blank&quot;&gt;Issues&lt;/a&gt; 👈 (также подписывайтесь на блог разработчиков: &lt;a href=&quot;https://t.me/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;t.me/TKSBrokerAPI&lt;/a&gt;).&lt;/p&gt;
  &lt;p id=&quot;0bVb&quot;&gt;Успехов вам в автоматизации биржевой торговли! И профита! 🚀 😉✌️&lt;/p&gt;
  &lt;p id=&quot;mjGW&quot;&gt;⚙ Ссылка на проект: &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;github.com/Tim55667757/TKSBrokerAPI&lt;/a&gt;&lt;br /&gt;🎁 Поддержать проект: &lt;a href=&quot;https://yoomoney.ru/to/410015019068268&quot; target=&quot;_blank&quot;&gt;yoomoney.ru/to/410015019068268&lt;/a&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;K1C8&quot;&gt;
    &lt;tt-tag name=&quot;платформа&quot;&gt;#платформа&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;tksbrokerapi&quot;&gt;#tksbrokerapi&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;python&quot;&gt;#python&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;pandas&quot;&gt;#pandas&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;математика&quot;&gt;#математика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;datascience&quot;&gt;#datascience&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;стакан&quot;&gt;#стакан&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;аномалии&quot;&gt;#аномалии&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;бот&quot;&gt;#бот&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;демо&quot;&gt;#демо&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>tgilmullin:TKSBrokerAPI-Demo-Data-Extend</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/TKSBrokerAPI-Demo-Data-Extend?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>TKSBrokerAPI: обогащаем биржевые данные</title><published>2025-01-30T15:46:26.437Z</published><updated>2025-01-30T18:00:28.981Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/9e/f0/9ef0123a-0452-4c72-aebb-36cea0abae1e.png"></media:thumbnail><tt:hashtag>платформа</tt:hashtag><tt:hashtag>tksbrokerapi</tt:hashtag><tt:hashtag>python</tt:hashtag><tt:hashtag>pandas</tt:hashtag><tt:hashtag>математика</tt:hashtag><tt:hashtag>datascience</tt:hashtag><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>обогащение</tt:hashtag><tt:hashtag>расширение</tt:hashtag><tt:hashtag>данные</tt:hashtag><tt:hashtag>демо</tt:hashtag><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/eb/f8/ebf8bb07-fbfa-4059-9df0-0b85511ee9c7.jpeg&quot;&gt;Платформа ⚙️ TKSBrokerAPI упрощает автоматизацию торгов через Tinkoff Invest REST API, беря на себя всю работу с брокерской инфраструктурой. Кроме того, она позволяет получать «сырые» данные по торговым инструментам: акциям, облигациям, фондам, фьючерсам и валютам, а затем обогащать данные о них.</summary><content type="html">
  &lt;figure id=&quot;eXFw&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/eb/f8/ebf8bb07-fbfa-4059-9df0-0b85511ee9c7.jpeg&quot; width=&quot;1024&quot; /&gt;
  &lt;/figure&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#pqKg&quot;&gt;Введение&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#F2tK&quot;&gt;Обогащение данных&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#knUF&quot;&gt;Получаем данные по всем инструментам&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#sn16&quot;&gt;Получаем обогащённые данные по облигациям&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#lPV1&quot;&gt;Строим календарь выплат по облигациям&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#i04U&quot;&gt;Получаем историю цен инструмента&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;pqKg&quot;&gt;Введение&lt;/h2&gt;
  &lt;p id=&quot;cu8N&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/TKSBrokerAPI-Demo-Scenario&quot; target=&quot;_blank&quot;&gt;В прошлой статье&lt;/a&gt; мы рассмотрели, как автоматизировать простой торговый сценарий на Python с помощью платформы ⚙️ &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;TKSBrokerAPI&lt;/strong&gt;&lt;/a&gt;. Эта платформа упрощает автоматизацию торгов через Tinkoff Invest REST API, беря на себя всю работу с брокерской инфраструктурой. Всё начинается с вашей гениальной торговой идеи и завершается автоматизацией сценария, который TKSBrokerAPI помогает реализовать в коде.&lt;/p&gt;
  &lt;p id=&quot;TB2l&quot;&gt;Но как найти ту самую «гениальную идею» для торгового алгоритма? Здесь на помощь снова приходит TKSBrokerAPI. Платформа позволяет получать «сырые» данные по торговым инструментам: акциям, облигациям, фондам, фьючерсам и валютам. Эти данные можно анализировать в любом удобном инструменте, будь то табличный редактор или специализированная аналитическая платформа.&lt;/p&gt;
  &lt;p id=&quot;XUvt&quot;&gt;Для работы с данными в TKSBrokerAPI предусмотрены методы, которые позволяют:&lt;/p&gt;
  &lt;ul id=&quot;e2Ri&quot;&gt;
    &lt;li id=&quot;vViy&quot;&gt;сохранять данные в популярных форматах: XLSX, CSV (для табличных редакторов), Markdown (для удобства чтения) и Pandas DataFrame (для аналитиков и датасайентистов);&lt;/li&gt;
    &lt;li id=&quot;goax&quot;&gt;обогащать и расширять данные для дальнейшего анализа.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;wqE5&quot;&gt;Например, с помощью платформы можно:&lt;/p&gt;
  &lt;ul id=&quot;vgcF&quot;&gt;
    &lt;li id=&quot;w2xB&quot;&gt;построить &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop?tab=readme-ov-file#%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C-%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D1%8C-%D0%B2%D1%8B%D0%BF%D0%BB%D0%B0%D1%82-%D0%BF%D0%BE-%D0%BE%D0%B1%D0%BB%D0%B8%D0%B3%D0%B0%D1%86%D0%B8%D1%8F%D0%BC&quot; target=&quot;_blank&quot;&gt;календарь выплат по облигациям&lt;/a&gt; и рассчитать их &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop?tab=readme-ov-file#%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%BE%D0%B1%D0%BE%D0%B3%D0%B0%D1%89%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BF%D0%BE-%D0%BE%D0%B1%D0%BB%D0%B8%D0%B3%D0%B0%D1%86%D0%B8%D1%8F%D0%BC&quot; target=&quot;_blank&quot;&gt;текущие и купонные доходности&lt;/a&gt;;&lt;/li&gt;
    &lt;li id=&quot;h4Jt&quot;&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop?tab=readme-ov-file#%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B8%D0%B9-%D0%BF%D0%BE%D1%80%D1%82%D1%84%D0%B5%D0%BB%D1%8C-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F-%D0%B8-%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D1%83-%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BE%D0%B2&quot; target=&quot;_blank&quot;&gt;проанализировать портфель&lt;/a&gt;: текущее состояние и распределение активов по типам, компаниям, отраслям, валютам и странам;&lt;/li&gt;
    &lt;li id=&quot;wffL&quot;&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop?tab=readme-ov-file#%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C-%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B2-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B5-ohlcv-%D1%81%D0%B2%D0%B5%D1%87%D0%B5%D0%B9&quot; target=&quot;_blank&quot;&gt;скачать исторические данные&lt;/a&gt; по ценам инструментов в формате OHLCV-свечей.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;jrVA&quot;&gt;Подробнее о возможностях платформы можно узнать в разделе документации &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop?tab=readme-ov-file#%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&quot; target=&quot;_blank&quot;&gt;«Основные возможности»&lt;/a&gt; или в полной &lt;a href=&quot;https://tim55667757.github.io/TKSBrokerAPI/docs/tksbrokerapi/TKSBrokerAPI.html&quot; target=&quot;_blank&quot;&gt;API-документации&lt;/a&gt; на модуль TKSBrokerAPI.&lt;/p&gt;
  &lt;p id=&quot;MeIX&quot;&gt;Таким образом, TKSBrokerAPI — это не только инструмент для автоматизации торгов, но и решение для сбора, первичной обработки и анализа биржевых данных, которое поможет вам принимать более обоснованные инвестиционные решения.&lt;/p&gt;
  &lt;h2 id=&quot;F2tK&quot;&gt;Обогащение данных&lt;/h2&gt;
  &lt;figure id=&quot;JcHs&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/aa/74/aa74b4a6-56e6-4109-8db2-217ee60249ee.png&quot; width=&quot;2649&quot; /&gt;
    &lt;figcaption&gt;Схема обогащения биржевых данных с помощью TKSBrokerAPI&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pkUT&quot;&gt;Как данные обогащаются и используются в TKSBrokerAPI:&lt;/p&gt;
  &lt;ol id=&quot;VwYH&quot;&gt;
    &lt;li id=&quot;zYmd&quot;&gt;&lt;strong&gt;Запрос данных.&lt;/strong&gt; Вы запрашиваете нужные данные с сервера брокера через модуль TKSBrokerAPI. Почти все методы модуля возвращают «сырые» данные в виде словаря Python.&lt;/li&gt;
    &lt;li id=&quot;Iv3o&quot;&gt;&lt;strong&gt;Обработка и обогащение.&lt;/strong&gt; Эти данные проходят обработку: добавляются статистические данные, некоторые параметры, аналитические отчёты и другая полезная информация.&lt;/li&gt;
    &lt;li id=&quot;xxu6&quot;&gt;&lt;strong&gt;Сохранение данных.&lt;/strong&gt; После обогащения данные сохраняются в удобном для анализа формате:&lt;/li&gt;
    &lt;ul id=&quot;XGq1&quot;&gt;
      &lt;li id=&quot;4Rk0&quot;&gt;в виде словаря Python или Pandas DataFrame (для программистов и аналитиков);&lt;/li&gt;
      &lt;li id=&quot;R304&quot;&gt;в форматах XLSX, CSV или Markdown (при работе через консоль и использовании внешних инструментов аналитики).&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;1ysL&quot;&gt;&lt;strong&gt;Анализ данных.&lt;/strong&gt; Вы загружаете данные в свою аналитическую систему и начинаете исследовать: ищете зависимости, корреляции, проверяете гипотезы и строите прогнозы.&lt;/li&gt;
    &lt;li id=&quot;Z3Cv&quot;&gt;&lt;strong&gt;Создание торгового алгоритма.&lt;/strong&gt; На основе анализа вы формулируете свою «гениальную идею» для торгового алгоритма.&lt;/li&gt;
    &lt;li id=&quot;ZLiW&quot;&gt;&lt;strong&gt;Автоматизация.&lt;/strong&gt; Реализуете торговый сценарий с помощью платформы TKSBrokerAPI (как было показано &lt;a href=&quot;https://teletype.in/@tgilmullin/TKSBrokerAPI-Demo-Scenario&quot; target=&quot;_blank&quot;&gt;в предыдущей статье&lt;/a&gt;).&lt;/li&gt;
    &lt;li id=&quot;YT5n&quot;&gt;Профит! 😉&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;XBGZ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/af/5c/af5cb9fd-4025-4c70-afef-ad9182aeb908.png&quot; width=&quot;408&quot; /&gt;
    &lt;figcaption&gt;Визуализация шагов алгоритма обогащения данных в виде блок-схемы&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;cYUU&quot;&gt;Как начать работать с платформой TKSBrokerAPI я уже &lt;a href=&quot;https://teletype.in/@tgilmullin/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;рассказывал&lt;/a&gt; в одной из предыдущих статей, поэтому не буду повторяться. Давайте сразу перейдём к практическим примерам получения и обогащения биржевых данных.&lt;/p&gt;
  &lt;h3 id=&quot;knUF&quot;&gt;Получаем данные по всем инструментам&lt;/h3&gt;
  &lt;figure id=&quot;If03&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d6/7c/d67c0527-ba81-4b24-9123-ba805e149399.png&quot; width=&quot;2879&quot; /&gt;
    &lt;figcaption&gt;Пример полученных данных по всем инструментам в формате XLSX&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;PB8J&quot;&gt;
    &lt;li id=&quot;O2aV&quot;&gt;&lt;strong&gt;Команда:&lt;/strong&gt; &lt;code&gt;tksbrokerapi -v 10 --list-xlsx&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;bvbJ&quot;&gt;Ключ &lt;code&gt;--list-xlsx&lt;/code&gt; (или &lt;code&gt;-x&lt;/code&gt;) используется для сохранения сырых данных по всем доступным для текущего пользователя инструментам в формате XLSX. Этот формат универсален и пригоден для дальнейшего изучения датасайентистами или биржевыми аналитиками. Частично данные берутся из локального кеша &amp;#x60;&lt;code&gt;dump.json&lt;/code&gt;, затем они обогащаются, трансформируются в XLSX-формат и сохраняются в файл &lt;code&gt;dump.xlsx&lt;/code&gt;.&lt;/p&gt;
  &lt;ul id=&quot;8XSP&quot;&gt;
    &lt;li id=&quot;8ELH&quot;&gt;&lt;strong&gt;Пример &lt;/strong&gt;полученных данных: &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/media/dump.xlsx&quot; target=&quot;_blank&quot;&gt;./docs/media/dump.xlsx&lt;/a&gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;sn16&quot;&gt;Получаем обогащённые данные по облигациям&lt;/h3&gt;
  &lt;figure id=&quot;vOeq&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a6/93/a693a3e2-a22e-4acf-91f9-22ad3a892490.png&quot; width=&quot;2879&quot; /&gt;
    &lt;figcaption&gt;Пример обогащения данных по облигациям — рассчитаны некоторые значения и добавлены новые столбцы, которых ранее в биржевых данных не было&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;xUce&quot;&gt;
    &lt;li id=&quot;dYYJ&quot;&gt;&lt;strong&gt;Команда:&lt;/strong&gt; &lt;code&gt;tksbrokerapi -v 10 --bonds-xlsx [список облигаций]&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;wIFR&quot;&gt;Ключ &lt;code&gt;--bonds-xlsx&lt;/code&gt; (или &lt;code&gt;-b&lt;/code&gt;) используется для получения всех доступных пользователю облигаций. Либо можно перечислить список FIGI или тикеров только интересующих облигаций. Затем полученные данные обогащаются и преобразуются в Pandas DataFrame с дополнительной информацией: текущие цены облигации, календарь платежей, рассчитанные купонные и текущие доходности (зависящие от цены) и некоторые другие статистические параметры.&lt;/p&gt;
  &lt;p id=&quot;fhZi&quot;&gt;Затем эти данные экспортируются в XLSX-файл, пригодный для дальнейшего анализа датасайентистами или биржевыми аналитиками (по умолчанию: &lt;code&gt;ext-bonds.xlsx&lt;/code&gt;). Что означают заголовки в обогащённом XLSX-файле или в Pandas DataFrame можно узнать в документации (раздел &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop?tab=readme-ov-file#%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%BE%D0%B1%D0%BE%D0%B3%D0%B0%D1%89%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BF%D0%BE-%D0%BE%D0%B1%D0%BB%D0%B8%D0%B3%D0%B0%D1%86%D0%B8%D1%8F%D0%BC&quot; target=&quot;_blank&quot;&gt;«Получить обогащённые данные по облигациям»&lt;/a&gt;).&lt;/p&gt;
  &lt;p id=&quot;chxN&quot;&gt;Если с сервера брокера запрашивается слишком много или все облигации, то ожидание может быть достаточно длительным, что связано с &lt;a href=&quot;https://tinkoff.github.io/investAPI/limits/&quot; target=&quot;_blank&quot;&gt;ограничениями брокера&lt;/a&gt;. В среднем удаётся обогатить новыми данными ~90–120 облигаций в минуту, в зависимости от пользовательских лимитов ограничения скорости.&lt;/p&gt;
  &lt;ul id=&quot;ewU7&quot;&gt;
    &lt;li id=&quot;IMqb&quot;&gt;&lt;strong&gt;Пример &lt;/strong&gt;XLSX-файла с обогащёнными данными по облигациям: &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/media/ext-bonds.xlsx&quot; target=&quot;_blank&quot;&gt;./docs/media/ext-bonds.xlsx&lt;/a&gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;lPV1&quot;&gt;Строим календарь выплат по облигациям&lt;/h3&gt;
  &lt;figure id=&quot;Xsz3&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b4/9f/b49f3100-a01b-4bca-a4f2-7ec5b5f38ba9.png&quot; width=&quot;2879&quot; /&gt;
    &lt;figcaption&gt;Пример календаря выплат по облигациям в XLSX-формате&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;cjYx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/20/db/20db13c1-19fb-4717-b445-382d006d41fa.png&quot; width=&quot;2879&quot; /&gt;
    &lt;figcaption&gt;Пример календаря выплат по облигациям в HTML-формате (дополнительно указан ключ &lt;code&gt;--html&lt;/code&gt;)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;o4SZ&quot;&gt;
    &lt;li id=&quot;KcDm&quot;&gt;&lt;strong&gt;Команда:&lt;/strong&gt; &lt;code&gt;tksbrokerapi -v 10 --calendar [список облигаций]&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;x3o8&quot;&gt;Ключ &lt;code&gt;--calendar&lt;/code&gt; (или &lt;code&gt;-c&lt;/code&gt;) используется для построения календаря платежей по облигациям в виде таблицы. Строится общий календарь для перечисленных в списке тикеров или FIGI облигаций, либо для всех доступных пользователю облигаций сразу, если список не задан. Если календарь строится более чем для одной облигации, то платежи за один и тот же месяц группируются.&lt;/p&gt;
  &lt;p id=&quot;gAex&quot;&gt;Затем календарь экспортируется в XLSX-файл для дальнейшего анализа датасайентистами или биржевыми аналитиками (по умолчанию: &lt;code&gt;calendar.xlsx&lt;/code&gt;). Заголовки календаря приводятся в человеко-читаемый формат. Что они означают, можно узнать из документации (раздел &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop?tab=readme-ov-file#%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C-%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D1%8C-%D0%B2%D1%8B%D0%BF%D0%BB%D0%B0%D1%82-%D0%BF%D0%BE-%D0%BE%D0%B1%D0%BB%D0%B8%D0%B3%D0%B0%D1%86%D0%B8%D1%8F%D0%BC&quot; target=&quot;_blank&quot;&gt;«Построить календарь выплат по облигациям»&lt;/a&gt;).&lt;/p&gt;
  &lt;ul id=&quot;6eey&quot;&gt;
    &lt;li id=&quot;4sHL&quot;&gt;&lt;strong&gt;Пример &lt;/strong&gt;календаря выплат по облигациям:&lt;/li&gt;
    &lt;ul id=&quot;UEOD&quot;&gt;
      &lt;li id=&quot;lM5f&quot;&gt;в XLSX-формате: &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/media/calendar.xlsx&quot; target=&quot;_blank&quot;&gt;./docs/media/calendar.xlsx&lt;/a&gt;&lt;/code&gt;;&lt;/li&gt;
      &lt;li id=&quot;Lhhn&quot;&gt;в Markdown-формате: &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/media/calendar.md&quot; target=&quot;_blank&quot;&gt;./docs/media/calendar.md&lt;/a&gt;&lt;/code&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;i04U&quot;&gt;Получаем историю цен инструмента&lt;/h3&gt;
  &lt;figure id=&quot;lJ0i&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/93/1c/931ccb82-4ebe-4125-99d5-6557c8c107a1.png&quot; width=&quot;1661&quot; /&gt;
    &lt;figcaption&gt;Примеры интерактивного и статического графика цен, построенные с помощью модуля PriceGenerator в TKSBrokerAPI&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;Tf0b&quot;&gt;
    &lt;li id=&quot;Y7dc&quot;&gt;&lt;strong&gt;Команда:&lt;/strong&gt; &lt;code&gt;tksbrokerapi -v 10 --ticker [тикер] --history 2022-10-15 2022-10-17 --interval hour --output hour.csv --render-chart interact&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;msTZ&quot;&gt;В TKSBrokerAPI можно работать с историческими данными в формате OHLCV-свечей, а также строить интерактивные или статические графики. Для получения данных используются ключи &lt;code&gt;--ticker&lt;/code&gt; или &lt;code&gt;--figi для указания инструмента, --interval&lt;/code&gt; для задания интервала свечи. Данные можно загрузить с сервера брокера (ключ &lt;code&gt;--history&lt;/code&gt;) или из локального CSV-файла (ключ &lt;code&gt;--load-history&lt;/code&gt;).&lt;/p&gt;
  &lt;p id=&quot;FwmT&quot;&gt;История скачивается между двумя датами в формате &lt;code&gt;YYYY-MM-DD&lt;/code&gt; и сохраняется в CSV или возвращается как Pandas DataFrame. Сервер брокера по умолчанию использует время в формате ISO UTC. Поддерживается докачка исторических данных.&lt;/p&gt;
  &lt;p id=&quot;YwHf&quot;&gt;Для визуализации цен на графиках используется ключ &lt;code&gt;--render-chart&lt;/code&gt; совместно с ключами &lt;code&gt;--history&lt;/code&gt; или &lt;code&gt;--load-history&lt;/code&gt;. Графики создаются с помощью &lt;a href=&quot;https://teletype.in/@tgilmullin/PriceGenerator&quot; target=&quot;_blank&quot;&gt;платформы PriceGenerator&lt;/a&gt; и по умолчанию сохраняются в файл &lt;code&gt;index.html&lt;/code&gt;. На графиках отображаются базовые статистические значения и индикаторы, что помогает поверхностно оценить поведение цены в заданном диапазоне.&lt;/p&gt;
  &lt;ul id=&quot;CO9r&quot;&gt;
    &lt;li id=&quot;lKeS&quot;&gt;&lt;strong&gt;Пример&lt;/strong&gt; CSV-файла с историческими данными (порядок заголовков: &lt;code&gt;Date&lt;/code&gt;, &lt;code&gt;Time&lt;/code&gt;, &lt;code&gt;Open&lt;/code&gt;, &lt;code&gt;High&lt;/code&gt;, &lt;code&gt;Low&lt;/code&gt;, &lt;code&gt;Close&lt;/code&gt;, &lt;code&gt;Volume&lt;/code&gt;): &lt;code&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/media/GAZP_hour.csv&quot; target=&quot;_blank&quot;&gt;./docs/media/GAZP_hour.csv&lt;/a&gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;sZXS&quot;&gt;Таким образом, TKSBrokerAPI предоставляет удобные инструменты для анализа исторических данных и их визуализации, что упрощает и ускоряет исследование рыночной динамики.&lt;/p&gt;
  &lt;p id=&quot;riVt&quot;&gt;Вопрос о том, какие методы и инструменты лучше использовать для аналитических исследований и технического анализа, выходит за рамки этой статьи. Однако, независимо от вашего выбора, платформа TKSBrokerAPI поможет как с получением «сырых» данных, так и с автоматизацией вашей торговой стратегии.&lt;/p&gt;
  &lt;figure id=&quot;fEPr&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/f5/cff53c7d-dda7-44c0-af46-5dbcc8d7542b.png&quot; width=&quot;2484&quot; /&gt;
    &lt;figcaption&gt;Платформа &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;TKSBrokerAPI&lt;/a&gt;. Наш девиз: Технологии · Знания · Наука (Technologies · Knowledge · Science)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KiEg&quot;&gt;На этом всё, а если у вас появились вопросы по работе платформы TKSBrokerAPI, то вы можете задать их на GitHub в разделе 👉 &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/issues/new&quot; target=&quot;_blank&quot;&gt;Issues&lt;/a&gt; 👈 (также подписывайтесь на блог разработчиков: &lt;a href=&quot;https://t.me/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;t.me/TKSBrokerAPI&lt;/a&gt;).&lt;/p&gt;
  &lt;p id=&quot;C71b&quot;&gt;Успехов вам в автоматизации биржевой торговли! И профита! 🚀 😉✌️&lt;/p&gt;
  &lt;p id=&quot;2Xig&quot;&gt;⚙ Ссылка на проект: &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;github.com/Tim55667757/TKSBrokerAPI&lt;/a&gt;&lt;br /&gt;🎁 Поддержать проект: &lt;a href=&quot;https://yoomoney.ru/to/410015019068268&quot; target=&quot;_blank&quot;&gt;yoomoney.ru/to/410015019068268&lt;/a&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;yzQv&quot;&gt;
    &lt;tt-tag name=&quot;платформа&quot;&gt;#платформа&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;tksbrokerapi&quot;&gt;#tksbrokerapi&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;python&quot;&gt;#python&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;pandas&quot;&gt;#pandas&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;математика&quot;&gt;#математика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;datascience&quot;&gt;#datascience&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;обогащение&quot;&gt;#обогащение&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;расширение&quot;&gt;#расширение&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;данные&quot;&gt;#данные&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;демо&quot;&gt;#демо&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>tgilmullin:TKSBrokerAPI-Demo-Scenario</id><link rel="alternate" type="text/html" href="https://teletype.in/@tgilmullin/TKSBrokerAPI-Demo-Scenario?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=tgilmullin"></link><title>TKSBrokerAPI: пишем простой сценарий для торговли на бирже</title><published>2025-01-28T21:50:21.938Z</published><updated>2025-01-30T14:40:24.533Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/c7/ad/c7ad9266-24da-4efd-a242-c8d2d14d4bd0.png"></media:thumbnail><tt:hashtag>платформа</tt:hashtag><tt:hashtag>tksbrokerapi</tt:hashtag><tt:hashtag>python</tt:hashtag><tt:hashtag>pandas</tt:hashtag><tt:hashtag>математика</tt:hashtag><tt:hashtag>datascience</tt:hashtag><tt:hashtag>трейдинг</tt:hashtag><tt:hashtag>сценарии</tt:hashtag><tt:hashtag>скрипты</tt:hashtag><tt:hashtag>демо</tt:hashtag><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/39/97/39970c50-41e1-4ac7-bb2a-9e12f84b71e5.jpeg&quot;&gt;В прошлой статье я рассказал про опенсорс разработку — платформу ⚙️ TKSBrokerAPI для работы с Tinkoff Invest API через REST протокол. А в этой статье покажу, как можно автоматизировать с её помощью простейший сценарий биржевой торговли.</summary><content type="html">
  &lt;figure id=&quot;l7p1&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/39/97/39970c50-41e1-4ac7-bb2a-9e12f84b71e5.jpeg&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#1ZXq&quot;&gt;Введение&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#IWGx&quot;&gt;С чего начать&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#ETn6&quot;&gt;Пример реализации абстрактного сценария&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;1ZXq&quot;&gt;Введение&lt;/h2&gt;
  &lt;p id=&quot;Orux&quot;&gt;&lt;a href=&quot;https://teletype.in/@tgilmullin/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;В прошлой статье&lt;/a&gt; я рассказал про опенсорс разработку — платформу ⚙️ &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;TKSBrokerAPI&lt;/strong&gt;&lt;/a&gt; для работы с Tinkoff Invest API через REST протокол. Также этим инструментом можно пользоваться из консоли или встраивать его в CI/CD-системы для автоматизации рутинных операций на бирже.&lt;/p&gt;
  &lt;p id=&quot;luTP&quot;&gt;С помощью TKSBrokerAPI вы можете реализовать на языке Python любой торговый или аналитический сценарий. В сегодняшней статье я хочу показать для разработчиков некоторые возможности этого инструмента, на примере абстрактного торгового сценария.&lt;/p&gt;
  &lt;p id=&quot;l2CZ&quot;&gt;Неважно какую систему принятия торговых решений о покупке или продаже вы используете. Это может быть технический анализ, нейросети, парсинг отчётов или слежение за сделками других трейдеров. Но всё равно вам потребуется выполнять базовые торговые операции: получать рыночные данные, выставлять лимитные и стоп-ордера, открывать и закрывать сделки по рынку. Модуль TKSBrokerAPI будет выступать как посредник между кодом с логикой торгов и сервисной инфраструктурой брокера, а также выполнять рутинные задачи от вашего имени в &lt;a href=&quot;https://tinkoff.ru/sl/AaX1Et1omnH&quot; target=&quot;_blank&quot;&gt;брокерском аккаунте&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;JrY1&quot;&gt;&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/tree/develop?tab=readme-ov-file#%D0%9A%D0%B0%D0%BA-Python-API-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F-TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;Схема разработки&lt;/a&gt; с помощью TKSBrokerAPI очень простая:&lt;/p&gt;
  &lt;ol id=&quot;mCG6&quot;&gt;
    &lt;li id=&quot;aeXk&quot;&gt;Вы придумываете гениальный торговый алгоритм.&lt;/li&gt;
    &lt;li id=&quot;spEN&quot;&gt;Записываете его пошагово в виде некоторого плана или торгового сценария.&lt;/li&gt;
    &lt;li id=&quot;abtC&quot;&gt;Автоматизируете сценарий на Python при помощи TKSBrokerAPI.&lt;/li&gt;
    &lt;li id=&quot;tUxD&quot;&gt;TKSBrokerAPI берёт на себя всю работу с инфраструктурой брокера Тинькофф Инвестиции.&lt;/li&gt;
    &lt;li id=&quot;ZLpg&quot;&gt;Профит!&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;wDA5&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/c8/bac86ec4-9c94-4d0d-93e3-06fb2ac9b6c1.png&quot; width=&quot;2192&quot; /&gt;
    &lt;figcaption&gt;Схема разработки с помощью TKSBrokerAPI&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;IWGx&quot;&gt;С чего начать&lt;/h2&gt;
  &lt;p id=&quot;rmdN&quot;&gt;Проще всего установить TKSBrokerAPI через PyPI:&lt;/p&gt;
  &lt;p id=&quot;HsdG&quot;&gt;&lt;code&gt;pip install tksbrokerapi&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;2kFl&quot;&gt;Либо скачать код проекта TKSBrokerAPI из &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;GitHub-репозитория&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;WYrj&quot;&gt;Перед тем, как использовать API, вам нужно &lt;a href=&quot;https://tinkoff.ru/sl/AaX1Et1omnH&quot; target=&quot;_blank&quot;&gt;создать аккаунт&lt;/a&gt; у брокера Тинькофф Инвестиции. Для аутентификации через API вам также понадобятся &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI?tab=readme-ov-file#%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F&quot; target=&quot;_blank&quot;&gt;токен и идентификатор счёта пользователя&lt;/a&gt;. Далее можно ознакомиться с &lt;a href=&quot;https://tim55667757.github.io/TKSBrokerAPI/docs/tksbrokerapi/TKSBrokerAPI.html&quot; target=&quot;_blank&quot;&gt;полной документацией&lt;/a&gt; по всем доступным свойствам и методам TKSBrokerAPI. Соответствие методов консольным ключам также можно посмотреть в документации в разделе «&lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI?tab=readme-ov-file#%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&quot; target=&quot;_blank&quot;&gt;Основные возможности&lt;/a&gt;».&lt;/p&gt;
  &lt;p id=&quot;9p1s&quot;&gt;❗ Важное замечание: платформа TKSBrokerAPI не предназначена для высокочастотной (HFT) торговли, из-за &lt;a href=&quot;https://tinkoff.github.io/investAPI/limits/&quot; target=&quot;_blank&quot;&gt;системы динамического формирования лимитов&lt;/a&gt; для пользователей Tinkoff Invest API. В среднем, это 50–300 запросов в секунду, в зависимости от их типа, что очень мало для требований к скоростям HFT (хотя брокер и даёт &lt;a href=&quot;https://tinkoff.github.io/investAPI/speedup/&quot; target=&quot;_blank&quot;&gt;несколько рекомендаций&lt;/a&gt; по ускорению исполнения поручений). Однако вы вполне можете использовать её для автоматизации своих интрадей, кратко-, средне- и долгосрочных торговых стратегий.&lt;/p&gt;
  &lt;h2 id=&quot;ETn6&quot;&gt;Пример реализации абстрактного сценария&lt;/h2&gt;
  &lt;p id=&quot;3IN9&quot;&gt;Так как функциональность TKSBrokerAPI достаточно обширная, то не хочется акцентировать внимание на конкретных торговых сценариях, а лишь указать некоторые возможности для их автоматизации. Давайте рассмотрим один сценарий, основанный на сравнении объёмов текущих покупок и продаж в биржевом стакане, и реализуем его при помощи API, без использования дополнительных методов технического анализа.&lt;/p&gt;
  &lt;p id=&quot;hBFB&quot;&gt;Действия будут следующие:&lt;/p&gt;
  &lt;ul id=&quot;VgcW&quot;&gt;
    &lt;li id=&quot;G4D8&quot;&gt;запросить текущий портфель клиента и определить доступные для торговли средства;&lt;/li&gt;
    &lt;li id=&quot;wzOI&quot;&gt;запросить стакан цен с глубиной 20 для выбранных инструментов, например, акции с тикерами YNDX, IBM и GOOGL;&lt;/li&gt;
    &lt;li id=&quot;lUg5&quot;&gt;если инструмент ранее ещё не был куплен, то проверить:&lt;/li&gt;
    &lt;ul id=&quot;IVJy&quot;&gt;
      &lt;li id=&quot;CBFk&quot;&gt;если резерв денежных средств (свободный кеш) в валюте инструмента больше, чем 5% от общей стоимости всех инструментов в этой валюте, то проверить:&lt;/li&gt;
      &lt;ul id=&quot;NNaN&quot;&gt;
        &lt;li id=&quot;B3IE&quot;&gt;если в стакане объёмы на покупку больше объёмов на продажу минимум на 10%, то купить 1 акцию по рынку и выставить тейк-профит как стоп-ордер на 3% выше текущей цены покупки со сроком действия 1 час;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;urlI&quot;&gt;если инструмент имеется в списке открытых позиций, то проверить:&lt;/li&gt;
    &lt;ul id=&quot;Z7oQ&quot;&gt;
      &lt;li id=&quot;LAkJ&quot;&gt;если текущая цена уже выше средней цены позиции хотя бы на 2.5%, то выставить отложенный лимитный ордер на весь объём, но ещё чуть выше (на 0.1%) от текущей цены, чтобы позиция закрылась с профитом с большой вероятностью в течении текущей торговой сессии;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;6lKc&quot;&gt;после всех торговых операций напечатать в консоль текущее состояние портфеля пользователя;&lt;/li&gt;
    &lt;li id=&quot;dBop&quot;&gt;пауза и повтор всех действий выше, пока длится рабочее время биржи.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;cJmZ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/62/0e/620e8218-7845-4a2f-ae98-f7af0f984311.png&quot; width=&quot;559&quot; /&gt;
    &lt;figcaption&gt;Визуализация шагов алгоритма в виде блок-схемы&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;q2Ws&quot;&gt;Чтобы разобраться в примере, запустите скрипт &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/scenario1.py&quot; target=&quot;_blank&quot;&gt;./docs/examples/scenario1.py&lt;/a&gt;. Перед запуском замените &lt;code&gt;token&lt;/code&gt; и &lt;code&gt;accountId&lt;/code&gt; в коде на свои.&lt;/p&gt;
  &lt;p id=&quot;nEUT&quot;&gt;Скрипт написан на Python и реализует торговый алгоритм шаг за шагом. Код содержит комментарии и ссылки на методы API, что упрощает изучение. Не обращайте внимания на объём: большая часть — это пояснения и логи, которые можно убрать или упростить в реальном проекте. Основной алгоритм останется компактным и понятным — в нём используется классическая императивная парадигма программирования.&lt;/p&gt;
  &lt;p id=&quot;QcPv&quot;&gt;&lt;strong&gt;Как устроен пример&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;FDPc&quot;&gt;
    &lt;li id=&quot;vyzW&quot;&gt;Это линейный скрипт — команды выполняются последовательно.&lt;/li&gt;
    &lt;li id=&quot;nvRD&quot;&gt;Параметры задаются в начале, затем идут торговые операции.&lt;/li&gt;
    &lt;li id=&quot;YSVR&quot;&gt;Плюс подхода: простота. Всё сразу видно, как в инструкции.&lt;/li&gt;
    &lt;li id=&quot;TUpT&quot;&gt;Минус: если логика сложная (много условий и ветвлений), код станет запутанной «портянкой».&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;eDsa&quot;&gt;&lt;strong&gt;Альтернатива &lt;/strong&gt;— использовать парадигму ООП (объектно-ориентированного подхода к программированию). Если не нравится линейный стиль, тот же сценарий можно переписать с помощью классов.&lt;/p&gt;
  &lt;ul id=&quot;WqqA&quot;&gt;
    &lt;li id=&quot;COKd&quot;&gt;Создайте класс &lt;code&gt;TradeScenario&lt;/code&gt;, унаследовав его от &lt;code&gt;TinkoffBrokerServer&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;MPMt&quot;&gt;В качестве полей класса задайте имена констант из первого примера.&lt;/li&gt;
    &lt;li id=&quot;Hf7k&quot;&gt;Каждый шаг алгоритма оформите отдельным методом (например, &lt;code&gt;_GetPortfolio()&lt;/code&gt;, &lt;code&gt;_CalculateFreeFunds()&lt;/code&gt;, &lt;code&gt;_GetOrderBook()&lt;/code&gt;, &lt;code&gt;_OpenBuyMarketPosition()&lt;/code&gt;, &lt;code&gt;_OpenSellMarketPosition()&lt;/code&gt; и другие).&lt;/li&gt;
    &lt;li id=&quot;N84z&quot;&gt;В методе &lt;code&gt;run()&lt;/code&gt; объедините вызовы этих методов.&lt;/li&gt;
    &lt;li id=&quot;HQeU&quot;&gt;В блоке &lt;code&gt;if __name__ == &amp;quot;__main__&amp;quot;:&lt;/code&gt; при запуске скрипта создайте объект класса, задайте параметры и вызовите &lt;code&gt;run()&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;5xpO&quot;&gt;&lt;strong&gt;Результат&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;t3SY&quot;&gt;
    &lt;li id=&quot;atku&quot;&gt;Код станет модульным — части можно будет тестировать отдельно.&lt;/li&gt;
    &lt;li id=&quot;1E93&quot;&gt;Сложные сценарии будет проще читать и изменять.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;786p&quot;&gt;Пример ООП-реализации смотрите в скрипте &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/scenario1a.py&quot; target=&quot;_blank&quot;&gt;./docs/examples/scenario1a.py&lt;/a&gt;.&lt;/p&gt;
  &lt;figure id=&quot;GBiZ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/f5/cff53c7d-dda7-44c0-af46-5dbcc8d7542b.png&quot; width=&quot;2484&quot; /&gt;
    &lt;figcaption&gt;Платформа &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;TKSBrokerAPI&lt;/a&gt;. Наш девиз: Технологии · Знания · Наука (Technologies · Knowledge · Science)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3MYQ&quot;&gt;На этом всё, а если у вас появились вопросы по работе платформы TKSBrokerAPI, то вы можете задать их на GitHub в разделе 👉 &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI/issues/new&quot; target=&quot;_blank&quot;&gt;Issues&lt;/a&gt; 👈 (также подписывайтесь на блог разработчиков: &lt;a href=&quot;https://t.me/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;t.me/TKSBrokerAPI&lt;/a&gt;).&lt;/p&gt;
  &lt;p id=&quot;XtqD&quot;&gt;Успехов вам в автоматизации биржевой торговли! И профита! 🚀 😉✌️&lt;/p&gt;
  &lt;p id=&quot;KEVL&quot;&gt;⚙ Ссылка на проект: &lt;a href=&quot;https://github.com/Tim55667757/TKSBrokerAPI&quot; target=&quot;_blank&quot;&gt;github.com/Tim55667757/TKSBrokerAPI&lt;/a&gt;&lt;br /&gt;🎁 Поддержать проект: &lt;a href=&quot;https://yoomoney.ru/to/410015019068268&quot; target=&quot;_blank&quot;&gt;yoomoney.ru/to/410015019068268&lt;/a&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;yck4&quot;&gt;
    &lt;tt-tag name=&quot;платформа&quot;&gt;#платформа&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;tksbrokerapi&quot;&gt;#tksbrokerapi&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;python&quot;&gt;#python&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;pandas&quot;&gt;#pandas&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;математика&quot;&gt;#математика&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;datascience&quot;&gt;#datascience&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;трейдинг&quot;&gt;#трейдинг&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;сценарии&quot;&gt;#сценарии&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;скрипты&quot;&gt;#скрипты&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;демо&quot;&gt;#демо&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry></feed>