Tài nguyên đang được tải lên... tải...

Triple Bottom Rebound Momentum Chiến lược đột phá

Tác giả:ChaoZhang, Ngày: 2025-01-10 15:49:30
Tags:EMAATRMASMA

 Triple Bottom Rebound Momentum Breakthrough Strategy

Tổng quan

Chiến lược này là một hệ thống giao dịch định lượng dựa trên phân tích kỹ thuật, chủ yếu tập trung vào việc xác định các mẫu đáy ba và các tín hiệu đột phá trong thị trường. Chiến lược kết hợp nhiều chỉ số kỹ thuật bao gồm chéo trung bình di chuyển (MA), phạm vi trung bình thực sự (ATR) và các kênh giá để xây dựng một hệ thống giao dịch hoàn chỉnh. Thông qua việc thực hiện theo chương trình, nó đạt được xác định tự động các mẫu phục hồi đáy ba và thực hiện giao dịch.

Nguyên tắc chiến lược

Logic cốt lõi bao gồm các yếu tố chính sau: 1. Sử dụng chéo trung bình di chuyển nhanh (5 giai đoạn) và chậm (20 giai đoạn) để xác nhận hướng xu hướng thị trường 2. Tự động xác định ba điểm thấp liên tiếp (low1, low2, low3) để tạo ra một mô hình đáy ba Sử dụng chỉ số ATR để tính biến động và thiết lập mức dừng lỗ và lấy lợi nhuận năng động 4. Xác nhận các tín hiệu đầu vào dài khi giá phá vỡ trên mức cao hồi phục trước đó sau đáy thứ ba, kết hợp với các tín hiệu chéo MA 5. Thiết lập các kênh song song để hình dung phạm vi chuyển động giá để tham khảo thị trường bổ sung Thực hiện các điều kiện dừng lỗ và lấy lợi nhuận động dựa trên ATR trong quá trình thực hiện giao dịch

Ưu điểm chiến lược

  1. Kết hợp nhiều chỉ số kỹ thuật để tăng độ tin cậy tín hiệu
  2. Sử dụng ATR để điều chỉnh động mức dừng lỗ và lấy lợi nhuận, thích nghi với sự thay đổi biến động của thị trường
  3. Tự động hóa nhận dạng mô hình đáy ba, giảm phán đoán chủ quan
  4. Thực hiện các hạn chế khoảng thời gian giao dịch để ngăn chặn giao dịch quá mức
  5. Cung cấp tham chiếu cấu trúc thị trường rõ ràng thông qua các công cụ trực quan hóa (các kênh song song và nhãn)
  6. Tính năng logic chiến lược rõ ràng để bảo trì và tối ưu hóa dễ dàng

Rủi ro chiến lược

  1. Có thể tạo ra tín hiệu sai trong các thị trường biến động cao
  2. Quá trình xác định mô hình ba đáy có thể bị ảnh hưởng bởi tiếng ồn thị trường
  3. Các nhân ATR cố định có thể không phù hợp với tất cả các điều kiện thị trường
  4. Có thể trải qua các lỗ liên tiếp trong các giai đoạn đảo ngược xu hướng
  5. Cài đặt khoảng thời gian giao dịch có thể bỏ qua một số tín hiệu hợp lệ

Hướng dẫn tối ưu hóa chiến lược

  1. Bao gồm các chỉ số khối lượng để xác nhận tính hợp lệ của sự hồi phục
  2. Điều chỉnh động các nhân ATR dựa trên các điều kiện thị trường khác nhau
  3. Thêm bộ lọc sức mạnh xu hướng để cải thiện chất lượng tín hiệu giao dịch
  4. Tối ưu hóa thuật toán nhận dạng đáy ba để tăng độ chính xác
  5. Kết hợp phân tích chu kỳ thị trường để tối ưu hóa các thiết lập khoảng thời gian giao dịch
  6. Xem xét thêm phân tích đối xứng mô hình giá

Tóm lại

Chiến lược này thực hiện một hệ thống giao dịch đột phá tăng gấp ba lần theo chương trình, kết hợp nhiều chỉ số kỹ thuật và các biện pháp quản lý rủi ro với tính thực tế tốt. Thông qua tối ưu hóa và cải tiến liên tục, chiến lược cho thấy hứa hẹn cho hiệu suất tốt hơn trong giao dịch thực tế.


/*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)

Có liên quan

Thêm nữa