Strategi B-Xtrender Perpindahan Purata Pergerakan Eksponen


Tarikh penciptaan: 2024-02-20 14:45:17 Akhirnya diubah suai: 2024-02-20 14:45:17
Salin: 0 Bilangan klik: 1666
1
fokus pada
1617
Pengikut

Strategi B-Xtrender Perpindahan Purata Pergerakan Eksponen

Gambaran keseluruhan

Strategi ini adalah strategi perdagangan berdasarkan prinsip persilangan indeks rata-rata. Ia menggabungkan penunjuk RSI dan penapis rata-rata, membentuk satu set yang lebih lengkap trend-mengikuti dan berbalik sistem perdagangan.

Prinsip Strategi

  1. Penggunaan indeks bergerak rata-rata untuk membentuk isyarat perdagangan. EMA untuk garis 5 dan 20 dengan parameter garis cepat, EMA untuk garis 20 dan 15 dengan parameter garis perlahan.
  2. Melalui garis cepat, anda melakukan lebih banyak ketika melintasi garis lambat, dan di bawah garis cepat, anda melakukan kosong ketika melintasi garis lambat. Penggunaan indikator RSI untuk pengesahan kedua, hanya mengesahkan kesahihan isyarat perdagangan apabila RSI juga bersilang.
  3. Dengan menggunakan purata bergerak 200 hari sebagai penapis, isyarat perdagangan hanya akan dikeluarkan apabila harga menembusi garis rata-rata ini, dan dengan itu mengelakkan banyak persilangan palsu dalam keadaan goyah.

Kelebihan Strategik

  1. Dua EMA bersilang dengan RSI meningkatkan kebolehpercayaan isyarat dan mengurangkan kadar isyarat palsu.
  2. Dengan menggunakan parameter EMA perlahan-lahan, kedua-dua sensitiviti isyarat perdagangan dipertimbangkan dan kestabilan isyarat dijamin.
  3. Penambahan penapis linear, yang dapat menyaring secara berkesan bunyi di bawah keadaan gegaran, mengelakkan transaksi yang tidak perlu.

Risiko Strategik

  1. EMA adalah penunjuk kelewatan, yang mempunyai kelewatan yang ketara apabila harga berubah secara mendadak. Ini boleh menyebabkan risiko kerugian atau kehilangan isyarat.
  2. Penetapan parameter RSI yang tidak betul juga boleh menyebabkan isyarat terlewat.
  3. Walaupun penapisan linear dapat mengelakkan pergerakan pasaran, ia juga boleh menapis peluang masuk awal pada peringkat permulaan trend.

Arah pengoptimuman strategi

  1. Mengubah parameter EMA secara dinamik, memilih kombinasi parameter terbaik dalam kitaran yang berbeza.
  2. Cubalah menggabungkan RSI dengan penunjuk lain seperti MACD.
  3. Mengoptimumkan parameter penapis linear rata untuk mencari keseimbangan antara kebisingan dan peluang.

ringkaskan

Strategi ini secara keseluruhannya adalah untuk membina sistem perdagangan purata bergerak indeks yang lebih lengkap. Ia berdasarkan mendapatkan isyarat perdagangan, pengenalan tambahan RSI untuk mengesahkan pelbagai lapisan. Ini pasti dapat meningkatkan kualiti isyarat dengan ketara, dan merupakan strategi yang patut dipelajari dan dioptimumkan.

Kod sumber strategi
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © QuantTherapy
//@version=4
strategy("B-Xtrender [Backtest Edition] @QuantTherapy")

i_short_l1  = input(5 , title="[Short] L1")
i_short_l2  = input(20, title="[Short] L2")
i_short_l3  = input(15, title="[Short] L3")

i_long_l1   = input(20, title="[Long] L1")
i_long_l2   = input(15, title="[Long] L2")

i_ma_use    = input(true , title="[MA Filter] Yes/No" )
i_ma_len    = input(200  , title="[MA Filter] length" )
i_ma_type   = input("EMA", title="[MA Filter] type", options = ["SMA", "EMA"])

shortTermXtrender = rsi( ema(close, i_short_l1) - ema(close, i_short_l2), i_short_l3 ) - 50
longTermXtrender  = rsi( ema(close, i_long_l1), i_long_l2 ) - 50

shortXtrenderCol = shortTermXtrender > 0 ? shortTermXtrender > shortTermXtrender[1] ? color.lime : #228B22 : shortTermXtrender > shortTermXtrender[1] ? color.red : #8B0000
plot(shortTermXtrender, color=shortXtrenderCol, style=plot.style_columns, linewidth=1, title="B-Xtrender Osc. - Histogram", transp = 40)

longXtrenderCol   = longTermXtrender> 0 ? longTermXtrender > longTermXtrender[1] ? color.lime : #228B22 : longTermXtrender > longTermXtrender[1] ? color.red : #8B0000
macollongXtrenderCol =  longTermXtrender > longTermXtrender[1] ? color.lime : color.red
plot(longTermXtrender , color=longXtrenderCol, style=plot.style_columns, linewidth=2, title="B-Xtrender Trend - Histogram", transp = 90)

plot(longTermXtrender , color=#000000             , style=plot.style_line, linewidth=5, title="B-Xtrender Trend - Line", transp = 100)
plot(longTermXtrender , color=macollongXtrenderCol, style=plot.style_line, linewidth=3, title="B-Xtrender Trend - Line", transp = 100)

// --- Initialize MA Filter
ma = i_ma_type == "EMA" ? ema(close, i_ma_len) : sma(close, i_ma_len)
maFilterLong = true
maFilterShort = true
if i_ma_use
    maFilterLong  := close > ma ? true : false
    maFilterShort := close < ma ? true : false

long  = shortTermXtrender > 0 and longTermXtrender > 0 and maFilterLong
closeLong = shortTermXtrender < 0 or longTermXtrender < 0 
short = shortTermXtrender < 0 and longTermXtrender < 0 and maFilterShort
closeShort = shortTermXtrender > 0 or longTermXtrender > 0 

plotshape(long[1]==true  and long[2]==false  ? 0 : na , location=location.absolute, style=shape.labelup  , color=color.lime, size=size.small, transp=10)
plotshape(short[1]==true and short[2]==false ? 0 : na, location=location.absolute, style=shape.labeldown, color=color.red , size=size.small, transp=10)
plotshape(closeLong[1]==true and closeLong[2]==false
 or closeShort[1]==true and closeShort[2]==false ? 0 : na, location=location.absolute, style=shape.circle, color=color.orange , size=size.small)

i_perc     = input(defval = 20.0, title = "[TSL-%] Percent"  , minval = 0.1 )
i_src = close // constant for calculation
sl_val = i_src * i_perc / 100

strategy.entry("Long", strategy.long, when = long ) 
strategy.close("Long", when = closeLong)

strategy.entry("Short", strategy.short, when = short) 
strategy.close("Short", when = closeShort)

// Calculate SL
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if (strategy.position_size > 0)
    stopValue = close - sl_val
    max(stopValue, longStopPrice[1])
else
    0

shortStopPrice := if (strategy.position_size < 0)
    stopValue = close + sl_val
    min(stopValue, shortStopPrice[1])
else
    syminfo.mintick*1000000

// For TSL Visualisation on Chart    
// plot(series=(strategy.position_size > 0) ? longStopPrice : na,
//      color=color.fuchsia, style = plot.style_circles,
//      linewidth=1, title="Long Trail Stop")
     
// plot(series=(strategy.position_size < 0) ? shortStopPrice : na,
//      color=color.fuchsia, style = plot.style_circles,
//      linewidth=1, title="Short Trail Stop")

if (strategy.position_size > 0)
    strategy.exit(id="TSL Long", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="TSL Short", stop=shortStopPrice)