Математика больших чисел: из игры с нулевой суммой в игру с растущей суммой. ollama.. ollama. osint.. ollama. osint. osint tools.. ollama. osint. osint tools. исскуственный интеллект.. ollama. osint. osint tools. исскуственный интеллект. исследование.. ollama. osint. osint tools. исскуственный интеллект. исследование. корреляция.. ollama. osint. osint tools. исскуственный интеллект. исследование. корреляция. матанализ.. ollama. osint. osint tools. исскуственный интеллект. исследование. корреляция. матанализ. машинное+обучение.. ollama. osint. osint tools. исскуственный интеллект. исследование. корреляция. матанализ. машинное+обучение. финансы.

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

Математика больших чисел: из игры с нулевой суммой в игру с растущей суммой - 1

Любая торговая стратегия в бесконечной временной перспективе стремится к нулевому матожиданию сделки: ничего не заработали, заплатили комиссию бирже. Можно предположить, что это связано с утечкой информации, стратегию применяют другие участники рынка и забирают ликвидность. Но дело в другом: это фундаментальный закон больших чисел. Объем рынка подлежит прогнозу, а значит это конечная сумма. При игре с конечной суммой капитал на рынке постоянен и только мигрирует между участниками: твой заработок — это чей-то убыток.

luxalgo.com

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

Игра с конечной суммой

Любая эффективная 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% случаев. Рядовой вкладчик не будет смотреть дальше. А это ловушка: риск-менеджмент вовсе не страхует от сценария чёрного лебедя.

Риски:

  1. Высокая волатильность относительно средней прибыли

    Средняя сделка +2.37%, но стандартное отклонение ±7.86%. Один-два сильных убытка легко съедают прибыль десятка мелких выигрышей, а winrate при этом остаётся «красивым».

  2. Низкий 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

Что улучшилось:

  1. Sharpe Ratio вырос в 2.67 раза (0.302 → 0.807)

    Теперь прибыль гораздо лучше компенсирует принимаемый риск.

  2. Средняя сделка стала почти в 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 — это не баг рынка, который арбитрируется и исчезнет. Это поведение толпы, которое воспроизводится каждый раз, когда у автора есть аудитория. Пока есть подписчики — есть и приток. А значит, есть и фундаментальный фактор, к которому неприменима арифметика равновесия: это игра с растущей суммой.

Спасибо за внимание

Автор: tripolskypetr

Источник