Trend Mengikuti Strategi Berdasarkan Penembusan Saluran

Penulis:ChaoZhang, Tarikh: 2023-09-15 12:02:10
Tag:

Artikel ini menerangkan secara terperinci strategi perdagangan trend menggunakan penembusan saluran. Ia mengenal pasti arah trend dengan saluran EMA dan membuat perdagangan kontra-trend menggunakan Bollinger Bands.

I. Logik Strategi

Komponen utama ialah:

  1. Tetapkan EMA tengah dan meluaskan saluran atas/bawah berdasarkan peratusan.

  2. Pergi panjang pada saluran atas dan pendek pada saluran bawah untuk mengikuti trend.

  3. Apabila BB menyempitkan, menilai pembalikan trend untuk perdagangan yang bertentangan dengan trend.

  4. Gunakan hentian ATR untuk mengehadkan risiko kerugian.

  5. Parameter saluran yang boleh disesuaikan untuk pengoptimuman.

Ia menggabungkan saluran EMA untuk arah trend dan BB untuk pembalikan untuk membentuk sistem lengkap.

II. Kelebihan Strategi

Kelebihan terbesar adalah penggunaan penunjuk yang munasabah, dengan EMA menentukan trend arus perdana dan BB untuk pembalikan.

Satu lagi kelebihan adalah stop loss langsung dan berkesan untuk kawalan risiko.

Akhirnya, parameter yang boleh disesuaikan membolehkan pengoptimuman di seluruh produk.

III. Risiko yang berpotensi

Walau bagaimanapun, terdapat beberapa risiko:

Pertama, kedua-dua EMA dan BB mempunyai isu yang tertinggal.

Kedua, perdagangan pembalikan yang gagal perlu dipertimbangkan.

Akhirnya, pengoptimuman yang luas diperlukan untuk mengelakkan pemasangan berlebihan.

IV. Ringkasan

Ringkasnya, artikel ini telah menerangkan strategi trend berikut berdasarkan penembusan saluran EMA, dengan perdagangan kontra-trend pada pembalikan. Ia boleh mencapai keuntungan yang stabil melalui pengoptimuman parameter tetapi memerlukan pengurusan kesukaran pengoptimuman dan kelewatan penunjuk.


/*backtest
start: 2023-08-15 00:00:00
end: 2023-09-14 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="[mdeacey] EMA Percentage Channel + Bollinger Band Trending Strategy", shorttitle="[mdeacey] EMA% Channel + BB Trend Strategy", overlay=true)

//EMA 200

len = input(title="EMA Length", type=input.integer, defval=100)
srce = input(title="EMA Source", type=input.source, defval=close)

ema1= ema(srce,len)

percent = input(title="Inside Channel (%)", type=input.float, defval= 1) 
valuee = (percent*ema1)/100
upperbande = ema1 + valuee
lowerbande = ema1 - valuee
///2
percent2 = input(title="Outside Channel (%)", type=input.float, defval= 2) 
valuee2 = (percent2*ema1)/100
upperbande2 = ema1 + valuee2
lowerbande2 = ema1 - valuee2

plot(upperbande, title='Inside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande, title='Inside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )
plot(upperbande2, title='Outside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande2, title='Outside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )

length = input(20, minval=2)
src = input(close, title="Close price")
mult = input(2.0, title="Multiplier", minval=0.001, maxval=50)

MA2 = sma(src, length)
dev = mult * stdev(src, length)
upper = MA2 + dev
lower = MA2 - dev

signalColor = crossunder(close, upper) ? color.red : crossover(close, lower) ? color.green : color.white

barcolor(color=signalColor)
nopo= strategy.position_size==0

upperBand = plot(upper, title='Upper Bollinger Band', color=color.gray, linewidth=1)
lowerBand = plot(lower, title='Lower Bollinger Band', color=color.gray, linewidth=1)
fill(upperBand, lowerBand, title='Bollinger Band', color=color.black)
strategy.entry("Long",true,when = crossover(close,lower)  and close <lowerbande and close>lowerbande2)
strategy.close("Long",when = crossunder(close,lowerbande2))//crossunder(close,lowerbande) or crossunder(close,lowerbande2))

strategy.entry("Short",false,when = crossunder(close,upper)  and close >upperbande and close<upperbande2)
strategy.close("Short",when = crossover(close,upperbande2) )//crossover(close,upperbande) or crossover(close,upperbande2) )

//Inputs
atrPeriod = input(defval=14, title="ATR Period",group='ATR Stoploss', type=input.integer) // Adjust this to change the ATR calculation length
multiplierPeriod = input(defval=1.75, title="ATR Multiplier",group='ATR Stoploss',  type=input.float)// Adjust this to change the distance between your candles and the line

//ATR Calculation
pine_rma(x, y) =>
    alpha = y
    sum = 0.0
    sum := (x + (alpha - 1) * nz(sum[1])) / alpha

true_range() =>
    max(high - low, max(abs(high - close[1]), abs(low - close[1])))

//Long SL
plot(low - pine_rma(true_range() * multiplierPeriod, atrPeriod), "Long Stop", color=color.red, offset = 1)
// Short SL
plot(high +pine_rma(true_range() * multiplierPeriod, atrPeriod), "Short Stop", color=color.red, offset = 1)
strategy.exit("Exit","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("Exit","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )

/////////////////////new strategy
strategy.entry("Long",true,stop =upperbande  ,when = close <upperbande and  close[1] <upperbande and nopo )
strategy.close("Long",when = crossunder(close,upper) )//  and close <upperbande and close>lowerbande)

strategy.entry("Short",false,stop =lowerbande  ,when = close >lowerbande and close[1] >lowerbande and nopo )
strategy.close("Short",when = crossover(close, lower) )

strategy.exit("Exit","Long",stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("Exit","Short",stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )


Lebih lanjut