Strategi Crossover Rata-rata Bergerak Eksponensial B-Xtrender


Tanggal Pembuatan: 2024-02-20 14:45:17 Akhirnya memodifikasi: 2024-02-20 14:45:17
menyalin: 0 Jumlah klik: 1666
1
fokus pada
1617
Pengikut

Strategi Crossover Rata-rata Bergerak Eksponensial B-Xtrender

Ringkasan

Strategi ini adalah strategi perdagangan berdasarkan prinsip crossover rata-rata indeks. Ini menggabungkan indikator RSI dan filter rata-rata untuk membentuk sistem perdagangan pelacakan dan pembalikan tren yang lebih lengkap.

Prinsip Strategi

  1. Sinyal perdagangan terbentuk dengan menggunakan persilangan cepat lambat dari rata-rata bergerak indeks. EMA persilangan dengan parameter garis cepat adalah garis 5 dan 20 hari, dan EMA persilangan dengan parameter garis lambat adalah garis 20 dan 15 hari.
  2. Lakukan lebih banyak saat melewati jalur lambat di jalur cepat, kosong saat melewati jalur lambat di bawah jalur cepat. Validasi kedua dilakukan dengan indikator RSI, dan validitas sinyal perdagangan hanya dikonfirmasi ketika RSI juga berlawanan arah.
  3. Dengan menambahkan 200-day moving average sebagai filter, sinyal perdagangan hanya akan dikirim ketika harga melewati garis rata-rata, sehingga menghindari beberapa false cross dalam situasi goyangan.

Keunggulan Strategis

  1. EMA ganda yang digabungkan dengan RSI secara signifikan meningkatkan keandalan sinyal dan mengurangi tingkat sinyal palsu.
  2. Dengan kombinasi parameter EMA yang cepat dan lambat, sensitivitas sinyal perdagangan dipertimbangkan dan stabilitas sinyal dijamin.
  3. Penambahan filter linear yang efektif untuk menyaring kebisingan di bawah kondisi getaran dan menghindari transaksi yang tidak perlu.

Risiko Strategis

  1. EMA adalah indikator lag yang terjadi pada saat harga berubah secara drastis. Hal ini dapat menyebabkan risiko kerugian atau sinyal yang terlewatkan.
  2. Setting parameter RSI yang tidak tepat juga dapat menyebabkan sinyal terlambat.
  3. Filter rata-rata, meskipun dapat menghindari pasar yang bergoyang, dapat memfilter peluang masuk awal pada tahap awal tren.

Arah optimasi strategi

  1. Mengubah parameter EMA secara dinamis, memilih kombinasi parameter yang optimal pada siklus yang berbeda.
  2. Cobalah untuk menggabungkan indikator lain seperti MACD dengan RSI.
  3. Mengoptimalkan parameter filter linear rata untuk menemukan keseimbangan antara kebisingan dan peluang.

Meringkaskan

Secara keseluruhan, strategi ini adalah sistem perdagangan rata-rata bergerak indeks yang lebih lengkap. Ini didasarkan pada pengambilan sinyal perdagangan, dengan tambahan pengenalan indikator RSI untuk melakukan verifikasi berlapis. Ini pasti dapat meningkatkan kualitas sinyal secara signifikan, dan merupakan strategi yang layak untuk dipelajari dan dioptimalkan.

Kode 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)