Strategi Pengesanan Trend Bollinger Band

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

img

Ringkasan

Strategi ini menentukan arah trend pasaran secara umum dengan mengira dua purata bergerak eksponensial (EMA) dalam jangka masa yang berbeza, dan mengenal pasti peluang overbought dan oversold di sepanjang arah trend menggunakan Bollinger Bands adaptif untuk melaksanakan perdagangan trend.

Logika Strategi

  1. EMA 200 tempoh dan EMA 30 tempoh dikira. Jika EMA 200 lebih besar daripada EMA 30, trend jangka panjang ditentukan sebagai naik. Jika tidak, ia ditentukan sebagai turun.

  2. Selepas arah trend ditentukan, garis asas, jalur atas dan jalur bawah Bollinger Band dikira. Baseline menggunakan SMA dalam jangka masa yang boleh dikonfigurasikan (contohnya 8 tempoh). Lebar jalur adalah pengganda yang boleh dikonfigurasikan (contohnya 1.3 dan 1.1) amplitudo harga tertinggi dan terendah dalam tempoh yang sama dengan garis asas.

  3. Apabila trend jangka panjang naik, pecah band bawah menandakan masuk panjang; apabila trend jangka panjang turun, pecahan band atas menandakan masuk pendek.

  4. Untuk menapis pecah palsu, kadar perubahan pada lilin terakhir sebelum pecah diperiksa untuk berada di bawah ambang yang boleh dikonfigurasikan (contohnya 3%), dan lebar jalur diperiksa untuk lebih besar daripada tahap yang boleh dikonfigurasikan (contohnya 2,2% daripada harga penutupan).

  5. Selepas membuka kedudukan, stop loss yang boleh dikonfigurasikan (contohnya -3%) dan mengambil keuntungan (contohnya 10%) ditetapkan untuk mengunci keuntungan.

Kekuatan Strategi

  1. EMA berganda menentukan trend utama dan mengelakkan pembukaan kedudukan yang tidak teratur apabila trend utama tidak jelas.

  2. Band Bollinger adaptif menetapkan titik masuk di sepanjang trend.

  3. Kadar perubahan dan keperluan lebar minimum berkesan menapis pecah palsu.

  4. Tetapan stop loss dan mengambil keuntungan dengan munasabah mengunci keuntungan sambil mengekalkan risiko di bawah kawalan.

Risiko Strategi

  1. EMA berganda gagal untuk mencari dengan tepat titik pembalikan trend, kehilangan peluang pada titik perubahan trend.

  2. Tetapan parameter BB yang tidak betul boleh menyebabkan isyarat palsu.

  3. Stop loss tetap dan mengambil keuntungan tidak dapat menyesuaikan diri dengan turun naik pasaran.

Arahan pengoptimuman

  1. Menggabungkan penunjuk lain untuk menentukan pembalikan trend utama dan sekunder.

  2. Mengambil penyesuaian dinamik parameter BB.

  3. Tetapkan perintah bersyarat untuk berhenti kerugian dan mengambil keuntungan berdasarkan kriteria tertentu.

Kesimpulan

Strategi ini melaksanakan perdagangan trend dengan menilai trend utama menggunakan EMA berganda dan mengenal pasti peluang dengan Bollinger Bands. Kekuatannya terletak pada menetapkan masuk masuk, berhenti kerugian dan mengambil keuntungan yang munasabah untuk mengunci keuntungan trend. Terdapat juga beberapa risiko, seperti gagal menangkap titik perubahan trend dan tetapan parameter BB yang tidak betul. Pengoptimuman lanjut dalam aspek ini akan memperkasakan strategi untuk merebut keuntungan trend dengan lebih baik.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2039, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop

strategy("Custom Band Strategy", overlay=true)
source = close //종가 기준

//추세 조건 설정
emaLong = ema(source, input(200, minval=0))
emaShort = ema(source, input(30, minval=0))
trend = if emaShort>=emaLong
    1
else
    -1
    
plot(emaLong, color=red, transp=0)
plot(emaShort, color=blue, transp=0)


//BB 계산(default 14/3.2)
length = input(8, minval=1)

basis = sma(source, length)
plot(basis, color=green, transp=0)
max=highest(abs(source-basis), length)

factor1 = input(1.3, minval=0.5)
factor2 = input(1.1, minval=0.5)

upper = if trend==1
    basis + max*factor1
else
    basis + max*factor2
lower = if trend==-1
    basis - max*factor1
else
    basis - max*factor2

plot1 = plot(upper)
plot2 = plot(lower)
fill(plot1, plot2, transp=80, color=green)

//밴드 이탈 후 재진입 조건 설정
cross_over = (low<=lower and close>=lower) or crossover(close,lower)
cross_under = (high>=upper and close<=upper) or crossunder(close,upper)

//변동율 계산
maxCandle=highest(abs(open-close), length)
    
roc = abs(open-close)/open*100
changerate = input(3, minval=0.0)

//수익률 계산
value = abs(strategy.position_size)*strategy.position_avg_price
roe = strategy.openprofit/value * 100
expRoeL = (upper-lower)/lower*100
expRoeS = (upper-lower)/upper*100
exp = input(2.2, minval=0.0)

target = input(10, minval=0.0)
stop = input(-3, minval=-10.0)

strategy.close_all(when=roc>=changerate and testPeriod())
strategy.close_all(when=roe>=target and testPeriod())
strategy.close_all(when=roe<=stop and testPeriod())

plotchar(crossover(close,lower) and crossunder(close,upper),color=blue, transp=0, text="cross")
plotchar(roc>=changerate,color=red, transp=0, text="roc")
plotchar(roe>=target,color=blue, transp=0, text="target")
plotchar(roe<=stop,color=green, transp=0, text="stop")

minroe = input(2, minval=0.0)

strategy.close_all(when=cross_under and roe>minroe and testPeriod())
strategy.entry("BBandLE", strategy.long, stop=source, oca_name="BollingerBands",  comment="BBandLE", when=(cross_over) and trend==1 and roc<changerate and expRoeL>exp and source>emaLong and strategy.position_size==0 and testPeriod()) //trend==1 and 
//else
strategy.close_all(when=cross_over and roe>minroe and testPeriod())
strategy.entry("BBandSE", strategy.short, stop=source, oca_name="BollingerBands",  comment="BBandSE", when=(cross_under) and trend==-1 and roc<changerate and expRoeS>exp and source<emaLong and strategy.position_size==0 and testPeriod()) //trend==-1 and 

Lebih lanjut