惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
量子位
腾讯CDC
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
The Hacker News
The Hacker News
T
The Exploit Database - CXSecurity.com
B
Blog
S
SegmentFault 最新的问题
P
Privacy & Cybersecurity Law Blog
T
Threatpost
博客园 - 聂微东
T
Tailwind CSS Blog
The Last Watchdog
The Last Watchdog
C
Check Point Blog
N
Netflix TechBlog - Medium
D
DataBreaches.Net
爱范儿
爱范儿
IT之家
IT之家
S
Secure Thoughts
M
MIT News - Artificial intelligence
NISL@THU
NISL@THU
C
Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
有赞技术团队
有赞技术团队
A
Arctic Wolf
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Proofpoint News Feed
Spread Privacy
Spread Privacy
Schneier on Security
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
雷峰网
雷峰网
Project Zero
Project Zero
博客园 - Franky
H
Heimdal Security Blog
A
About on SuperTechFans
Security Latest
Security Latest
Webroot Blog
Webroot Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Почему алгоритмы сливают твой депозит? 3 причины, о которых молчат «успешные» бэктесты
negrbluad · 2026-05-23 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение8 мин

Охват и читатели12K

Аналитика

Алгоритмический трейдинг давно превратился в новую форму цифровой мечты. Сегодня буквально каждый второй новичок уверен, что достаточно найти «правильный» индикатор, запустить Python-скрипт, подключить API биржи - и рынок начнёт стабильно печатать деньги. Именно поэтому интернет переполнен бесконечными скриншотами красивых equity curve, фантастических процентов доходности и «секретных» торговых систем, которые якобы делают сотни процентов годовых практически без риска.

Реальный рынок уничтожает такие системы с пугающей регулярностью.

Причём почти всегда сценарий одинаковый. На истории стратегия выглядит великолепно. Бэктест показывает стабильный рост. Просадки минимальны. Profit Factor высокий. Winrate более 50%. Но как только алгоритм выходит в реальную торговлю - начинается катастрофа. Сделки открываются хуже, сигналы приходят позже, комиссии съедают прибыль, а спустя несколько недель депозит начинает медленно превращаться в ноль.

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

В этой статье разберём три главные причины, из-за которых большинство торговых алгоритмов в конечном итоге уничтожают депозит. Делать это будем на примере реального Python-скрипта для торговли ETHUSDT, основанного на Bollinger Bands, RSI, CSI, ATR и кластерном анализе рыночного настроения.

Если хотите сначала ознакомиться с системой - welcome на github


Как устроен этот алгоритм

Система выглядит достаточно серьёзно. Она загружает исторические свечи через Binance API, рассчитывает индикаторы, определяет рыночное настроение, фильтрует сигналы и управляет позицией через стопы и трейлинг.

Основная идея стратегии заключается в поиске перепроданности внутри сильного рыночного импульса. Алгоритм анализирует положение цены относительно Bollinger Bands, оценивает силу движения через CSI, дополнительно фильтрует входы по RSI и использует кластерный анализ для подтверждения направления рынка.

Сигнал на LONG выглядит следующим образом:

long_cond = (
    row['close'] < row['lower'] and
    row['CSI'] > 0 and row['CSI'] > prev_row['CSI'] and
    cluster.startswith('bull') and row['RSI'] < rsi_thr
)

Если говорить простым языком, система пытается находить моменты, когда цена локально перегрета вниз, но внутри рынка всё ещё сохраняется бычье давление. Далее открывается позиция, рассчитывается ATR-стоп, тейк-профит и включается трейлинг.

После завершения тестирования алгоритм считает статистику:

win_rate
profit_factor
sharpe_ratio
max_drawdown
net_pnl

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

Причина №1. Looking Forward - самая страшная ошибка в алготрейдинге

Looking Forward - это фундаментальная ошибка, которая способна превратить абсолютно убыточную систему в «грааль» на истории. Именно из-за неё огромное количество бэктестов являются откровенно фальшивыми, даже если автор стратегии сам этого не понимает.

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

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

На бумаге такие системы выглядят великолепно. В реальности - практически всегда умирают.

Особенно часто эта проблема встречается у новичков, работающих с индикаторами. Например, человек пишет:

df['signal'] = df['close'] > df['ma']

После чего открывает сделку на этой же свече.

На истории всё выглядит идеально. Но в реальном рынке свеча ещё не закрылась. Скользящая средняя продолжает изменяться. Цена внутри свечи может улететь в любую сторону. В итоге сигнал, который «идеально» существовал в бэктесте, в реальной торговле просто никогда не появится.

Именно так рождаются красивые, но абсолютно бесполезные equity curve.

Это особенно критично на низких таймфреймах. На 1m, 3m и 5m свечах рынок способен полностью поменять структуру буквально за несколько секунд. Индикатор, который секунду назад показывал уверенный LONG, через мгновение уже рисует SHORT.

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

В рассматриваемом скрипте эта проблема частично решена корректно:

prev_row = hist_df.iloc[-2] #закрытая свеча - индекс -2
row = hist_df.iloc[-1]  #незакрытая свеча - индекс -1. Опасная ошибка!

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

Самое опасное здесь то, что Looking Forward очень легко не заметить. Многие стратегии выглядят абсолютно честными, хотя внутри используют будущие данные буквально в одном-двух местах. Но даже этого достаточно, чтобы полностью сломать достоверность результатов.

Именно поэтому к любому «идеальному» бэктесту нужно относиться максимально подозрительно.


Причина №2. Комиссии уничтожат твою прибыль

Это одна из самых недооценённых проблем в алгоритмическом трейдинге. Большинство новичков вообще не воспринимают комиссии всерьёз. Многие искренне считают, что 0.1% - это практически ноль.

На практике именно эти «незначительные» проценты и убивают большую часть LTF-алгоритмов.

Особенно смешно выглядят скальперские стратегии, которые зарабатывают 0.2–0.3% на сделку и при этом вообще не учитывают комиссии. Это абсолютно неправильный подход. Такая система изначально не имеет права называться прибыльной.

В рассматриваемом скрипте комиссии учитываются следующим образом:

TAKER_FEE = 0.0006

Далее они вычитаются из результата каждой сделки:

trades_df['fee_%'] = (TAKER_FEE + TAKER_FEE) * LEVERAGE * 100

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

Теперь представим простую ситуацию. Стратегия делает 10–20 сделок в день. Средний профит сделки составляет 0.25%. Комиссия на вход и выход - 0.1%. А на многих тир1 биржах комиссия бывает достигает и 0.11-0.15%. Получается, что почти вся прибыль моментально уходит бирже.

А если добавить к этому проскальзывание, спред, funding и задержки исполнения - стратегия становится убыточной даже при хорошем winrate. Именно поэтому огромное количество «прибыльных» бэктестов никогда не переживают реальную торговлю.

Особенно жестоко комиссии уничтожают любые низкотаймфреймовые системы. Скальпинг, сетки, mean reversion, агрессивный DCA - всё это невероятно чувствительно к торговым издержкам. Иногда снижение комиссии буквально на несколько сотых процента полностью меняет итоговую доходность системы.

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

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

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

В рассматриваемом скрипте даже моделируется проскальзывание:

slippage = current_atr * 0.05

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


Причина №3. Маленькая выборка и DCA почти всегда заканчиваются катастрофой

Это ещё одна критическая ошибка, которая уничтожает огромное количество торговых систем. Особенно связанных с усреднением и DCA.

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

Рынок никогда не бывает одинаковым.

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

Особенно опасно здесь выглядит DCA.

На истории DCA почти всегда выглядит великолепно. Equity curve растёт плавно. Просадки небольшие. Сделки вытягиваются усреднением. Возникает ощущение, будто стратегия вообще не может проиграть.

Именно это делает DCA настолько опасным. Например, тест одной из моих реальных торговых DCA систем пришёлся на период сентябрь-октябрь. И именно 10 октября просто ликвидировало весь депозит, забрав прибыль. Причём это сделал бы и любой другой пролив. Да, это система работала почти без комиссий благодаря маркетмейкер типу аккаунта на бирже, что давало преимущество в торговле. Именно поэтому видим столь сильный результат без просадок (с поправкой на временной шаг учёта, небольшие просадки в моменте всё равно были). Но всё обнуляется одной новостью!

equity curve DCA

equity curve DCA

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

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

Достаточно вспомнить крах FTX, обвал Luna, ковидный panic dump или ликвидационные каскады на рынке криптовалют. В такие моменты рынок способен двигаться намного дольше, чем хватает капитала у алгоритма.

Именно тогда DCA превращается в машину для ликвидации.

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

Это создаёт крайне опасную иллюзию надёжности.

Отдельная проблема - переоптимизация параметров. В рассматриваемом скрипте используется brute-force перебор огромного количества комбинаций:

for bb_p in param_grid['bb_period']:
  for rsi_period in param_grid['rsi_period']:
     backtest()

Далее перебираются RSI, Bollinger Bands, стопы, тейки, trailing и множество других параметров.

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

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

Именно поэтому слишком красивые бэктесты должны вызывать подозрение, а не восторг.


Как должна выглядеть нормальная алгоритмическая система

Хорошая алгоритмическая система вообще не должна быть слишком сложной. Чем больше параметров, фильтров и условий - тем выше вероятность того, что алгоритм просто подгоняется под прошлое.

Сегодня огромное количество новичков продолжают строить стратегии исключительно на классических индикаторах вроде RSI, MACD, EMA или Bollinger Bands. Проблема в том, что рынок давно адаптировался к этим инструментам. Эти сигналы видят все. Их обрабатывают HFT-фонды, маркет-мейкеры и алгоритмические платформы с задержками в миллисекунды.

Индикаторы - это производная от цены. Они почти всегда запаздывают.

Именно поэтому торговля «по индикаторам» постепенно теряет актуальность.

Гораздо интереснее выглядят системы, работающие с реальной структурой рынка: order flow, ликвидациями, funding, open interest, потоками ликвидности, ончейн-метриками и кластерным анализом. Потому что такие данные позволяют анализировать причину движения цены, а не просто рисовать линии поверх графика.

Именно это сегодня постепенно становится основой нормального quantitative trading.

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

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

Именно поэтому красивые бэктесты почти ничего не значат без адекватной проверки. Рынок очень быстро наказывает за самообман. Особенно когда человеку начинает казаться, что он нашёл «идеальную» систему.

Спойлер: идеальных систем не существует.