Strategi ini menentukan arah tren pasar secara umum dengan menghitung dua rata-rata bergerak eksponensial (EMA) selama kerangka waktu yang berbeda, dan mengidentifikasi peluang overbought dan oversold di sepanjang arah tren menggunakan Bollinger Bands adaptif untuk menerapkan perdagangan tren.
EMA 200 periode dan EMA 30 periode dihitung. Jika EMA 200 lebih besar dari EMA 30, tren jangka panjang ditentukan sebagai naik. Jika tidak, ditentukan sebagai turun.
Setelah arah tren ditentukan, garis dasar, band atas dan band bawah Bollinger Bands dihitung. garis dasar mengadopsi SMA selama kerangka waktu yang dapat dikonfigurasi (misalnya 8 periode). lebar band adalah pengganda yang dapat dikonfigurasi (misalnya 1.3 dan 1.1) dari amplitudo harga tertinggi dan terendah selama periode yang sama dengan garis dasar.
Ketika tren jangka panjang naik, pecahnya pita bawah menandakan masuk panjang; ketika tren jangka panjang turun, pecahnya pita atas menandakan masuk pendek.
Untuk menyaring pecah palsu, laju perubahan pada lilin terakhir sebelum pecah diperiksa untuk berada di bawah ambang yang dapat dikonfigurasi (misalnya 3%), dan lebar pita diperiksa untuk lebih besar dari tingkat yang dapat dikonfigurasi (misalnya 2,2% dari harga penutupan).
Setelah membuka posisi, stop loss yang dapat dikonfigurasi (misalnya -3%) dan take profit (misalnya 10%) diatur untuk mengunci keuntungan.
EMA ganda mendefinisikan tren utama dan menghindari pembukaan posisi yang tidak teratur ketika tren utama tidak jelas.
Adaptive Bollinger Bands menetapkan titik masuk di sepanjang tren.
Tingkat perubahan dan persyaratan lebar minimum secara efektif menyaring kebocoran palsu.
Pengaturan stop loss dan take profit secara wajar mengunci keuntungan sambil mengendalikan risiko.
EMA ganda gagal untuk secara akurat menemukan titik pembalikan tren, kehilangan kesempatan pada titik perubahan tren.
Pengaturan parameter BB yang tidak benar dapat menyebabkan sinyal palsu.
Stop loss dan take profit tetap tidak dapat beradaptasi dengan fluktuasi pasar.
Masukkan indikator lain untuk menentukan pembalikan tren utama dan sekunder.
Mengadopsi pengaturan dinamis dari parameter BB.
Menetapkan perintah kondisional untuk stop loss dan mengambil keuntungan berdasarkan kriteria tertentu.
Strategi ini mengimplementasikan perdagangan tren dengan menilai tren utama menggunakan EMA ganda dan mengidentifikasi peluang dengan Bollinger Bands. Kekuatannya terletak pada pengaturan masuk yang wajar, menghentikan kerugian dan mengambil kondisi keuntungan untuk mengunci keuntungan tren. Ada juga beberapa risiko, seperti gagal menangkap titik balik tren dan pengaturan parameter BB yang tidak tepat. Optimasi lebih lanjut dalam aspek ini akan memberdayakan strategi untuk merebut keuntungan tren 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