Strategi Pembebasan Berganda

Penulis:ChaoZhang, Tarikh: 2023-11-03 17:16:02
Tag:

img

Ringkasan

Strategi ini menggunakan Bollinger Bands untuk mengenal pasti titik pecah untuk perdagangan panjang dan pendek, digabungkan dengan penunjuk ADX untuk menapis keadaan pasaran yang tidak baik dengan turun naik yang rendah, untuk mengikuti trend.

Logika Strategi

Strategi ini terutamanya berdasarkan penunjuk Bollinger Bands untuk menentukan arah panjang atau pendek. Band tengah Bollinger Bands adalah purata bergerak N hari harga penutupan, dan lebar band dikira menggunakan penyimpangan standard. Penembusan di bawah band bawah menandakan perdagangan panjang, sementara penembusan di atas band atas menandakan perdagangan pendek.

Untuk mengelakkan penembusan yang tidak sah dan perdagangan yang salah di pasaran yang bergolak, strategi ini menggabungkan penunjuk ADX untuk menapis keadaan pasaran turun naik yang rendah. Isyarat perdagangan hanya dihasilkan apabila nilai ADX di bawah ambang. Apabila ADX melebihi ambang, semua kedudukan ditutup untuk menunggu keadaan trend.

Strategi ini juga menetapkan stop loss dan mengambil keuntungan untuk perdagangan terbuka. Khususnya, selepas membuka kedudukan, harga terendah dan harga tertinggi N hari sebelumnya direkodkan sebagai stop loss dan mengambil tahap keuntungan untuk arah itu. Ini membolehkan mengunci keuntungan sambil mengurangkan kerugian dari pembalikan.

Dari logik kod, strategi pertama kali mengira Bollinger Bands dan parameter ADX. Kemudian ia memeriksa jika harga melanggar Bands band atas atau bawah, dan jika ADX di bawah ambang, untuk menjana isyarat perdagangan. Selepas itu tahap stop loss dan mengambil keuntungan dikemas kini secara dinamik dan dikesan berdasarkan arah kedudukan semasa.

Analisis Kelebihan

  • Bollinger Bands menawarkan isyarat pecah yang jelas untuk menangkap peluang trend
  • Penapis ADX mengelakkan perdagangan Pasaran bergelora tanpa trend yang jelas
  • Stop loss berkesan mengawal kerugian perdagangan tunggal
  • Pengambilan keuntungan yang tertinggal di kebanyakan keuntungan

Analisis Risiko

  • Penembusan mungkin salah tanpa mengambil kira jumlah
  • Penapis ADX juga mungkin terlepas peluang trend
  • Hentikan kerugian dan mengambil keuntungan terlalu dekat mungkin akan dihentikan
  • Penyesuaian parameter yang buruk memberi kesan kepada prestasi strategi

Pertimbangkan untuk menggabungkan dengan penunjuk lain untuk mengesahkan penembusan dengan jumlah; mengoptimumkan penapis ADX menggunakan cerun untuk mengenal pasti perubahan trend; meluaskan julat stop loss dan mengambil keuntungan untuk mengelakkan keluar awal.

Arahan Penambahbaikan

  • Mengoptimumkan panjang Bollinger Bands untuk hasil pecah terbaik
  • Penapis ADX tune halus untuk mengimbangi ketepatan trend dan isyarat palsu
  • Tambah penunjuk lain untuk mengesahkan kesahihan pecah
  • Mengoptimumkan julat stop loss untuk mengelakkan sensitiviti yang berlebihan
  • Memperluaskan julat keuntungan untuk mengunci lebih banyak keuntungan

Kesimpulan

Strategi ini mempunyai logik yang jelas dan mudah, menggunakan Bollinger Bands untuk isyarat pecah yang jelas, disaring oleh ADX untuk keadaan trend, untuk menangkap peluang trend. Hentikan kerugian dan ambil keuntungan digunakan untuk mengawal risiko dan mengunci keuntungan. Mudah difahami dan dilaksanakan, strategi ini bernilai ujian dan pengoptimuman lanjut sebagai sistem trend berikut asas.


/*backtest
start: 2023-10-26 00:00:00
end: 2023-11-02 00:00:00
period: 1m
basePeriod: 1m
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/
// © tweakerID

// This strategy uses Bollinger Bands to buy when the price 
// crosses over the lower band and sell when it crosses down
// the upper band. It only takes trades when the ADX is 
// below a certain level, and exits all trades when it's above it.

//@version=4
strategy("BB + ADX Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value = 0.04, initial_capital=100)

//Inputs
i_reverse=input(false, title="Reverse Trades")
i_ADXClose=input(true, title="ADX Close")
i_SL=input(false, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.5, title="SL Expander")
i_TPExpander=input(defval=0, step=.5, title="TP Expander")

//ADX Calculations
adxlen = input(14, title="ADX Smoothing")
dilen = input(20, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
adxlevel=input(30, step=5)

//BB Calculations
BBCALC=input(false, title="-----------BB Inputs-----------")

length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
MAlen=input(defval=9)
source = close
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Entry Logic
BUY = crossover(source, lower) and sig < adxlevel
SELL = crossunder(source, upper) and sig < adxlevel

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0))*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0))*i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))+((valuewhen(bought, atr(14), 0))*i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0)-strategy.position_avg_price)-((valuewhen(bought, atr(14), 0))*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na
TP= islong ? lTP : isshort ? sTP : na

//Entries
strategy.entry("long", long=i_reverse?false:true, when=BUY)
strategy.entry("short", long=i_reverse?true:false, when=SELL)

//EXITS
if i_ADXClose
    strategy.close_all(when=sig > adxlevel)
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots	
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")
plot(upper)
plot(lower)




Lebih lanjut