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

Advanced WaveTrend và EMA Ribbon Fusion Trading Strategy

Tác giả:ChaoZhang, Ngày: 2025-01-06 15:21:57
Tags:WTEMAHLC3SMAMA

img

Tổng quan

Chiến lược này là một hệ thống giao dịch tiên tiến kết hợp chỉ số dao động WaveTrend với các ruy băng EMA. Bằng cách tích hợp hai chỉ số kỹ thuật này, nó tạo ra một chiến lược giao dịch có khả năng nắm bắt chính xác các điểm đảo ngược xu hướng thị trường. Chiến lược sử dụng các thiết lập dừng lỗ và lấy lợi nhuận năng động để theo đuổi lợi nhuận cao hơn trong khi bảo vệ vốn.

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

Cốt lõi của chiến lược nằm trong việc sử dụng phối hợp của chỉ số WaveTrend và tám đường EMA để xác định tín hiệu giao dịch. Chỉ số WaveTrend đo điều kiện mua quá nhiều và bán quá nhiều của thị trường bằng cách tính lệch giữa giá và đường trung bình động.

  1. Các tín hiệu dài được kích hoạt khi EMA2 vượt qua EMA8, hoặc khi một tín hiệu tam giác màu xanh xuất hiện (EMA2 vượt qua EMA3) mà không có mô hình kim cương máu
  2. Các tín hiệu ngắn được kích hoạt khi EMA8 vượt qua EMA2, hoặc khi một mẫu kim cương máu xuất hiện
  3. Stop-loss được đặt ở điểm cực sau tín hiệu phản hồi trước đó, kiểm soát hiệu quả rủi ro
  4. Các mục tiêu lợi nhuận được đặt ở khoảng cách dừng lỗ gấp 2-3 lần, chứng minh tỷ lệ rủi ro-lợi nhuận tốt

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

  1. Cơ chế xác nhận hai lần cải thiện độ tin cậy của tín hiệu giao dịch
  2. Các thiết lập dừng lỗ động thích nghi tốt hơn với biến động thị trường
  3. Cài đặt tỷ lệ rủi ro-lợi nhuận rõ ràng
  4. EMA ribbon giúp xác định xu hướng thị trường tổng thể
  5. Chỉ số WaveTrend xác định hiệu quả các điều kiện mua quá mức / bán quá mức trên thị trường
  6. Logic chiến lược rõ ràng dễ hiểu và thực hiện

Rủi ro chiến lược

  1. Có thể tạo ra các tín hiệu sai thường xuyên trong các thị trường khác nhau
  2. Các lệnh dừng động có thể dễ dàng được kích hoạt trong thời gian biến động nghiêm trọng
  3. Các chỉ số dựa trên dữ liệu lịch sử có thể thất bại trong quá trình thay đổi chế độ thị trường
  4. Nhiều chỉ số kỹ thuật có thể dẫn đến sự chậm trễ tín hiệu Giải pháp:
  • Thêm bộ lọc biến động để giảm tín hiệu sai trong các thị trường khác nhau
  • Xem xét sử dụng các thiết lập stop-loss rộng hơn
  • Thêm các cơ chế xác nhận sức mạnh xu hướng

Hướng dẫn tối ưu hóa

  1. Đưa ra các chỉ số biến động (như ATR) để điều chỉnh dừng lỗ động
  2. Thêm cơ chế xác nhận âm lượng để cải thiện độ tin cậy tín hiệu
  3. Xem xét thêm các bộ lọc sức mạnh xu hướng để giao dịch chỉ trong các thị trường xu hướng mạnh
  4. Tối ưu hóa các tham số WaveTrend để thích nghi tốt hơn với các điều kiện thị trường khác nhau
  5. Nghiên cứu sự phối hợp tín hiệu trong các khung thời gian khác nhau

Tóm lại

Đây là một hệ thống giao dịch hoàn chỉnh kết hợp các chỉ số theo xu hướng và dao động trong phân tích kỹ thuật. Thông qua việc sử dụng phối hợp các ruy băng WaveTrend và EMA, nó có thể nắm bắt các xu hướng chính và vào kịp thời tại các điểm đảo ngược xu hướng. Cơ chế quản lý dừng lỗ và lấy lợi nhuận năng động cung cấp khả năng kiểm soát rủi ro tốt. Khả năng tối ưu hóa chiến lược chủ yếu nằm trong việc cải thiện lọc tín hiệu và quản lý rủi ro.


/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("VuManChu Cipher A Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.fixed, default_qty_value=1.0)

// === 函数定义 ===
// WaveTrend函数
f_wavetrend(_src, _chlen, _avg, _malen) =>
    _esa = ta.ema(_src, _chlen)
    _de = ta.ema(math.abs(_src - _esa), _chlen)
    _ci = (_src - _esa) / (0.015 * _de)
    _tci = ta.ema(_ci, _avg)
    _wt1 = _tci
    _wt2 = ta.sma(_wt1, _malen)
    [_wt1, _wt2]

// EMA Ribbon函数
f_emaRibbon(_src, _e1, _e2, _e3, _e4, _e5, _e6, _e7, _e8) =>
    _ema1 = ta.ema(_src, _e1)
    _ema2 = ta.ema(_src, _e2)
    _ema3 = ta.ema(_src, _e3)
    _ema4 = ta.ema(_src, _e4)
    _ema5 = ta.ema(_src, _e5)
    _ema6 = ta.ema(_src, _e6)
    _ema7 = ta.ema(_src, _e7)
    _ema8 = ta.ema(_src, _e8)
    [_ema1, _ema2, _ema3, _ema4, _ema5, _ema6, _ema7, _ema8]

// === 变量声明 ===
var float stopPrice = na      // 止损价格变量
var float targetPrice = na    // 止盈价格变量
var float lastLongPrice = na
var float lastShortPrice = na
var float highestSinceLastLong = na
var float lowestSinceLastShort = na

// === WaveTrend参数 ===
wtChannelLen = input.int(9, title = 'WT Channel Length')
wtAverageLen = input.int(13, title = 'WT Average Length')
wtMASource = hlc3
wtMALen = input.int(3, title = 'WT MA Length')

// === EMA Ribbon参数 ===
ema1Len = input.int(5, "EMA 1 Length")
ema2Len = input.int(11, "EMA 2 Length")
ema3Len = input.int(15, "EMA 3 Length")
ema4Len = input.int(18, "EMA 4 Length")
ema5Len = input.int(21, "EMA 5 Length")
ema6Len = input.int(24, "EMA 6 Length")
ema7Len = input.int(28, "EMA 7 Length")
ema8Len = input.int(34, "EMA 8 Length")

// === 计算指标 ===
// WaveTrend计算
[wt1, wt2] = f_wavetrend(wtMASource, wtChannelLen, wtAverageLen, wtMALen)

// WaveTrend交叉条件
wtCross = ta.cross(wt1, wt2)
wtCrossDown = wt2 - wt1 >= 0

// EMA Ribbon计算
[ema1, ema2, ema3, ema4, ema5, ema6, ema7, ema8] = f_emaRibbon(close, ema1Len, ema2Len, ema3Len, ema4Len, ema5Len, ema6Len, ema7Len, ema8Len)

// === 交易信号 ===
longEma = ta.crossover(ema2, ema8)
shortEma = ta.crossover(ema8, ema2)
redCross = ta.crossunder(ema1, ema2)
blueTriangle = ta.crossover(ema2, ema3)
redDiamond = wtCross and wtCrossDown
bloodDiamond = redDiamond and redCross

// 更新最高最低价
if not na(lastLongPrice)
    highestSinceLastLong := math.max(high, nz(highestSinceLastLong))
if not na(lastShortPrice)
    lowestSinceLastShort := math.min(low, nz(lowestSinceLastShort))

// === 交易信号条件 ===
longCondition = longEma or (blueTriangle and not bloodDiamond)
shortCondition = shortEma or bloodDiamond

// === 执行交易 ===
if (longCondition)
    // 记录多头入场价格
    lastLongPrice := close
    // 重置最高价跟踪
    highestSinceLastLong := high
    
    stopPrice := nz(lowestSinceLastShort, close * 0.98)  // 使用前一个空头信号后的最低价作为止损
    float riskAmount = math.abs(close - stopPrice)
    targetPrice := close + (riskAmount * 2)  // 止盈为止损距离的2倍
    
    strategy.entry("做多", strategy.long)
    strategy.exit("多头止盈止损", "做多", limit=targetPrice, stop=stopPrice)

if (shortCondition)
    // 记录空头入场价格
    lastShortPrice := close
    // 重置最低价跟踪
    lowestSinceLastShort := low
    
    stopPrice := nz(highestSinceLastLong, close * 1.02)  // 使用前一个多头信号后的最高价作为止损
    float riskAmount = math.abs(stopPrice - close)
    targetPrice := close - (riskAmount * 3)  // 止盈为止损距离的2倍
    
    strategy.entry("做空", strategy.short)
    strategy.exit("空头止盈止损", "做空", limit=targetPrice, stop=stopPrice)

// === 绘制信号 ===
plotshape(longCondition, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.small, title="做多信号")
plotshape(shortCondition, style=shape.triangledown, color=color.red, location=location.abovebar, size=size.small, title="做空信号")

// 绘制止损线
plot(strategy.position_size > 0 ? stopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="多头止损线")
plot(strategy.position_size < 0 ? stopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="空头止损线")

// 绘制止盈线
plot(strategy.position_size > 0 ? targetPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="多头止盈线")
plot(strategy.position_size < 0 ? targetPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="空头止盈线")

Có liên quan

Thêm nữa