Strategi ini menggunakan CBMA sebagai indikator teknis utama dikombinasikan dengan Bollinger Bands untuk mengidentifikasi tren pasar dan menerapkan strategi breaker.
Menghitung CBMA: Gunakan EMA adaptif untuk meratakan CBMA yang dapat melacak perubahan harga secara efektif.
Atur parameter Bollinger Bands: Gunakan CBMA sebagai band tengah, dan atur band atas/bawah menggunakan pengganda standar deviasi, yang dapat disesuaikan berdasarkan pasar.
Perdagangan Breakout: Jual saat harga menembus band atas, beli saat harga menembus band bawah, menggunakan strategi trend following breaker.
Gunakan pembatalan pesanan flash, hanya perdagangan satu arah pada suatu waktu.
Tetapkan ukuran pesanan tetap, dapat disesuaikan berdasarkan modal.
CBMA memiliki kelancaran yang baik dan dapat melacak harga secara efektif.
Adaptive EMA mengoptimalkan respons rata-rata bergerak.
Band atas/bawah memberikan sinyal arah yang jelas ketika terjadi pecah.
Model mengikuti tren menghindari perdagangan whipsaw.
Ukuran pesanan tetap mengendalikan risiko perdagangan tunggal.
Parameter Bollinger Bands perlu dioptimalkan, terlalu lebar atau terlalu sempit dapat menyebabkan masalah.
Sinyal breakout mungkin memiliki breakout palsu.
Butuh stop loss untuk mengendalikan kerugian.
Ukuran pesanan tetap tidak dapat menyesuaikan posisi berdasarkan pasar.
Hanya perdagangan satu arah, tidak bisa keuntungan lebih.
Dinamis mengoptimalkan Bollinger Bands parameter untuk menyesuaikan pasar lebih baik.
Tambahkan lebih banyak indikator untuk penyaringan, menghindari kebocoran palsu.
Tambahkan stop loss untuk mengunci keuntungan.
Perdagangan lindung nilai, pergi baik panjang dan pendek untuk keuntungan yang lebih besar.
Tambahkan sistem ukuran posisi.
Strategi ini adalah sistem trend breaker yang menggunakan teknologi rata-rata bergerak adaptif dikombinasikan dengan Bollinger Bands untuk sinyal breakout yang jelas. Ini memiliki logika sederhana dan ukuran pesanan tetap mengendalikan risiko, memiliki beberapa nilai praktis. Tetapi masalah seperti breakout palsu dan optimasi parameter tetap ada, yang membutuhkan lebih banyak indikator untuk meningkatkan dan meningkatkan kinerja perdagangan nyata sambil mengendalikan risiko. Secara keseluruhan ini adalah sistem breakout starter yang layak dengan banyak ruang untuk perbaikan.
/*backtest start: 2023-10-29 00:00:00 end: 2023-11-05 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="CBMA Bollinger Bands Strategy directed [ChuckBanger]", shorttitle="CBMA BB CB", overlay=true ) length = input(title="Length", type=input.integer, defval=12, minval=1) regular = input(title="Regular BB Or CBMA?", type=input.bool, defval=false) src = input(title="Source", type=input.source, defval=close) mult = input(title="Multipler", type=input.float, defval=2.3, minval=.001, maxval=50, step=.1) emaLen = input(title="EMA Length", type=input.integer, defval=11, minval=1) emaGL = input(title="EMA Gain Limit", type=input.integer, defval=50, minval=1) highlight = input(title="Highlight On/Off", type=input.bool, defval=true) direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1) strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long)) //strategy.risk.max_drawdown(50, strategy.percent_of_equity) calc_hma(src, length) => hullma = wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length))) hullma calc_cbma(price, length, emaLength, emaGainLimit) => alpha = 2 / (emaLength + 1) ema = ema(price, emaLength) int leastError = 1000000 float ec = 0 float bestGain = 0 for i = emaGainLimit to emaGainLimit gain = i / 10 ec := alpha * ( ema + gain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1]) error = price - ec if (abs(error) < leastError) leastError = abs(error) bestGain = gain ec := alpha * ( ema + bestGain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1]) hull = calc_hma(price, length) cbma = (ec + hull) / 2 cbma cbma = calc_cbma(src, length, emaLen, emaGL) basis = regular ? sma(src, length) : cbma dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev cbmaColor = fixnan(highlight and not regular ? cbma > high ? color.purple : cbma < low ? color.aqua : na : color.red) plot(basis, color=cbmaColor) p1 = plot(upper, color=color.blue) p2 = plot(lower, color=color.blue) fill(p1, p2) if (crossover(src, lower)) strategy.entry("CBMA_BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="CBMA_BBandLE") else strategy.cancel(id="CBMA_BBandLE") if (crossunder(src, upper)) strategy.entry("CBMA_BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="CBMA_BBandSE") else strategy.cancel(id="CBMA_BBandSE")