Strategi aliran berdasarkan pecahan saluran


Tarikh penciptaan: 2023-09-15 12:02:10 Akhirnya diubah suai: 2023-09-15 12:02:10
Salin: 0 Bilangan klik: 739
1
fokus pada
1617
Pengikut

Dalam artikel ini, kami akan menerangkan strategi kuantitatif untuk perdagangan trend yang menggunakan terobosan saluran. Strategi ini mengenal pasti arah trend melalui saluran EMA, dan melakukan operasi berbalik dengan penghakiman Brin.

I. Prinsip-prinsip Strategi

Strategi ini merangkumi beberapa elemen utama:

  1. Menetapkan EMA garis tengah dan mengembangkan saluran atas dan bawah mengikut perkadaran;

  2. Apabila harga menembusi garisan saluran atas, buat lebih banyak pengesanan; apabila harga menembusi garisan saluran bawah, buat pengesanan kosong;

  3. Apabila Brin berkurangan, anda boleh melihat trend berbalik dan melakukan operasi berbalik.

  4. Tetapkan ATR Stop untuk mengurangkan risiko kerugian.

  5. Parameter saluran boleh disesuaikan untuk mencari kombinasi parameter terbaik.

Strategi ini menilai arah trend utama melalui saluran EMA, menggunakan Brin untuk mengenal pasti peluang pembalikan dan membentuk sistem trend yang lengkap.

Kedua, kelebihan strategi

Kelebihan utama strategi ini adalah penggunaan indikator yang munasabah, EMA menilai arus perdana, dan Burin menangkap pembalikan.

Kelebihan lain ialah penempatan stop loss adalah berkesan secara langsung, dan ia dapat mengawal risiko.

Akhirnya, parameter boleh disesuaikan dan boleh dioptimumkan untuk pelbagai jenis.

Ketiga, potensi risiko

Namun, strategi ini juga mempunyai masalah:

Pertama, terdapat ketinggalan dalam EMA dan BRI.

Kedua, risiko kegagalan operasi terbalik perlu dipertimbangkan.

Akhirnya, pengoptimuman parameter memerlukan banyak kerja untuk mengelakkan pengoptimuman berlebihan.

Empat isi, ringkasan

Artikel ini menerangkan secara terperinci satu strategi untuk perdagangan trend menggunakan EMA Channel Break. Ia dapat mengenal pasti trend utama dan melakukan operasi terbalik pada titik balik. Strategi ini dapat memperoleh keuntungan yang stabil melalui pengoptimuman parameter, tetapi juga memerlukan masalah seperti kesukaran pengoptimuman dan ketinggalan indikator.

Kod sumber strategi
/*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)  )