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.
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.
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.
Apabila trend jangka panjang naik, pecah band bawah menandakan masuk panjang; apabila trend jangka panjang turun, pecahan band atas menandakan masuk pendek.
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).
Selepas membuka kedudukan, stop loss yang boleh dikonfigurasikan (contohnya -3%) dan mengambil keuntungan (contohnya 10%) ditetapkan untuk mengunci keuntungan.
EMA berganda menentukan trend utama dan mengelakkan pembukaan kedudukan yang tidak teratur apabila trend utama tidak jelas.
Band Bollinger adaptif menetapkan titik masuk di sepanjang trend.
Kadar perubahan dan keperluan lebar minimum berkesan menapis pecah palsu.
Tetapan stop loss dan mengambil keuntungan dengan munasabah mengunci keuntungan sambil mengekalkan risiko di bawah kawalan.
EMA berganda gagal untuk mencari dengan tepat titik pembalikan trend, kehilangan peluang pada titik perubahan trend.
Tetapan parameter BB yang tidak betul boleh menyebabkan isyarat palsu.
Stop loss tetap dan mengambil keuntungan tidak dapat menyesuaikan diri dengan turun naik pasaran.
Menggabungkan penunjuk lain untuk menentukan pembalikan trend utama dan sekunder.
Mengambil penyesuaian dinamik parameter BB.
Tetapkan perintah bersyarat untuk berhenti kerugian dan mengambil keuntungan berdasarkan kriteria tertentu.
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