Sumber dimuat naik... memuat...

Advanced WaveTrend dan EMA Ribbon Fusion Trading Strategy

Penulis:ChaoZhang, Tarikh: 2025-01-06 15:21:57
Tag:WTEMAHLC3SMAMA

img

Ringkasan

Strategi ini adalah sistem perdagangan canggih yang menggabungkan penunjuk pengayun WaveTrend dengan pita EMA. Dengan mengintegrasikan kedua-dua penunjuk teknikal ini, ia mewujudkan strategi perdagangan yang mampu menangkap dengan tepat titik pembalikan trend pasaran. Strategi ini menggunakan tetapan stop-loss dan mengambil keuntungan yang dinamik untuk mengejar pulangan yang lebih tinggi sambil melindungi modal.

Prinsip Strategi

Inti strategi ini terletak pada penggunaan sinergis penunjuk WaveTrend dan lapan garis EMA untuk mengenal pasti isyarat perdagangan. Penunjuk WaveTrend mengukur keadaan pasaran yang terlalu banyak dibeli dan terlalu banyak dijual dengan mengira penyimpangan antara harga dan purata bergerak. Ribbon EMA mengesahkan arah trend melalui persilangan purata bergerak tempoh yang berbeza. Khususnya:

  1. Isyarat panjang dicetuskan apabila EMA2 melintasi di atas EMA8, atau apabila isyarat segitiga biru muncul (EMA2 melintasi di atas EMA3) tanpa corak berlian darah
  2. Isyarat pendek dicetuskan apabila EMA8 melintasi di atas EMA2, atau apabila corak berlian darah muncul
  3. Stop-loss ditetapkan pada titik ekstrem selepas isyarat counter sebelumnya, mengawal risiko dengan berkesan
  4. Sasaran mengambil keuntungan ditetapkan pada 2-3 kali jarak stop-loss, menunjukkan nisbah risiko-balasan yang baik

Kelebihan Strategi

  1. Mekanisme pengesahan berganda meningkatkan kebolehpercayaan isyarat dagangan
  2. Tetapan stop-loss dinamik lebih sesuai dengan turun naik pasaran
  3. Tetapan nisbah risiko-balasan yang jelas
  4. EMA ribbon membantu menentukan trend pasaran secara keseluruhan
  5. Indikator WaveTrend secara berkesan mengenal pasti keadaan pasaran yang terlalu banyak dibeli / terlalu banyak dijual
  6. Logik strategi yang jelas yang mudah difahami dan dilaksanakan

Risiko Strategi

  1. Boleh menghasilkan isyarat palsu yang kerap di pasaran yang berbeza
  2. Perhentian dinamik boleh dengan mudah dicetuskan semasa turun naik yang teruk
  3. Penunjuk berdasarkan data sejarah mungkin gagal semasa perubahan rejim pasaran
  4. Pelbagai penunjuk teknikal boleh menyebabkan kelewatan isyarat Penyelesaian:
  • Tambah penapis turun naik untuk mengurangkan isyarat palsu di pasaran pelbagai
  • Pertimbangkan untuk menggunakan tetapan stop-loss yang lebih luas
  • Tambah mekanisme pengesahan kekuatan trend

Arahan pengoptimuman

  1. Memperkenalkan penunjuk turun naik (seperti ATR) untuk penyesuaian stop-loss dinamik
  2. Tambah mekanisme pengesahan jumlah untuk meningkatkan kebolehpercayaan isyarat
  3. Pertimbangkan untuk menambah penapis kekuatan trend untuk berdagang hanya di pasaran trend yang kuat
  4. Mengoptimumkan parameter WaveTrend untuk penyesuaian yang lebih baik kepada keadaan pasaran yang berbeza
  5. Kajian sinergi isyarat dalam jangka masa yang berbeza

Ringkasan

Ini adalah sistem perdagangan lengkap yang menggabungkan trend berikut dan penunjuk osilator dalam analisis teknikal. Melalui penggunaan terkoordinasi pita WaveTrend dan EMA, ia boleh menangkap trend utama dan memasuki tepat pada masanya pada titik pembalikan trend. mekanisme pengurusan stop-loss dan mengambil keuntungan dinamik memberikan keupayaan kawalan risiko yang baik. potensi pengoptimuman strategi terutamanya terletak pada peningkatan penapisan isyarat dan pengurusan risiko.


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

Berkaitan

Lebih lanjut