Dual Breakout Strategi

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

img

Gambaran umum

Strategi ini menggunakan Bollinger Bands untuk mengidentifikasi titik breakout untuk perdagangan panjang dan pendek, dikombinasikan dengan indikator ADX untuk menyaring kondisi pasar yang tidak menguntungkan dengan volatilitas rendah, untuk mengikuti tren.

Logika Strategi

Strategi ini terutama didasarkan pada indikator Bollinger Bands untuk menentukan arah panjang atau pendek. Band tengah Bollinger Bands adalah rata-rata pergerakan N-hari dari harga penutupan, dan lebar band dihitung menggunakan penyimpangan standar.

Untuk menghindari terobosan yang tidak valid dan perdagangan yang salah di pasar yang bergolak, strategi ini menggabungkan indikator ADX untuk menyaring kondisi pasar volatilitas rendah. Sinyal perdagangan hanya dihasilkan ketika nilai ADX berada di bawah ambang batas. Ketika ADX melampaui ambang batas, semua posisi ditutup untuk menunggu kondisi tren.

Strategi ini juga menetapkan stop loss dan take profit untuk perdagangan terbuka. Secara khusus, setelah membuka posisi, harga terendah dan harga tertinggi dari N hari sebelumnya dicatat sebagai stop loss dan take profit level untuk arah itu. Hal ini memungkinkan mengunci keuntungan sambil mengurangi kerugian dari pembalikan.

Dari logika kode, strategi pertama menghitung Bollinger Bands dan parameter ADX. Kemudian memeriksa apakah harga melanggar Bands band atas atau bawah, dan jika ADX berada di bawah ambang, untuk menghasilkan sinyal perdagangan. Setelah itu tingkat stop loss dan take profit secara dinamis diperbarui dan dilacak berdasarkan arah posisi saat ini.

Analisis Keuntungan

  • Bollinger Bands menawarkan sinyal breakout yang jelas untuk menangkap peluang tren
  • Filter ADX menghindari perdagangan Pasar berbelit-belit tanpa tren yang jelas
  • Stop loss secara efektif mengendalikan kerugian perdagangan tunggal
  • Mengikuti mengambil keuntungan mengunci di sebagian besar keuntungan

Analisis Risiko

  • Breakout mungkin salah tanpa mempertimbangkan volume
  • Filter ADX juga bisa melewatkan peluang tren
  • Stop loss dan mengambil keuntungan terlalu dekat dapat dihentikan keluar
  • Penyesuaian parameter yang buruk mempengaruhi kinerja strategi

Pertimbangkan untuk menggabungkan dengan indikator lain untuk mengkonfirmasi breakout dengan volume; mengoptimalkan filter ADX menggunakan kemiringan untuk mengidentifikasi perubahan tren; memperluas stop loss dan mengambil profit range untuk menghindari keluar prematur.

Arah Peningkatan

  • Mengoptimalkan panjang Bollinger Bands untuk hasil breakout terbaik
  • Filter ADX tune halus untuk menyeimbangkan akurasi tren dan sinyal palsu
  • Tambahkan indikator lain untuk mengkonfirmasi validitas breakout
  • Optimalkan rentang stop loss untuk menghindari sensitivitas yang berlebihan
  • Luaskan rentang keuntungan untuk mengunci lebih banyak keuntungan

Kesimpulan

Strategi ini memiliki logika yang jelas dan sederhana, menggunakan Bollinger Bands untuk sinyal breakout yang jelas, disaring oleh ADX untuk kondisi tren, untuk menangkap peluang tren. Stop loss dan take profit digunakan untuk mengontrol risiko dan mengunci keuntungan. Mudah dipahami dan diimplementasikan, strategi ini layak untuk pengujian lebih lanjut dan optimasi sebagai sistem trend berikut dasar.


/*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 banyak