
Недавно в сообществе количественного трейдинга я увидел интересную «Стратегию статистического арбитража волатильности». Хотя она и называется арбитражной стратегией, после тщательного изучения я обнаружил, что основная идея этой стратегии на самом деле больше похожа на контр-торговлю, и некоторые называют её «стратегией ловли игл».
Основная мысль автора проста:Когда рынок падает, а волатильность чрезмерно возрастает, это часто приводит к паническим продажам. В это время открытие длинной позиции против тренда может принести хорошую прибыль.Эта идея звучит разумно. В конце концов, мы часто видим, как рынок после сильной паники технический отскок.

В учебных целях я решил написать стратегию, основанную на этой идее, чтобы проверить её. Хотя она может немного отличаться от доработанной стратегии автора, я считаю, что изучение классических идей путём ручного воспроизведения — само по себе очень ценный процесс.
Основная логика этой стратегии на самом деле очень проста и может быть изложена в нескольких предложениях:
С точки зрения поведенческих финансов эта стратегия отражает экстремальное состояние рыночных настроений. Когда снижение цен сопровождается высокой волатильностью, это часто означает:
Конечно, это всего лишь теоретическое предположение, и реальный эффект еще требует подтверждения данными.
Я уже использовал несколько количественных платформ. Поддержка Pine Script от FMZ лучше, и ее можно напрямую подключить к нескольким биржам, что удобно для бэктестинга и реальной торговли.
1. Запутанность настройки параметров
Какова оптимальная настройка цикла ATR? Что такое множественные пороговые значения? Стандартного ответа для этих параметров нет, и найти относительно подходящие значения можно только путём повторных тестов. В итоге я выбрал:
2. Важность контроля рисков
Самый большой риск торговли против тренда — это «покупка на дне на полпути к вершине горы». Поэтому я добавил несколько уровней защиты:
3. Конструкция выходного механизма
Это ключевая часть стратегии. Я разработал три выхода:
// 核心判断逻辑
atr = ta.atr(atr_period)
atr_ma = ta.sma(atr, mean_period)
price_ma = ta.sma(close, mean_period)
// 开仓条件:下跌 + 高波动
high_volatility = atr > atr_ma * atr_multiplier
price_decline = close < price_ma
long_condition = price_decline and high_volatility
Этот код — ядро стратегии, логика очень простая, ничего сложного. А именно:
Шаг 1: Рассчитайте основные показатели
atr = ta.atr(atr_period):Рассчитать текущее значение ATR, этот индикатор отражает диапазон колебания цены.atr_ma = ta.sma(atr, mean_period): Рассчитывает скользящее среднее значение ATR, представляющее «нормальный» уровень волатильности.price_ma = ta.sma(close, mean_period): Рассчитайте скользящую среднюю цены, чтобы определить направление тренда.Шаг 2: Определите условия срабатывания триггера
high_volatility = atr > atr_ma * atr_multiplier:Текущая волатильность аномально высока? Если текущий ATR превышает среднее значение ATR в 2 раза (значение по умолчанию), это считается «аномальной волатильностью».price_decline = close < price_ma:Цена падает? Если текущая цена ниже скользящей средней, она считается падающейlong_condition = price_decline and high_volatility:Два условия выполняются одновременно, чтобы открыть большеВоплощение основных идей Эти строки кода отражают основную идею стратегии: мы не идем против тренда все время, а ждем момента, когда «цены падают, но волатильность внезапно взлетает». Этот момент часто означает, что происходят внезапные события или паника, и цены могут слишком остро отреагировать, предоставляя нам возможности для торговли против тренда.

Результаты бэктестинга XRP:

Результаты бэктестинга ETH:

Для основных и относительно стабильных сортов возможностей для открытия позиций меньше.Такие основные валюты, как ETH, редко соответствуют требованиям.
У меньших валют больше возможностей. Такие валюты, как XRP, имеют более высокую волатильность и чаще вызывают определенные условия.
Более подходящим является 5-минутный цикл.Более короткие периоды производят слишком много шума, более длинные периоды реагируют слишком медленно.
Плата за обработку — это расходы, которые нельзя игнорировать.Комиссия за обработку существенно повлияет на конечную прибыль, особенно при высокочастотной торговле.
Воспроизведение этой стратегии научило меня нескольким важным вещам:
1. Простая логика часто более эффективна. Основная логика этой стратегии очень проста, но она действительно может использовать некоторые возможности в определенных рыночных условиях. Сложность не означает эффективность, и иногда простые и прямые методы более практичны.
2. Оптимизация параметров — это техническая задача. Одна и та же логика, но разные настройки параметров могут привести к совершенно разным результатам. Это требует множества тестов и глубокого понимания рынка.
3. Контроль рисков всегда на первом месте Торговля против тренда изначально высокорискована, и необходимы строгие меры контроля риска. Управление рисками нельзя игнорировать только из-за успеха.
Благодаря этой практике я также увидел некоторые ограничения этой стратегии:
Если мы хотим продолжить оптимизацию этой стратегии, я думаю, мы можем начать с нескольких направлений:
Я очень благодарен автору оригинальной статьи за то, что он поделился своими идеями, что дало мне прекрасную возможность для обучения. Хотя моя реализация может быть грубой и есть расхождения с доработанной стратегией автора оригинальной статьи, этот процесс ручного воспроизведения позволил мне глубже понять стратегию возврата к среднему.
Вот как изучается количественная торговля. Начните с имитации, думайте на практике и развивайтесь через неудачи.Идеальной стратегии не существует, есть лишь процесс постепенного приближения к рыночной истине посредством постоянного обучения и совершенствования.
Друзьям, которые также изучают количественную торговлю, мой совет:
Надеюсь, это исследование будет полезно всем. Рынок постоянно меняется, и наше обучение всегда в пути.
Источник стратегии:[Статистический арбитраж спреда волатильности], принцип раскрыт, процент выигрышей чрезвычайно высок! Преимущества поразительны!
Эта статья предназначена только для обучения и общения и не является инвестиционным советом. Количественная торговля рискованна, и вам следует быть осторожными при выходе на рынок.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-06-24 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","tradesMode":"1"}]
args: [["v_input_float_4",0.5],["v_input_float_5",1.5],["RunMode",1,358374]]
*/
//@version=5
strategy(title="逆势短线均值回归策略", overlay=false, pyramiding=5)
// ===== INPUT PARAMETERS =====
// 风险管理参数
risk_per_trade = input.float(2.0, title="单次交易风险 (%)", minval=0.1, maxval=10.0, step=0.1)
max_position_size = input.float(10.0, title="最大仓位大小 (%)", minval=1.0, maxval=50.0, step=1.0)
// ATR和波动率参数
atr_period = input.int(14, title="ATR周期", minval=5, maxval=50)
atr_multiplier = input.float(2.0, title="ATR倍数阈值", minval=1.0, maxval=5.0, step=0.1)
mean_period = input.int(20, title="均值回归周期", minval=5, maxval=100)
// 止盈止损参数
use_stop_loss = input.bool(true, title="使用止损")
stop_loss_pct = input.float(3.0, title="止损百分比 (%)", minval=0.5, maxval=10.0, step=0.1)
use_take_profit = input.bool(true, title="使用止盈")
take_profit_pct = input.float(6.0, title="止盈百分比 (%)", minval=1.0, maxval=20.0, step=0.1)
// ATR回归平仓参数
use_atr_exit = input.bool(true, title="使用ATR回归平仓")
atr_exit_threshold = input.float(1.0, title="ATR退出阈值", minval=0.5, maxval=3.0, step=0.1)
// ===== CALCULATIONS =====
// ATR计算
atr = ta.atr(atr_period)
atr_ma = ta.sma(atr, mean_period)
// 价格均线
price_ma = ta.sma(close, mean_period)
// 波动率判断
high_volatility = atr > atr_ma * atr_multiplier
// 下跌判断
price_decline = close < price_ma
// 价格距离均线的偏离度
price_deviation = math.abs(close - price_ma) / price_ma
// ===== ENTRY CONDITIONS =====
// 开多条件:下跌行情 + 高波动率
long_condition = price_decline and high_volatility and strategy.position_size < max_position_size
// ===== EXIT CONDITIONS =====
// ATR回归均值退出条件
atr_mean_reversion = atr <= atr_ma * atr_exit_threshold
// 止损止盈条件
long_stop_loss = strategy.position_avg_price * (1 - stop_loss_pct / 100)
long_take_profit = strategy.position_avg_price * (1 + take_profit_pct / 100)
// ===== STRATEGY EXECUTION =====
// 开多仓
if long_condition
strategy.entry("Long", strategy.long, qty=risk_per_trade, comment="逆势开多")
// 平仓条件
if strategy.position_size > 0
// ATR回归平仓
if use_atr_exit and atr_mean_reversion
strategy.close("Long", comment="ATR回归平仓")
// 止损
if use_stop_loss and close <= long_stop_loss
strategy.close("Long", comment="止损平仓")
// 止盈
if use_take_profit and close >= long_take_profit
strategy.close("Long", comment="止盈平仓")
// ===== PLOTTING =====
// 绘制均线
plot(price_ma, color=color.blue, linewidth=2, title="价格均线", overlay=true)
// 绘制ATR
plotchar(high_volatility, "高波动", "▲", location.belowbar, color=color.red, size=size.small)
// 绘制开仓信号
plotshape(long_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.normal, title="开多信号")
// 绘制止盈止损线
if strategy.position_size > 0
plot(long_stop_loss, color=color.red, style=plot.style_linebr, linewidth=1, title="止损线")
plot(long_take_profit, color=color.green, style=plot.style_linebr, linewidth=1, title="止盈线")
// ATR指标显示
plot(atr, color=color.purple, title="ATR")
plot(atr_ma, color=color.orange, title="ATR均线")
// ===== ALERTS =====
// 开仓提醒
if long_condition
alert("逆势开多信号触发", alert.freq_once_per_bar)
// 平仓提醒
if strategy.position_size > 0 and atr_mean_reversion
alert("ATR回归,建议平仓", alert.freq_once_per_bar)