Chiến lược tối ưu hóa dừng lỗ thích ứng theo dõi xu hướng SAR đa giai đoạn

PSAR AF EP SAR SL TS MM
Ngày tạo: 2025-02-18 13:48:30 sửa đổi lần cuối: 2025-02-18 13:48:30
sao chép: 1 Số nhấp chuột: 391
1
tập trung vào
1617
Người theo dõi

Chiến lược tối ưu hóa dừng lỗ thích ứng theo dõi xu hướng SAR đa giai đoạn

Tổng quan

Chiến lược này được tối ưu hóa sâu dựa trên các chỉ số SAR ((Parabolic Stop and Reverse) dựa trên đường parabola truyền thống, kết hợp với phán đoán xu hướng đa chu kỳ và cơ chế dừng lỗ thích ứng. Chiến lược sử dụng phương thức điều chỉnh nhân tố gia tốc động (AF) để theo dõi xu hướng thị trường thông qua việc cập nhật liên tục điểm cực đoan (EP) để nắm bắt chính xác xu hướng tăng và kiểm soát rủi ro.

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

Logic cốt lõi của chiến lược này dựa trên các yếu tố chính sau:

  1. Tính năng SAR tính toán: sử dụng các yếu tố tăng tốc ban đầu ((AF), giá trị gia tăng và giá trị tối đa ba tham số, tùy theo cường độ của xu hướng động điều chỉnh giá trị SAR.
  2. Cơ chế xác định xu hướng: Xác định hướng xu hướng bằng cách so sánh giá trị SAR với mối quan hệ vị trí giá và kích hoạt tín hiệu đảo ngược xu hướng khi SAR đi qua giá.
  3. Logic nhập cảnh: Khi xác nhận xu hướng tăng và không giữ vị trí, sử dụng giá trị SAR dự báo cho chu kỳ tiếp theo làm lệnh nhập cảnh để dừng lỗ.
  4. Tối ưu hóa Stop Loss: Sử dụng các giá trị tối đa của 1-2 đường K đầu tiên làm chuẩn điều chỉnh SAR để tăng độ chính xác và kịp thời của Stop Loss.

Lợi thế chiến lược

  1. Khả năng thích ứng mạnh: Bằng cách điều chỉnh yếu tố gia tốc động, chiến lược có thể tự động điều chỉnh tham số theo cường độ biến động của thị trường.
  2. Kiểm soát rủi ro hoàn hảo: sử dụng các thiết lập SAR dự đoán để đảm bảo tính tiên đoán và hiệu quả của việc dừng lỗ.
  3. Xu hướng chính xác: Nhiều cơ chế xác nhận xu hướng làm giảm nguy cơ phá vỡ giả.
  4. Logic tính toán nghiêm ngặt: sử dụng cơ chế duy trì trạng thái biến để đảm bảo tính ổn định của chiến lược trong quá trình kiểm tra lại lịch sử.

Rủi ro chiến lược

  1. Rủi ro của thị trường rung động: Trong thị trường rung động ngang có thể thường xuyên kích hoạt tín hiệu sai, dẫn đến tổn thất liên tục. Giải pháp: Có thể giới thiệu bộ lọc biến động để giảm tần suất giao dịch trong môi trường biến động thấp.
  2. Tác động trượt: Đánh giá SAR dự đoán có thể có nguy cơ trượt trong thị trường có biến động cao. Phương pháp ứng phó: Đề xuất thiết lập độ khoan dung điểm trượt hợp lý và điều chỉnh tham số tùy theo đặc điểm của giống.
  3. Trở lại xu hướng chậm trễ: Trong trường hợp đảo ngược đột ngột có thể xảy ra trễ dừng lỗ. Phương pháp ứng phó: Có thể kết hợp với phán đoán hỗ trợ chỉ số động lượng chu kỳ ngắn, tăng độ nhạy cảm của dừng thiệt hại.

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

  1. Tương tác đa chu kỳ: đề xuất thêm cơ chế xác nhận xu hướng cho nhiều chu kỳ thời gian để tăng độ tin cậy tín hiệu.
  2. Tối ưu hóa tham số động: Cài đặt tham số của yếu tố tăng tốc có thể được điều chỉnh động theo biến động của thị trường.
  3. Cải thiện cơ chế dừng lỗ: giới thiệu băng dừng động dựa trên ATR, tăng tính linh hoạt của dừng lỗ.
  4. Tối ưu hóa quản lý vị thế: Tăng cơ chế quản lý vị thế động dựa trên tỷ lệ biến động.

Tóm tắt

Chiến lược này có khả năng kết hợp hiệu quả giữa theo dõi xu hướng và kiểm soát rủi ro bằng cách tối ưu hóa sâu sắc các chỉ số PSAR cổ điển. Tính năng tự điều chỉnh của chiến lược và cơ chế dừng lỗ hoàn thiện làm cho nó có giá trị ứng dụng thực tế mạnh mẽ.

Mã nguồn chiến lược
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-16 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("A股抛物线策略(仅做多)- 完全移除SAR绘图", overlay=true)

// 参数设置
start     = input.float(0.02, "起始加速因子")
increment = input.float(0.02, "加速因子增量")
maximum   = input.float(0.2,  "加速因子最大值")

// 定义变量(var保证变量在整个历史数据中保持状态)
var bool   uptrend    = true    // 默认初始化为上升趋势
var float  EP         = na      // 极值点:上升趋势时为最高价,下降趋势时为最低价
var float  SAR        = na      // 当前K线的SAR
var float  AF         = start   // 当前加速因子
var float  nextBarSAR = na      // 下一根K线的预测SAR

//【1】初始化:针对第一根K线(bar_index==0)
if bar_index == 0
    // 使用首根K线收盘价初始化
    SAR        := close
    nextBarSAR := close
    EP         := close
    uptrend    := true

//【2】从第二根K线开始(bar_index>=1)计算SAR
if bar_index >= 1
    // 先将上一根K线计算得到的 nextBarSAR 赋给当前SAR
    SAR := nz(nextBarSAR, SAR)
    
    // 第2根K线(bar_index==1)做初始化,利用上一根K线(bar_index==0)的高低价
    if bar_index == 1
        if close > close[1]
            uptrend := true
            EP      := high
            SAR     := low[1]
        else
            uptrend := false
            EP      := low
            SAR     := high[1]
        AF := start
        nextBarSAR := SAR + AF * (EP - SAR)
    else
        // 记录是否处于趋势反转的首根K线,方便后续判断
        var bool firstTrendBar = false
        firstTrendBar := false
        
        // 检测趋势反转:
        // 在上升趋势中,如果当前SAR超过最低价,则认为发生反转
        if uptrend
            if SAR > low
                firstTrendBar := true
                uptrend     := false
                // 反转时,SAR取上一次极值与当前最高价中的较大者,极值改为当前最低价
                SAR         := math.max(EP, high)
                EP          := low
                AF          := start
            // 注意:原代码在上升趋势中还有个判断 SAR < high 的分支,但通常反转判据只需检测SAR是否穿过低点即可
        else
            // 在下降趋势中,如果当前SAR低于最高价,则认为反转为上升趋势
            if SAR < high
                firstTrendBar := true
                uptrend     := true
                SAR         := math.min(EP, low)
                EP          := high
                AF          := start
        
        // 若非反转情形,则更新极值和加速因子
        if not firstTrendBar
            if uptrend
                if high > EP
                    EP := high
                    AF := math.min(AF + increment, maximum)
            else
                if low < EP
                    EP := low
                    AF := math.min(AF + increment, maximum)
                    
        // 调整SAR,确保其不超过最近1-2根K线的最低价(上升趋势)或最高价(下降趋势)
        if uptrend
            SAR := math.min(SAR, low[1])
            if bar_index > 1
                SAR := math.min(SAR, low[2])
        else
            SAR := math.max(SAR, high[1])
            if bar_index > 1
                SAR := math.max(SAR, high[2])
        
        // 计算下一根K线的预测SAR
        nextBarSAR := SAR + AF * (EP - SAR)
        
        //【3】交易逻辑(仅做多)
        if barstate.isconfirmed
            // 当出现上升趋势且当前无多头仓位时进场做多(以预测的下一根K线SAR为止损触发价)
            if uptrend and strategy.position_size <= 0
                strategy.entry("Long", strategy.long, stop=nextBarSAR, comment="Long Entry")
            // 当趋势转为下降且持有多头时平仓
            if not uptrend and strategy.position_size > 0
                strategy.close("Long", comment="Long Exit")

// 绘图部分完全移除,不再绘制任何与SAR相关的图形