Advanced WaveTrend dan EMA Ribbon Fusion Strategy Trading

WT EMA HLC3 SMA MA
Tarikh penciptaan: 2025-01-06 15:21:57 Akhirnya diubah suai: 2025-01-06 15:21:57
Salin: 3 Bilangan klik: 405
1
fokus pada
1617
Pengikut

Advanced WaveTrend dan EMA Ribbon Fusion Strategy Trading

Gambaran keseluruhan

Strategi ini ialah sistem dagangan lanjutan yang menggabungkan pengayun WaveTrend dengan jalur purata bergerak EMA. Dengan menyepadukan kedua-dua penunjuk teknikal ini, strategi dagangan dibentuk yang boleh menangkap titik perubahan dalam arah aliran pasaran dengan tepat. Strategi ini menggunakan tetapan henti untung dan henti rugi dinamik, mengejar pulangan yang lebih tinggi sambil melindungi keselamatan modal.

Prinsip Strategi

Teras strategi adalah untuk mengenal pasti isyarat dagangan melalui penyelarasan penunjuk WaveTrend dan lapan purata bergerak EMA. Penunjuk WaveTrend mengukur keadaan terlebih beli atau terlebih jual pasaran dengan mengira sisihan antara harga dan purata bergerak. Jalur purata bergerak EMA mengesahkan arah aliran dengan melepasi purata pergerakan bagi tempoh yang berbeza. Secara khusus:

  1. Apabila EMA2 melintasi EMA8, atau isyarat segitiga biru muncul (EMA2 melintasi EMA3) dan tiada corak berlian darah, isyarat panjang akan dicetuskan.
  2. Apabila EMA8 melintasi EMA2, atau corak berlian berdarah muncul, isyarat pendek dicetuskan.
  3. Tetapan stop loss menggunakan titik ekstrem selepas isyarat terbalik sebelumnya, yang boleh mengawal risiko dengan berkesan
  4. Sasaran keuntungan ditetapkan pada 2-3 kali jarak henti rugi, mencerminkan nisbah pulangan risiko yang baik

Kelebihan Strategik

  1. Mekanisme pengesahan berganda meningkatkan kebolehpercayaan isyarat dagangan
  2. Tetapan henti rugi dinamik boleh menyesuaikan diri dengan turun naik pasaran dengan lebih baik
  3. Dengan tetapan nisbah pulangan risiko yang jelas
  4. Penggunaan jalur purata bergerak EMA membantu menentukan arah aliran pasaran keseluruhan
  5. Penunjuk WaveTrend boleh mengenal pasti keadaan pasaran terlebih beli dan terlebih jual dengan berkesan
  6. Logik strategi adalah jelas, mudah difahami dan dilaksanakan

Risiko Strategik

  1. Isyarat palsu yang kerap mungkin berlaku dalam pasaran yang tidak menentu
  2. Henti rugi dinamik mungkin mudah dicetuskan semasa turun naik yang tidak menentu
  3. Penunjuk yang bergantung pada data sejarah mungkin gagal apabila pasaran berubah secara drastik.
  4. Penggunaan berbilang penunjuk teknikal boleh menyebabkan isyarat tertunda Penyelesaian:
  • Penapis turun naik boleh ditambah untuk mengurangkan isyarat palsu dalam pasaran yang tidak menentu
  • Pertimbangkan untuk menggunakan tetapan stop loss yang lebih longgar
  • Tambah mekanisme pengesahan kekuatan arah aliran

Arah pengoptimuman strategi

  1. Memperkenalkan penunjuk turun naik pasaran (seperti ATR) untuk melaraskan jarak henti kerugian secara dinamik
  2. Tambah mekanisme pengesahan volum untuk meningkatkan kebolehpercayaan isyarat
  3. Pertimbangkan untuk menambah penapis kekuatan arah aliran untuk berdagang hanya dalam pasaran arah aliran yang kukuh
  4. Optimumkan parameter WaveTrend untuk menyesuaikan diri dengan persekitaran pasaran yang berbeza dengan lebih baik
  5. Kaji sinergi isyarat pada tempoh masa yang berbeza

ringkaskan

Ini adalah sistem perdagangan lengkap yang menggabungkan aliran mengikuti dan pengayun daripada analisis teknikal. Dengan menggunakan jalur purata bergerak WaveTrend dan EMA secara gabungan, anda bukan sahaja boleh memahami arah aliran umum, tetapi juga memasuki pasaran tepat pada masanya pada titik perubahan arah aliran. Mekanisme pengurusan henti untung dan henti rugi yang dinamik menyediakan strategi dengan keupayaan kawalan risiko yang baik. Ruang pengoptimuman strategi terletak terutamanya pada penambahbaikan penapisan isyarat dan pengurusan risiko.

Kod sumber strategi
/*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="空头止盈线")