Strategi Momentum Rebound Breakout Triple Bottoming

EMA ATR MA SMA
Tanggal Pembuatan: 2025-01-10 15:49:30 Akhirnya memodifikasi: 2025-01-10 15:49:30
menyalin: 0 Jumlah klik: 401
1
fokus pada
1617
Pengikut

Strategi Momentum Rebound Breakout Triple Bottoming

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan analisis teknis, yang terutama berdagang dengan mengidentifikasi pola triple bottom dan sinyal terobosan momentum di pasar. Strategi ini menggabungkan berbagai indikator teknis seperti persilangan rata-rata pergerakan (MA), rentang sebenarnya (ATR), saluran harga, dll. untuk membangun sistem perdagangan yang lengkap. Strategi ini mewujudkan identifikasi otomatis dan eksekusi transaksi pola rebound triple bottoming secara terprogram.

Prinsip Strategi

Logika inti dari strategi ini mencakup elemen-elemen kunci berikut:

  1. Gunakan persilangan rata-rata pergerakan cepat (periode 5) dan lambat (periode 20) untuk mengonfirmasi arah tren pasar
  2. Program ini secara otomatis mengidentifikasi tiga titik terendah berturut-turut (low1, low2, low3) untuk membentuk pola triple bottoming
  3. Gunakan indikator ATR untuk menghitung volatilitas dan mengatur level stop loss dan take profit yang dinamis
  4. Setelah bottoming out ketiga, ketika harga menembus rebound high sebelumnya, dikombinasikan dengan sinyal crossover moving average, konfirmasikan waktu untuk mengambil posisi long
  5. Buat saluran paralel untuk memvisualisasikan rentang pergerakan harga dan memberikan referensi pasar tambahan
  6. Tetapkan kondisi stop loss dan take profit dinamis berdasarkan ATR pada waktu eksekusi perdagangan

Keunggulan Strategis

  1. Gabungkan beberapa indikator teknis untuk meningkatkan keandalan sinyal perdagangan
  2. Gunakan ATR untuk menyesuaikan posisi stop loss dan take profit secara dinamis untuk beradaptasi dengan perubahan volatilitas pasar
  3. Secara otomatis mengidentifikasi pola triple bottom untuk mengurangi dampak penilaian subjektif
  4. Tetapkan batas interval perdagangan untuk menghindari perdagangan berlebihan
  5. Memberikan referensi yang jelas ke struktur pasar melalui alat visualisasi (saluran paralel dan label)
  6. Logika strategi jelas, mudah dipelihara dan dioptimalkan

Risiko Strategis

  1. Sinyal palsu mungkin terjadi di pasar yang bergejolak
  2. Proses identifikasi pola triple bottom mungkin dipengaruhi oleh market noise
  3. Kelipatan ATR tetap mungkin tidak cocok untuk semua kondisi pasar
  4. Kerugian berkelanjutan dapat terjadi selama periode perubahan tren yang drastis
  5. Pengaturan interval perdagangan mungkin kehilangan beberapa sinyal yang valid

Arah optimasi strategi

  1. Memperkenalkan indikator volume untuk mengonfirmasi validitas rebound
  2. Sesuaikan kelipatan ATR secara dinamis sesuai dengan lingkungan pasar yang berbeda
  3. Tambahkan filter kekuatan tren untuk meningkatkan kualitas sinyal perdagangan
  4. Optimalkan algoritma pengenalan triple bottom untuk meningkatkan akurasi
  5. Perkenalkan analisis siklus fluktuasi pasar dan optimalkan pengaturan interval perdagangan
  6. Pertimbangkan untuk menambahkan analisis simetri ke pola harga

Meringkaskan

Strategi ini menerapkan strategi perdagangan terobosan rebound triple bottoming secara terprogram, menggabungkan beberapa indikator teknis dan metode manajemen risiko, dan memiliki kepraktisan yang baik. Melalui pengoptimalan dan perbaikan berkelanjutan, strategi ini diharapkan dapat mencapai kinerja yang lebih baik dalam perdagangan aktual. Disarankan untuk melakukan verifikasi pengujian ulang yang memadai sebelum perdagangan sesungguhnya dan menyesuaikan pengaturan parameter menurut kondisi pasar tertentu.

Kode Sumber Strategi
/*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)