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

Любая торговая стратегия в бесконечной временной перспективе стремится к нулевому матожиданию сделки: ничего не заработали, заплатили комиссию бирже. Можно предположить, что это связано с утечкой информации, стратегию применяют другие участники рынка и забирают ликвидность. Но дело в другом: это фундаментальный закон больших чисел. Объем рынка подлежит прогнозу, а значит это конечная сумма. При игре с конечной суммой капитал на рынке постоянен и только мигрирует между участниками: твой заработок — это чей-то убыток.
Посмотрите на график: рост дохода портфеля сначала растет, потом упирается в плато без выраженного движения вверх или вниз. Ближайшая аналогия: предмет, подброшенный вверх, при балансе ускорения и гравитации останавливается в точке, а потом падает вниз.
Игра с конечной суммой
Любая эффективная quant-стратегия — это эксплойт неэффективности рынка. Как только эксплойтом пользуются все — неэффективность исчезает, потому что её ровно и создавало то, что её никто не арбитражил. Рынок приходит в равновесие. А равновесие для участника означает простую вещь: математическое ожидание сделки становится нулём минус комиссия биржи. Не «маленькая прибыль», а строго отрицательное число.
Побег в игру с растущей суммой
Выход из этой ловушки один: смотреть на то, что приносит в систему деньги извне, а не перераспределяет уже имеющиеся. Можно подумать, что это бухгалтерские отчёты компаний или фондов, но нет: публикация бухгалтерии не гарантирует детерминированное поведение участников рынка. Математически гарантия растущей суммы игры — прямая рекомендация на публику, если её размер стремится к бесконечности.
Едем в рай на чужом горбу
Ранее я разбирал stop hunting паттерн по сбору ликвидности: участникам рынка публикуют пост с паническими настроениями для массовой распродажи, как следствие актив можно единовременно выкупить дешевле. Но заработать так же можно и на эйфории.
|
Metric |
Value |
|---|---|
|
Total trades |
22 |
|
Wins / Losses |
15 / 7 |
|
Winrate |
68% |
|
Mean trade PNL |
+2.374% |
|
Std dev per trade |
7.676% |
|
Sharpe Ratio (per-trade) |
+0.302 |
Телеграм-канал публикует сигналы, они удачные в 68% случаев. Рядовой вкладчик не будет смотреть дальше. А это ловушка: риск-менеджмент вовсе не страхует от сценария чёрного лебедя.
Риски:
-
Высокая волатильность относительно средней прибыли
Средняя сделка +2.37%, но стандартное отклонение ±7.86%. Один-два сильных убытка легко съедают прибыль десятка мелких выигрышей, а winrate при этом остаётся «красивым».
-
Низкий Sharpe = слабая компенсация риска
Sharpe 0.3 говорит о том, что прибыль недостаточно велика по сравнению с принимаемым риском. Хороший трейдинг стремится к Sharpe > 1.0.
Это другой паттерн использования ликвидности толпы: pump and dump. Проверим гипотезу, выбрав только те сигналы, когда цена актива за предыдущие N часов уже росла.
|
Metric |
Value |
|---|---|
|
Total trades |
11 |
|
Wins / Losses |
11 / 0 |
|
Winrate |
100% |
|
Mean trade PNL |
+6.972% |
|
Std dev per trade |
8.642% |
|
Sharpe Ratio (per-trade) |
+0.807 |
Что улучшилось:
-
Sharpe Ratio вырос в 2.67 раза (0.302 → 0.807)
Теперь прибыль гораздо лучше компенсирует принимаемый риск.
-
Средняя сделка стала почти в 3 раза прибыльнее (+2.37% → +6.97%)
Ушли просадки портфеля: меньше убыточных сделкок
Рост цены за последние N часов это эмпирический критерий. Я знал куда смотреть заранее, но анализ матрицы постов рекомендательного характера я не делал. Если взять топ 100 каналов, используя время публикации и направление рекомендации можно вычислить одного автора за несколькими анонимными аккаунтами. Далее, с привязкой к однуму автору, можно узнать, сколько еще каналов он потенциально способен использовать для продолжения пампа
Как на этом заработать
Используя self enforcement runtime, парсер и высокопроизводительный бектест можно актуализировать эмпирические критерии входа автоматически. Парсер канала вытаскивает из текста направление, зону входа, цели и стоп простыми regex-правилами:
const SIGNAL_FORMAT: ParseFormat<SignalFields> = { symbol: { pattern: /#([A-Z0-9]+)\/USDT/, group: 1, }, direction: { pattern: /(ШОРТ|ЛОНГ)/i, transform: (raw) => (raw.toUpperCase() === "ШОРТ" ? "short" : "long"), }, entry: { pattern: /зоне\s+\$?([\d.,]+)\s*[-–—]\s*(?:\$?[\d.,]+\s*[-–—]\s*)?\$?([\d.,]+)(?=\s)/i, transform: (_, m) => ({ from: num(m[1]), to: num(m[2]) }), }, targets: { pattern: /Закрыть(?:\s+ордер)?\s+по(?:\s+цене)?\s+\$?([\d.,]+)/gi, transform: (_, m) => num(m[1]), multi: true, }, stoploss: { pattern: /СТОП-?ЛОСС:\s*\$?([\d.,]+)/i, transform: (_, m) => num(m[1]), },};
Высокопроизводительный бектест высчитывает метрики по pre-publication данным
const PRE_CANDLES_LIMIT = 1440; // 24h 1m свечей для baseline// окно getCandles(.., 1440) покрывает ровно сутки ДО публикации сигналаconst preCandles = await getCandles(symbol, "1m", PRE_CANDLES_LIMIT);// momentum24h — общее изменение цены за 24h до публикации.// Положительный = памп уже идёт; отрицательный = рынок падает.const momentum24hPct = ((preCandles[preCandles.length - 1].close - preCandles[0].open) / preCandles[0].open) * 100;Logger.log("pre-publication data", { momentum24hPct })
ИИ-агент программирует фильтры, меняя их как код на каждую актуализацию.
const SHORT_MIN_AVG_RANGE_PCT = 0.07;const LONG_MIN_MOMENTUM_24H_PCT = -1;// Фильтр 1: SHORT на "спящем" активе (avgRange < 0.07% за сутки, как TRX) —// тонкая ликвидность, идеальная мишень для stop-hunt. Это случай liquidity// harvesting: следовать сигналу нельзя.if (signal.direction === "short" && avgRangePct < SHORT_MIN_AVG_RANGE_PCT) { return null;}// Фильтр 2: LONG, когда цена за сутки упала больше чем на 1% — "ловля ножей".// Притока капитала нет, есть падение; подписчиков заводят против тренда.if (signal.direction === "long" && momentum24hPct < LONG_MIN_MOMENTUM_24H_PCT) { return null;}
Фильтр 1 ловит скам-режим liquidity harvesting (нулевой приток, манипуляция стопами) и говорит «не входи». Фильтр 2 ловит отсутствие фундаментального притока (рынок падает, никакого пампа нет) и тоже говорит «не входи». Остаётся ровно то, ради чего всё затевалось: сигналы, под которыми реальный приток капитала.
Итог
Памп через Telegram — это не баг рынка, который арбитрируется и исчезнет. Это поведение толпы, которое воспроизводится каждый раз, когда у автора есть аудитория. Пока есть подписчики — есть и приток. А значит, есть и фундаментальный фактор, к которому неприменима арифметика равновесия: это игра с растущей суммой.
Спасибо за внимание
ссылка на оригинал статьи https://habr.com/ru/articles/1041898/