Chiến lược kết hợp theo dõi xu hướng giao cắt trung bình động động

EMA SMA Moving Average CROSSOVER TREND FOLLOWING STOP LOSS TAKE PROFIT
Ngày tạo: 2025-02-24 09:46:10 sửa đổi lần cuối: 2025-02-24 09:46:10
sao chép: 1 Số nhấp chuột: 315
2
tập trung vào
319
Người theo dõi

Chiến lược kết hợp theo dõi xu hướng giao cắt trung bình động động Chiến lược kết hợp theo dõi xu hướng giao cắt trung bình động động

Tổng quan

Chiến lược này là một hệ thống theo dõi xu hướng dựa trên nhiều đường trung bình, kết hợp các chỉ số SMA và EMA để nắm bắt xu hướng thị trường. Chiến lược này xây dựng một hệ thống giao dịch theo dõi xu hướng hoàn chỉnh bằng cách sử dụng một trung bình di chuyển đơn giản (SMA) và hai chỉ số di chuyển trung bình (EMA) theo chu kỳ tùy chỉnh. Đồng thời tích hợp cơ chế quản lý mục tiêu dừng lỗ và lợi nhuận động, kiểm soát rủi ro và khóa lợi nhuận một cách hiệu quả.

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

Chiến lược này chủ yếu dựa trên các mối quan hệ động của ba đường thẳng để đưa ra quyết định giao dịch. Hệ thống xác định hướng xu hướng bằng cách theo dõi vị trí tương đối của giá với SMA và sự giao nhau của EMA nhanh và EMA chậm. Các tín hiệu đầu vào được phân chia thành hai loại kích hoạt: một là giá nằm trên SMA (bên dưới) và EMA nhanh (bên trên) và EMA chậm (bên dưới); hai là giá phá vỡ SMA và giá trước tiếp tục ở trên SMA (bên dưới).

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

  1. Sử dụng kết hợp nhiều đường trung bình để tăng độ chính xác trong việc đánh giá xu hướng và giảm tổn thất do phá vỡ giả
  2. Thiết kế điều kiện nhập cảnh kép có thể nắm bắt cơ hội trong giai đoạn đầu của xu hướng và theo dõi sự tiếp tục của xu hướng đã được thiết lập
  3. Các cơ chế dừng lỗ động vừa bảo vệ lợi nhuận vừa cho phép xu hướng phát triển đầy đủ
  4. Thiết lập tỷ lệ dừng lỗ hợp lý, có sự cân bằng tốt giữa kiểm soát rủi ro và lợi nhuận
  5. Giao lộ đường trung bình như một điều kiện đặt hàng bổ sung, giúp tránh rủi ro đảo ngược xu hướng kịp thời

Rủi ro chiến lược

  1. Có thể giao dịch thường xuyên trong một thị trường bất ổn dẫn đến tổn thất
  2. Hệ thống đa đường trung bình có thể bị tụt hậu trong thị trường biến động nhanh
  3. Lợi thế của Stop Loss Fixed có thể không phù hợp với tất cả các điều kiện thị trường
  4. Trong một thị trường có nhiều biến động, dừng di chuyển có thể khóa lợi nhuận quá sớm
  5. Tối ưu hóa tham số quá mức có thể dẫn đến chiến lược không đạt được kết quả phản hồi trên ổ đĩa thực

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

  1. Nhập các chỉ số biến động để điều chỉnh động các stop loss và stop loss để chiến lược thích ứng tốt hơn với các môi trường thị trường khác nhau
  2. Tăng số lượng giao dịch để hỗ trợ xác nhận, tăng độ tin cậy của tín hiệu nhập cảnh
  3. Điều chỉnh chu kỳ đường trung bình theo động lực của thị trường biến động, tăng khả năng thích ứng chiến lược
  4. Thêm bộ lọc cường độ xu hướng để tránh giao dịch thường xuyên trong môi trường xu hướng yếu
  5. Phát triển cơ chế dừng chân di động thích ứng, điều chỉnh khoảng cách dừng chân theo động thái biến động của thị trường

Tóm tắt

Chiến lược này xây dựng một hệ thống theo dõi xu hướng hoàn chỉnh bằng cách sử dụng kết hợp nhiều đường trung bình, có thiết kế quy tắc chi tiết về lối vào, lối ra và quản lý rủi ro. Ưu điểm của chiến lược là có thể xác định và theo dõi xu hướng một cách hiệu quả, đồng thời bảo vệ lợi nhuận bằng cơ chế dừng lỗ động. Mặc dù có một số rủi ro vốn có, nhưng hướng tối ưu hóa được đề xuất có thể nâng cao hơn nữa sự ổn định và khả năng thích ứng của chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2025-02-17 17:00:00
end: 2025-02-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("交易策略(自定义EMA/SMA参数)", overlay=true, initial_capital=100000, currency=currency.EUR, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// 输入参数:可调的 SMA 和 EMA 周期
smaLength     = input.int(120, "SMA Length", minval=1, step=1)
emaFastPeriod = input.int(13, "EMA Fast Period", minval=1, step=1)
emaSlowPeriod = input.int(21, "EMA Slow Period", minval=1, step=1)

// 计算均线
smaVal   = ta.sma(close, smaLength)
emaFast  = ta.ema(close, emaFastPeriod)
emaSlow  = ta.ema(close, emaSlowPeriod)

// 绘制均线
plot(smaVal, color=color.orange, title="SMA")
plot(emaFast, color=color.blue, title="EMA Fast")
plot(emaSlow, color=color.red, title="EMA Slow")

// 入场条件 - 做多
// 条件1:收盘价高于SMA 且 EMA Fast 向上穿越 EMA Slow
longTrigger1 = (close > smaVal) and ta.crossover(emaFast, emaSlow)
// 条件2:收盘价上穿SMA 且前5根K线的最低价均高于各自的SMA
longTrigger2 = ta.crossover(close, smaVal) and (low[1] > smaVal[1] and low[2] > smaVal[2] and low[3] > smaVal[3] and low[4] > smaVal[4] and low[5] > smaVal[5])
longCondition = longTrigger1 or longTrigger2

// 入场条件 - 做空
// 条件1:收盘价低于SMA 且 EMA Fast 向下穿越 EMA Slow
shortTrigger1 = (close < smaVal) and ta.crossunder(emaFast, emaSlow)
// 条件2:收盘价下穿SMA 且前5根K线的最高价均低于各自的SMA
shortTrigger2 = ta.crossunder(close, smaVal) and (high[1] < smaVal[1] and high[2] < smaVal[2] and high[3] < smaVal[3] and high[4] < smaVal[4] and high[5] < smaVal[5])
shortCondition = shortTrigger1 or shortTrigger2

// 定义变量记录入场时的价格与EMA Fast值,用于计算止损
var float entryPriceLong      = na
var float entryEMA_Fast_Long   = na
var float entryPriceShort     = na
var float entryEMA_Fast_Short = na

// 入场与初始止盈止损设置 - 做多
// 止损取“开仓时的EMA Fast价格”与“0.2%止损”中较大者;止盈为止损的5倍
if (longCondition and strategy.position_size == 0)
    entryPriceLong      := close
    entryEMA_Fast_Long  := emaFast
    strategy.entry("Long", strategy.long)
    stopPercLong = math.max(0.002, (entryPriceLong - entryEMA_Fast_Long) / entryPriceLong)
    stopLong     = entryPriceLong * (1 - stopPercLong)
    tpLong       = entryPriceLong * (1 + 5 * stopPercLong)
    strategy.exit("LongExit", "Long", stop=stopLong, limit=tpLong)

// 入场与初始止盈止损设置 - 做空
// 止损取“开仓时的EMA Fast价格”与“0.2%止损”中较大者;止盈为止损的5倍
if (shortCondition and strategy.position_size == 0)
    entryPriceShort      := close
    entryEMA_Fast_Short  := emaFast
    strategy.entry("Short", strategy.short)
    stopPercShort = math.max(0.002, (entryEMA_Fast_Short - entryPriceShort) / entryPriceShort)
    stopShort     = entryPriceShort * (1 + stopPercShort)
    tpShort       = entryPriceShort * (1 - 5 * stopPercShort)
    strategy.exit("ShortExit", "Short", stop=stopShort, limit=tpShort)

// 移动止损逻辑
// 当持仓盈利达到0.8%时更新止损和止盈,保持止盈为止损的5倍
var float longHighest = na
if (strategy.position_size > 0)
    longHighest := na(longHighest) ? high : math.max(longHighest, high)
    if (high >= entryPriceLong * 1.008)
        newLongStop = longHighest * (1 - 0.003)
        newPerc     = (entryPriceLong - newLongStop) / entryPriceLong
        newLongTP   = entryPriceLong * (1 + 5 * newPerc)
        strategy.exit("LongExit", "Long", stop=newLongStop, limit=newLongTP)
else
    longHighest := na

var float shortLowest = na
if (strategy.position_size < 0)
    shortLowest := na(shortLowest) ? low : math.min(shortLowest, low)
    if (low <= entryPriceShort * 0.992)
        newShortStop  = shortLowest * (1 + 0.003)
        newPercShort  = (newShortStop - entryPriceShort) / entryPriceShort
        newShortTP    = entryPriceShort * (1 - 5 * newPercShort)
        strategy.exit("ShortExit", "Short", stop=newShortStop, limit=newShortTP)
else
    shortLowest := na

// 额外平仓条件
// 如果持多仓时EMA Fast下穿EMA Slow,则立即平多
if (strategy.position_size > 0 and ta.crossunder(emaFast, emaSlow))
    strategy.close("Long", comment="EMA下穿平多")
// 如果持空仓时EMA Fast上穿EMA Slow,则立即平空
if (strategy.position_size < 0 and ta.crossover(emaFast, emaSlow))
    strategy.close("Short", comment="EMA上穿平空")