Стратегия конвергенции-расхождения скользящей средней

SMA SQUEEZE DIVERGENCE VOLUME TRAILING
Дата создания: 2025-08-22 10:20:38 Последнее изменение: 2025-08-26 14:04:23
Копировать: 0 Количество просмотров: 242
2
Подписаться
319
Подписчики

Стратегия конвергенции-расхождения скользящей средней Стратегия конвергенции-расхождения скользящей средней

Когда рынки замолкают, кто прислушивается к грядущему шторму?

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

Это не просто совокупность технических показателей, это глубокое понимание психологии рынка, которое пытается ответить на один из ключевых вопросов: как предсказать грядущий взрыв в условиях рыночной тишины?

Ключ к стратегии: поиск порядка в хаосе

Философия разработки этой стратегии основана на ключевом наблюдении: рынок находится в критическом состоянии, когда начинают сходиться простые скользящие средние из четырех различных циклов (5, 10, 20, 30 циклов). Это состояние напоминает окончательное равновесие фазовых критических точек в физике до изменения качества.

Стратегия количественно определяет такое сцепление, рассчитывая среднюю полосу пропускания. Система определяет сцепление, когда разница между максимальным и минимальным значениями средней полосы пропускания составляет меньше, чем установленный порог (например, 3%). Этот порог 3% не является случайным, а является оптимальным параметром, полученным на основе анализа большого количества исторических данных.

Более того, стратегия требует, чтобы сцепление продолжалось не менее 3 циклов, чтобы его можно было подтвердить. Такая конструкция позволяет избежать ложных сигналов, вызванных краткосрочными колебаниями, и гарантирует, что последующий механизм мониторинга будет активирован только тогда, когда рынок действительно войдет в сборку.

Рассеянный анализ: ключевые слова для захвата рынка

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

Направленный прорыв в равнолинейном расположении: Многоголовый сигнал требует идеального расположения MA5 > MA10 > MA20 > MA30, которое представляет собой консистентный оптимизм от краткосрочного до долгосрочного. Напротив, пустой сигнал требует прямо противоположного расположения. Такое строгое расположение обеспечивает надежность сигнала и предотвращает ложные прорывы при горизонтальном движении рынка.

Подтверждение рассеивания сил: когда среднелинейная пропускная способность превышает 5% от порога, это указывает на то, что рынок перешел из состояния покоя в активное состояние. Это 5% от порога рассеивания было тщательно отрегулировано, и оно не только улавливает значимые изменения рынка, но и не вводит в заблуждение нормальными рыночными колебаниями.

Совместная проверка количества сделокСтратегия требует, чтобы объем сделок был в 1,5 раза больше среднего значения за 20 циклов, что гарантирует поддержание реального участия в рынке за изменениями цен. Ценные прорывы без подтверждения объема сделок часто не являются устойчивыми, что особенно важно в количественных сделках.

Управление рисками: поиск определенности в неопределенности

Хорошая торговая стратегия не только определяет возможности, но и управляет рисками. Стратегия использует многоуровневый механизм контроля риска:

Фиксированный стоп и динамический стопУстановка стоп-лосса на 2% обеспечивает четкую границу риска на каждую сделку, а стоп-таргетинг на 4% обеспечивает хорошее соотношение риска и прибыли. Более того, стратегия обеспечивает возможность отслеживания стоп-лосса, что позволяет прибыльным трейдерам продолжать участвовать в выгодных рыночных тенденциях, защищая при этом уже полученную прибыль.

Строгое управление местоположениемСтратегия, которая гарантирует, что позиции будут держаться только в одном направлении в любое время, избегая сложных ситуаций с хеджированием и потенциальной путаницы в управлении деньгами.

Мысли о войне: мост между теорией и реальностью

В течение многих лет моей практики количественного трейдинга я обнаружил, что такие стратегии, основанные на равномерной сцепке, особенно хорошо работают в определенных рыночных условиях. Особенно в тех финансовых инструментах, которые имеют явные тенденционные характеристики, такие как основные валютные пары и фьючерсы на фондовые индексы.

Однако, у стратегии есть свои ограничения. В рынках с высокой частотой колебаний, 5%-ный разбросный порог может быть слишком консервативным, что приводит к упущению некоторых быстрых торговых возможностей. В то же время, в рынках с длительным горизонтальным движением, стратегия может создавать больше ложных сигналов.

На более глубоком уровне эта стратегия фактически является “переходом в состояние” рынка торговли - переходом из состояния низкой волатильности в состояние высокой волатильности. Этот переход часто сопровождается появлением новой информации или изменением настроения рынка, и именно этот момент трендовые трейдеры больше всего надеются захватить.

Перспективы: эволюция алгоритмического трейдинга

С развитием технологий машинного обучения и искусственного интеллекта традиционные стратегии технического анализа претерпевают глубокие изменения. Такие стратегии линейного склеивания, как эта, могут быть объединены с более сложными алгоритмами распознавания моделей, что создаст более интеллектуальную торговую систему.

Например, мы можем внедрить данные эмоционального анализа для усиления механизма подтверждения объема сделок или использовать модели глубокого обучения для динамической корректировки параметров отклонений привязки и рассеивания. Эти улучшения позволят стратегии лучше адаптироваться к изменяющейся рыночной среде.

В конечном счете, успешная количественная торговля - это не просто механическое применение технических показателей, но и глубокое понимание природы рынка и страх перед риском. Эта стратегия фиксированного равномерного сцепления и распространения дает нам хорошую отправную точку, но истинная ценность заключается в том, как мы продолжаем совершенствовать и развивать ее на практике.

Исходный код стратегии
/*backtest
start: 2025-01-01 00:00:00
end: 2025-08-21 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy("均线粘合发散策略", shorttitle="Fixed MA Squeeze & Divergence", overlay=true, default_qty_value=10)

// ===== 参数设置 =====
// 均线参数
ma1_length = input.int(5, "短期均线", minval=1)
ma2_length = input.int(10, "中期均线1", minval=1)
ma3_length = input.int(20, "中期均线2", minval=1)
ma4_length = input.int(30, "长期均线", minval=1)

// 粘合参数 - 保持原有设置
squeeze_threshold = input.float(3.0, "粘合阈值(%)", minval=0.1, maxval=10.0, step=0.1) / 100
min_squeeze_bars = input.int(3, "最小粘合K线数", minval=1, maxval=10)

// 发散确认参数 - 修改为更合理的设置
divergence_threshold = input.float(5.0, "发散确认阈值(%)", minval=1.0, maxval=10.0, step=0.1) / 100
observation_period = input.int(5, "发散观察周期", minval=3, maxval=10)
volume_factor = input.float(1.5, "成交量倍数", minval=1.0, maxval=3.0, step=0.1)

// 风险管理参数
stop_loss_pct = input.float(2.0, "止损百分比(%)", minval=0.5, maxval=5.0, step=0.1) / 100
take_profit_pct = input.float(4.0, "止盈百分比(%)", minval=1.0, maxval=10.0, step=0.1) / 100
use_trailing_stop = input.bool(true, "使用跟踪止损")

// ===== 计算均线 =====
ma1 = ta.sma(close, ma1_length)
ma2 = ta.sma(close, ma2_length)
ma3 = ta.sma(close, ma3_length)
ma4 = ta.sma(close, ma4_length)

// 绘制均线
plot(ma1, "MA5", color=color.red, linewidth=1)
plot(ma2, "MA10", color=color.orange, linewidth=1)
plot(ma3, "MA20", color=color.blue, linewidth=1)
plot(ma4, "MA30", color=color.purple, linewidth=1)

// ===== 计算均线粘合状态 =====
// 计算均线最高值和最低值
ma_max = math.max(math.max(ma1, ma2), math.max(ma3, ma4))
ma_min = math.min(math.min(ma1, ma2), math.min(ma3, ma4))

// 计算均线带宽
ma_range = ma_max - ma_min
ma_avg = (ma1 + ma2 + ma3 + ma4) / 4
ma_range_pct = ma_avg > 0 ? ma_range / ma_avg : 0  // 添加除零保护

// 判断是否处于粘合状态
is_squeeze = ma_range_pct < squeeze_threshold

// 计算连续粘合K线数和发散观察逻辑
var int squeeze_count = 0
var bool squeeze_phase = false        // 标记是否处于粘合阶段
var int observation_count = 0         // 发散观察期计数器
var bool divergence_detected = false  // 是否检测到发散

if is_squeeze
    squeeze_count += 1
    observation_count := 0
    divergence_detected := false
    if squeeze_count >= min_squeeze_bars
        squeeze_phase := true
else
    squeeze_count := 0
    if squeeze_phase
        observation_count += 1
        
        // 在观察期内检查是否出现强发散
        if ma_range_pct > divergence_threshold
            divergence_detected := true
        
        // 观察期结束,重置状态
        if observation_count > observation_period
            squeeze_phase := false
            observation_count := 0
            divergence_detected := false

// 粘合状态确认:正在粘合或处于观察期
squeeze_confirmed = squeeze_phase

// ===== 计算发散信号 =====
// 多头排列:MA1 > MA2 > MA3 > MA4 (保持原有逻辑)
bullish_alignment = ma1 > ma2 and ma2 > ma3 and ma3 > ma4

// 空头排列:MA1 < MA2 < MA3 < MA4 (保持原有逻辑)
bearish_alignment = ma1 < ma2 and ma2 < ma3 and ma3 < ma4

// 成交量确认(添加na检查)
vol_avg = ta.sma(volume, 20)
volume_surge = not na(volume) and not na(vol_avg) and vol_avg > 0 ? volume > vol_avg * volume_factor : false

// 在观察期内记录是否出现过成交量激增
var bool volume_confirmed = false

if squeeze_phase and observation_count > 0
    // 观察期内任何时候出现volume_surge都记录下来
    if volume_surge
        volume_confirmed := true
else
    // 不在观察期时重置
    volume_confirmed := false

// ===== 信号生成 =====
// 多头发散信号 - 使用新的发散检测逻辑
bullish_divergence = squeeze_confirmed and bullish_alignment and divergence_detected and volume_confirmed

// 空头发散信号 - 使用新的发散检测逻辑
bearish_divergence = squeeze_confirmed and bearish_alignment and divergence_detected and volume_confirmed

// ===== 入场条件 =====
// 添加额外的安全检查
long_condition = bullish_divergence and strategy.position_size == 0 
short_condition = bearish_divergence and strategy.position_size == 0 

// ===== 执行交易 =====
if long_condition
    strategy.entry("Long", strategy.long)
    
if short_condition
    strategy.entry("Short", strategy.short)

// ===== 修复的出场条件 =====
// 计算止损止盈价格
if strategy.position_size > 0
    long_stop_loss = strategy.position_avg_price * (1 - stop_loss_pct)
    long_take_profit = strategy.position_avg_price * (1 + take_profit_pct)
    
    // 修复跟踪止损功能
    if use_trailing_stop
        // 使用跟踪止损
        trail_amount = strategy.position_avg_price * stop_loss_pct
        strategy.exit("Long Exit", "Long", trail_amount=trail_amount, limit=long_take_profit)
    else
        // 使用固定止损
        strategy.exit("Long Exit", "Long", stop=long_stop_loss, limit=long_take_profit)

if strategy.position_size < 0
    short_stop_loss = strategy.position_avg_price * (1 + stop_loss_pct)
    short_take_profit = strategy.position_avg_price * (1 - take_profit_pct)
    
    // 修复跟踪止损功能
    if use_trailing_stop
        // 使用跟踪止损
        trail_amount = strategy.position_avg_price * stop_loss_pct
        strategy.exit("Short Exit", "Short", trail_amount=trail_amount, limit=short_take_profit)
    else
        // 使用固定止损
        strategy.exit("Short Exit", "Short", stop=short_stop_loss, limit=short_take_profit)

// ===== 信号可视化 =====
// 粘合状态背景色
bgcolor(is_squeeze and squeeze_confirmed ? color.new(color.yellow, 90) : na, title="粘合状态")

// 观察期背景色
bgcolor(squeeze_confirmed and not is_squeeze ? color.new(color.blue, 95) : na, title="发散观察期")

// 发散检测背景色
bgcolor(divergence_detected ? color.new(color.orange, 95) : na, title="发散检测")

// 信号标记
plotshape(long_condition, title="做多信号", style=shape.triangleup, location=location.belowbar, 
          color=color.green, size=size.normal)
plotshape(short_condition, title="做空信号", style=shape.triangledown, location=location.abovebar, 
          color=color.red, size=size.normal)

// ===== 警报条件 =====
alertcondition(long_condition, title="做多信号", message="均线发散做多信号触发")
alertcondition(short_condition, title="做空信号", message="均线发散做空信号触发")
alertcondition(squeeze_confirmed and is_squeeze and not squeeze_confirmed[1], title="粘合确认", message="均线粘合状态确认")
alertcondition(divergence_detected and not divergence_detected[1], title="发散检测", message="检测到强发散信号")