
Strategi ini menilai arah trend pasaran dengan mengira purata bergerak indeks ((EMA) untuk dua kitaran yang berbeza, dengan asumsi bahawa arah trend telah ditentukan, digabungkan dengan penyesuaian diri untuk mencari peluang overbought dan oversold yang dibawa oleh Brin, untuk mencapai perdagangan yang mengikuti trend.
Hitung 200 kitaran dan 30 kitaran EMA, 200 EMA lebih besar daripada 30 EMA dinilai sebagai trend garis panjang ke atas, jika tidak, dinilai sebagai trend garis panjang ke bawah.
Selepas menentukan arah trend, kiraan baseline, uptrend, dan downtrend untuk Brinband. Baseline menggunakan kitaran konfigurasi (seperti kitaran 8) dan bandwidth menggunakan kitaran konfigurasi yang sangat berbeza (seperti 1.3 dan 1.1) dalam kitaran yang sama.
Pada garis panjang ke atas, apabila harga dari bawah ke atas menembusi bawah, dinilai sebagai titik beli; pada garis panjang ke bawah, apabila harga dari atas ke bawah menembusi atas, dinilai sebagai titik jual.
Untuk menyaring penembusan palsu, semak sama ada kadar perubahan garis K terdahulu kurang daripada nilai yang boleh dikonfigurasi (contohnya 3%) semasa penembusan berlaku, dan semak sama ada jarak antara jalur atas dan bawah Brin lebih besar daripada jarak yang boleh dikonfigurasi (contohnya 2.2%) [2].
Tetapkan stop loss yang boleh dikonfigurasi (seperti 3%) dan stop loss (seperti 10%) untuk mengunci keuntungan.
Dua EMA menilai trend utama, mengelakkan membuka kedudukan yang tidak teratur apabila trend utama tidak diketahui.
Tetapkan titik bukaan Brin yang beradaptasi dan sesuaikan parameter lebar jalur secara automatik mengikut trend untuk mengunci trend lebih jauh.
Kadar perubahan dan mekanisme pemeriksaan bandwidth minimum yang berkesan menyaring penembusan palsu.
Pengaturan stop loss adalah munasabah, dan risiko penguncian keuntungan boleh dikawal.
Dua EMA tidak dapat menentukan titik perubahan dengan tepat, dan mungkin terlepas peluang untuk mengubah trend.
Seting parameter Brinband yang tidak betul boleh menyebabkan isyarat palsu.
Penangguhan kerugian tetap sukar untuk menyesuaikan diri dengan turun naik pasaran.
Berkongsi dengan penunjuk lain untuk menilai trend, menentukan titik peralihan trend utama.
Menggunakan kaedah penyesuaian parameter Brin secara dinamik.
Tetapkan syarat single stop stop loss, sesuaikan garis stop loss mengikut keadaan tertentu.
Strategi ini menggunakan kaedah pengesanan trend utama EMA dan peluang penemuan burin untuk mewujudkan perdagangan trend. Kelebihan strategi adalah menetapkan syarat pembukaan dan hentian yang munasabah, yang dapat mengunci keuntungan trend dengan berkesan.
/*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