Стратегия прорыва импульса тройного отскока

EMA ATR MA SMA
Дата создания: 2025-01-10 15:49:30 Последнее изменение: 2025-01-10 15:49:30
Копировать: 0 Количество просмотров: 401
1
Подписаться
1617
Подписчики

Стратегия прорыва импульса тройного отскока

Обзор

Эта стратегия представляет собой количественную торговую систему, основанную на техническом анализе, которая в основном торгует, выявляя модели тройного дна и сигналы прорыва импульса на рынке. Стратегия объединяет несколько технических индикаторов, таких как пересечение скользящих средних (MA), истинный диапазон (ATR), ценовой канал и т. д., для создания полноценной торговой системы. Данная стратегия реализует автоматическую идентификацию и выполнение транзакций модели тройного отскока запрограммированным образом.

Стратегический принцип

Основная логика стратегии включает в себя следующие ключевые элементы:

  1. Используйте пересечение быстрой (5-периодной) и медленной (20-периодной) скользящих средних для подтверждения направления рыночного тренда.
  2. Программа автоматически определяет три последовательные низкие точки (low1, low2, low3), формируя модель тройного дна.
  3. Используйте индикатор ATR для расчета волатильности и установки динамических уровней стоп-лосса и тейк-профита.
  4. После третьего минимума, когда цена пробивает предыдущий максимум отскока, в сочетании с сигналом пересечения скользящей средней, подтверждается время для открытия длинной позиции.
  5. Создавайте параллельные каналы для визуализации диапазонов движения цен и предоставления дополнительных рыночных справок.
  6. Устанавливайте динамические условия стоп-лосса и тейк-профита на основе ATR во время исполнения сделки

Стратегические преимущества

  1. Объединяйте несколько технических индикаторов для повышения надежности торговых сигналов
  2. Используйте ATR для динамической корректировки стоп-лосс и тейк-профит позиций с целью адаптации к изменениям волатильности рынка.
  3. Автоматически распознавать модели тройного дна, чтобы снизить влияние субъективных суждений
  4. Установите ограничения на интервалы торговли, чтобы избежать чрезмерной торговли
  5. Предоставляет четкую ссылку на структуру рынка с помощью инструментов визуализации (параллельные каналы и метки)
  6. Логика стратегии понятна, проста в поддержке и оптимизации.

Стратегический риск

  1. На нестабильных рынках могут возникать ложные сигналы
  2. На процесс идентификации модели тройного дна может влиять рыночный шум
  3. Фиксированные множители ATR могут не подходить для всех рыночных условий.
  4. В периоды резких изменений тренда могут возникать постоянные потери.
  5. Настройка торгового интервала может привести к пропуску некоторых действительных сигналов.

Направление оптимизации стратегии

  1. Введение индикаторов объема для подтверждения обоснованности отскока
  2. Динамически корректируйте множители ATR в соответствии с различными рыночными условиями
  3. Добавьте фильтр силы тренда для улучшения качества торгового сигнала
  4. Оптимизировать алгоритм распознавания тройного дна для повышения точности
  5. Внедрение анализа цикла колебаний рынка и оптимизация настроек торгового интервала
  6. Рассмотрите возможность добавления анализа симметрии к ценовым моделям

Подвести итог

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

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

//@version=5
strategy("反彈三次突破策略", overlay=true, initial_capital=100000, commission_value=0.001425, slippage=1)

// === 參數設定 ===
fast_length = input.int(5, title="快速均線週期")
slow_length = input.int(20, title="慢速均線週期")
atr_period = input.int(14, title="ATR 週期")
atr_factor = input.float(2.0, title="ATR 因子")
profit_factor = input.float(2.0, title="止盈因子")

// === 計算均線 ===
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.ema(close, slow_length)

// === 均線交叉訊號 ===
long_signal = ta.crossover(fast_ma, slow_ma)
short_signal = ta.crossunder(fast_ma, slow_ma)

// === 計算 ATR ===
atr = ta.atr(atr_period)

// === 反彈三次突破策略 ===
var float low1 = na
var float low2 = na
var float low3 = na
var bool trend_down = false
var bool long_breakout = false
var line lower_line = na
var line upper_line = na

if (na(low1) or na(low2) or na(low3))
    // 初始化低點
    low1 := na
    low2 := na
    low3 := na

if (close < low3 or na(low3))
    // 更新低點
    low1 := low2
    low2 := low3
    low3 := close
    trend_down := true

if (trend_down and close > low2 and close > low1)
    // 確認反轉且第三次反彈比第二次高
    trend_down := false
    long_breakout := true

// 清除前一個反彈通道
if (not na(lower_line))
    line.delete(lower_line)
if (not na(upper_line))
    line.delete(upper_line)

// 繪製新的反彈通道
if (not na(low1) and not na(low3))    
    lower_line := line.new(x1=bar_index[2], y1=low1, x2=bar_index, y2=low3, color=color.yellow, width=2)
    upper_line := line.new(x1=bar_index[2], y1=low1 + (low3 - low1), x2=bar_index, y2=low3 + (low3 - low1), color=color.yellow, width=2)

// === 進出場條件 ===
var float last_long_exit = na
var float last_short_exit = na
var float stop_loss_long = na
var float take_profit_long = na
var float stop_loss_short = na
var float take_profit_short = na

var label stop_loss_label_long = na
var label take_profit_label_long = na
var label stop_loss_label_short = na
var label take_profit_label_short = na

if (long_signal or long_breakout)
    if na(last_short_exit) or (time - last_short_exit) > 2 * 60 * 60 * 1000  // 確保多頭出場後有一段時間間隔
        // 做多
        strategy.entry("做多", strategy.long)
        // 止損設置為最近低點下方
        stop_loss_long := low3 - atr_factor * atr
        take_profit_long := close + profit_factor * atr  // 設定止盈位置
        strategy.exit("止盈/止損", "做多", stop=stop_loss_long, limit=take_profit_long)
        last_long_exit := time  // 記錄多頭出場時間

        // 刪除之前的止盈止損標籤
        if (not na(stop_loss_label_long))
            label.delete(stop_loss_label_long)
        if (not na(take_profit_label_long))
            label.delete(take_profit_label_long)

        // 繪製新的止盈止損標籤
        stop_loss_label_long := label.new(x=bar_index, y=stop_loss_long, text=str.tostring(math.round(stop_loss_long * 10) / 10), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)
        take_profit_label_long := label.new(x=bar_index, y=take_profit_long, text=str.tostring(math.round(take_profit_long * 10) / 10), color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

if (short_signal)
    if na(last_long_exit) or (time - last_long_exit) > 2 * 60 * 60 * 1000  // 確保空頭出場後有一段時間間隔
        // 做空
        strategy.entry("做空", strategy.short)
        // 止損設置為最近高點上方
        stop_loss_short := high + atr_factor * atr
        take_profit_short := close - profit_factor * atr  // 設定止盈位置
        strategy.exit("止盈/止損", "做空", stop=stop_loss_short, limit=take_profit_short)
        last_short_exit := time  // 記錄空頭出場時間

        // 刪除之前的止盈止損標籤
        if (not na(stop_loss_label_short))
            label.delete(stop_loss_label_short)
        if (not na(take_profit_label_short))
            label.delete(take_profit_label_short)

        // 繪製新的止盈止損標籤
        stop_loss_label_short := label.new(x=bar_index, y=stop_loss_short, text=str.tostring(math.round(stop_loss_short * 10) / 10), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)
        take_profit_label_short := label.new(x=bar_index, y=take_profit_short, text=str.tostring(math.round(take_profit_short * 10) / 10), color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)