В 2026 году «купил и держал» это ставка на то, что выдержишь -40…-70% просадку без эмоционального или маржинального выхода. Рынок стал хрупким: каскады ликвидаций случаются несколько раз в год. Статичный холд больше не работает.
Если вы купили акцию за 100 долларов и она выросла на 10 %, у вас +10 долларов - всё просто и линейно. С опционами всё иначе. Опцион это обязательство продать акцию потом по фиксированной цене. Их цена меняется неравномерно: то медленно, то очень резко. Эта «кривизна» и есть главная особенность. Чем дальше до истечения опциона, тем больше этой кривизны «накоплено». Ближе к экспирации она исчезает - время работает против держателя.
Большинство учебных моделей предполагают, что цена акции меняется очень маленькими шажками - непрерывно, без телепортации. Реальность другая: цена внезапно валится. Во время такого прыжка подстроить позицию невозможно - торгов не было по промежуточным ценам. Поэтому результат на гэпе зависит больше от везения, чем от качества вашей стратегии.
Есть две большие группы клиентов:
Первая группа - пенсионные фонды и банки.
Они покупают опционы на падение, чтобы красиво отчитаться перед начальством/вкладчиками: «да, рынок упал, но у нас защита, убытки нереализованные».
Вторая группа - вкладчики компании.
Покупают продукты типа «защищённый рост»: если рынок сильно растёт - получаешь часть прибыли, если падает - ничего не теряешь (по крайней мере на бумаге).
Получается вилка - если цена растёт мы купим по более выгодной цене. Если цена падает у нас открыт SHORT от другого вкладчика
Экономика хедж-фондов создаёт специфическую структуру стимулов.
Хедж-фонд не гарантирует покрытие убытков.
2% management fee - забирают независимо от результата, даже если клиент в минусе 20% performance fee - только с прибыли (high-water mark обычно) Убытки - несёт клиент полностью
Первая часть (2% от AUM) - это "оклад за время". Чем дольше деньги в фонде и чем больше AUM, тем больше гарантированный доход.
Фонду выгодно:
Привлечь больше денег (больше AUM → больше 2%)
Держать деньги дольше (2% капает каждый год)
Показать прибыль (получить 20% от неё)
Цели 2 (держать дольше) и 3 (генерировать прибыль) конфликтуют. Фонд может держать позиции с низким риском годами, собирать 2% и не гнаться за performance fee. Многие так и делают.
Это создаёт несоответствие: фонд выигрывает от длинных периодов удержания, а капитал клиента остаётся под хвостовым риском.
Когда сразу много участников вынуждены закрывать позиции - цена начинает двигаться сама по себе, усиливая давление. Один большой гэп → хедж не успевает → большой минус → ещё больше вынужденных продаж → ещё больший гэп. Так получались известные обвалы: 2008, март 2020 и десятки локальных историй.
Чтобы уменьшить вероятность попадания в GAP нужно снизить время нахождения капитала в позиции
Для баланса между временем удержания позиции и доходностью акции можно было бы мониторить настроения рынка. Это не работает
Нет авторитетов: Настроение рынка формируется не постами одного блогера, а выборкой постов показываемая всем посетителям алгоритмом рекомендаций
Нет деанонимизации: Нет возможности различить 10 перефразированных постов с одним мнением одного человека от 10 постов с разными мнениями разных людей
Согласно гипотезе эффективного рынка из работы Eugene Fama, японские свечи уже включают в себя реакцию рынка на новости. Дело в том, что трейдер покупает на слухах и продаёт на новостях. В этом можно убедиться на практике, открыв TradingView после наступления новости: иконка с молнией (Latest News) всегда содержит предшествующее продолжительное движение цены сразу на много пунктов
Вместо долгого холда - адаптивная система
Берёт скелет стратегии с определённой логикой входа
Прогоняет бэктест на свежих данных (скользящее окно)
ИИ Анализирует логи исполнения: где сигналы работали, где нет
Модифицирует параметры на основе детекции режима
Повторяет
Определить направление на таймфрейме 4H
Дождаться распространённого ритейл-сигнала на 15M (куда входит алго-поток)
Если 15M сигнал совпадает с 4H направлением - проверить прогноз волатильности
Использовать модели реализованной волатильности (варианты GARCH, HAR-RV) с критерием QLIKE для выбора
Если σ > порога, покрывающего комиссии и проскальзывание - входить
R:R 1:1, масштабировать выход после breakeven
На длительном временном промежутке если это сведется к 50/50 с суммой 0 без прибыли по гипотеза эффективного рынка: любая публичная информация (включая паттерны, индикаторы, сигналы) уже в цене. Если RSI oversold "работает", то арбитраж будет покупать до того, как RSI достигнет 30, размывая сигнал.Стратегию нужно обновлять
Ключевое: нужно срезать в 0 время на бектест стратегии через self reinforcement runtime и ИИ так как ставка на временные неэффективности и режимную адаптацию
Адаптивный цикл не имеет состояния «готово» - параметры пересчитываются на каждой итерации под текущий режим рынка.
Фильтр волатильности (garch):
import { predict } from 'garch'; // https://www.npmjs.com/package/garch import { getCandles } from 'backtest-kit'; // https://www.npmjs.com/package/backtest-kit const candles = await getCandles(symbol, '15m', 300); const { sigma, reliable, upperPrice, lowerPrice } = predict(candles, '15m'); // sigma - ожидаемое движение цены (0.012 = 1.2%) // reliable - сошлась ли модель // upperPrice / lowerPrice - +-1 sigma коридор для следующей свечи if (!reliable) return null; // модель не адекватна данным if (sigma < 0.01) return null; // движение < 1%, не окупит fees и slippage // upperPrice и lowerPrice используем как TP/SL return { upperPrice, lowerPrice }
Связка в JavaScript:
import { addExchangeSchema, addStrategySchema, addActionSchema, Cache, Constant, commitPartialProfit, getCandles, } from "backtest-kit"; import { extract, run, toSignalDto, File } from "@backtest-kit/pinets"; import { predict } from 'garch'; const getPlotHigher = Cache.fn( async (symbol) => { return await run(File.fromPath("timeframe_4h.pine"), { symbol, timeframe: "4h", limit: 100, }); }, { interval: "4h", key: ([symbol]) => symbol }, ); const getDataHigher = async (symbol) => { const plots = await getPlotHigher(symbol); return extract(plots, { allowLong: "AllowLong", allowShort: "AllowShort", allowBoth: "AllowBoth", noTrades: "NoTrades", }); }; const getPlotLower = Cache.fn( async (symbol) => { return await run(File.fromPath("timeframe_15m.pine"), { symbol, timeframe: "15m", limit: 100, }); }, { interval: "15m", key: ([symbol]) => `${symbol}`, }, ); const getDataLower = async (symbol) => { const plots = await getPlotLower(symbol); return extract(plots, { position: "Signal", priceOpen: "Close", priceTakeProfit: "TakeProfit", priceStopLoss: "StopLoss", minuteEstimatedTime: "EstimatedTime", }); }; addStrategySchema({ strategyName: "main_strategy", interval: "5m", getSignal: async (symbol) => { const data_higher = await getDataHigher(symbol); if (data_higher.noTrades) { return null; // ADX < 25, боковик } const data_lower = await getDataLower(symbol); if (data_lower.position === 0) { return null; // нет сигнала } // Фильтр: не входим против старшего таймфрейма if (data_higher.allowShort && data_lower.position === 1) { return null; } if (data_higher.allowLong && data_lower.position === -1) { return null; } const { upperPrice, lowerPrice } = predict( await getCandles(symbol, '15m', 300), '15m' ); // Long: TP = upperPrice, SL = lowerPrice // Short: TP = lowerPrice, SL = upperPrice const isLong = data_lower.position === 1; const tp = isLong ? upperPrice : lowerPrice; const sl = isLong ? lowerPrice : upperPrice; const signal = await toSignalDto(signalId, data_lower, null); Object.assign(signal, { priceTakeProfit: tp, priceStopLoss: sl, }); return signal; }, });
Управление позицией:
addActionSchema({ actionName: "partial_profit_action", handler: class { async partialProfitAvailable({ symbol, level }) { if (level === Constant.TP_LEVEL3) { await commitPartialProfit(symbol, 33); } if (level === Constant.TP_LEVEL2) { await commitPartialProfit(symbol, 33); } if (level === Constant.TP_LEVEL1) { await commitPartialProfit(symbol, 34); } } }, }); addActionSchema({ actionName: "breakeven_action", handler: class { async breakevenAvailable({ symbol, currentPrice }) { // Снижаем trailing-stop после breakeven await commitTrailingStop(symbol, -3, currentPrice); } } });
Выход частями: 33% на каждом уровне TP. Это фиксирует прибыль до разворота. После breakeven - снижаем SL, чтобы не потерять накопленное.
Источник

