
В 2026 году «купил и держал» это ставка на то, что выдержишь -40…-70% просадку без эмоционального или маржинального выхода. Рынок стал хрупким: каскады ликвидаций случаются несколько раз в год. Статичный холд больше не работает.
Что такое опционы

Если вы купили акцию за 100 долларов и она выросла на 10 %, у вас +10 долларов – всё просто и линейно. С опционами всё иначе. Опцион это обязательство продать акцию потом по фиксированной цене. Их цена меняется неравномерно: то медленно, то очень резко. Эта «кривизна» и есть главная особенность. Чем дальше до истечения опциона, тем больше этой кривизны «накоплено». Ближе к экспирации она исчезает – время работает против держателя.
Плавное движение vs. внезапные прыжки

Большинство учебных моделей предполагают, что цена акции меняется очень маленькими шажками – непрерывно, без телепортации. Реальность другая: цена внезапно валится. Во время такого прыжка подстроить позицию невозможно – торгов не было по промежуточным ценам. Поэтому результат на гэпе зависит больше от везения, чем от качества вашей стратегии.
Как подстраивают позицию

Есть две большие группы клиентов:
Первая группа – пенсионные фонды и банки.
Они покупают опционы на падение, чтобы красиво отчитаться перед начальством/вкладчиками: «да, рынок упал, но у нас защита, убытки нереализованные».
Вторая группа – вкладчики компании.
Покупают продукты типа «защищённый рост»: если рынок сильно растёт – получаешь часть прибыли, если падает – ничего не теряешь (по крайней мере на бумаге).
Получается вилка – если цена растёт мы купим по более выгодной цене. Если цена падает у нас открыт 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, чтобы не потерять накопленное.
Спасибо за внимание
Автор: tripolskypetr


