Strategi ini menggunakan CBMA sebagai penunjuk teknikal utama yang digabungkan dengan Bollinger Bands untuk mengenal pasti trend pasaran dan melaksanakan strategi pemecah.
Mengira CBMA: Gunakan EMA adaptif untuk meluruskan CBMA yang boleh mengesan perubahan harga dengan berkesan.
Tetapkan parameter Bollinger Bands: Gunakan CBMA sebagai band tengah, dan tetapkan band atas/bawah menggunakan pengganda penyimpangan standard, yang boleh diselaraskan berdasarkan pasaran.
Perdagangan pecah: Jual apabila harga pecah di atas jalur atas, beli apabila harga pecah di bawah jalur bawah, menggunakan trend mengikuti strategi pemecah.
Gunakan pembatalan pesanan kilat, hanya berdagang satu arah pada satu masa.
Tetapkan saiz pesanan tetap, boleh diselaraskan berdasarkan modal.
CBMA mempunyai kelancaran yang baik dan boleh mengesan harga dengan berkesan.
EMA adaptif mengoptimumkan tindak balas purata bergerak.
Band atas/bawah memberikan isyarat arah yang jelas apabila pecah berlaku.
Model mengikut trend mengelakkan perdagangan whipsaw.
Saiz pesanan tetap mengawal risiko perdagangan tunggal.
Parameter Bollinger Bands perlu dioptimumkan, terlalu lebar atau terlalu sempit boleh menyebabkan masalah.
Sinyal terputus mungkin mempunyai terputus palsu.
Perlu stop loss untuk mengawal kerugian.
Saiz pesanan tetap tidak boleh menyesuaikan kedudukan berdasarkan pasaran.
Hanya berdagang satu arah, tidak boleh mendapat keuntungan lebih.
Mengoptimumkan parameter Bollinger Bands secara dinamik untuk menyesuaikan pasaran dengan lebih baik.
Tambah lebih banyak penunjuk untuk penapisan, mengelakkan pecah palsu.
Tambah stop loss untuk mengunci keuntungan.
Perdagangan lindung nilai, pergi kedua-dua panjang dan pendek untuk keuntungan yang lebih besar.
Tambah sistem pengukuran kedudukan.
Strategi ini adalah sistem trend breaker yang menggunakan teknologi purata bergerak adaptif yang digabungkan dengan Bollinger Bands untuk isyarat breakout yang jelas. Ia mempunyai logika yang mudah dan kawalan saiz pesanan tetap risiko, mempunyai beberapa nilai praktikal. Tetapi isu-isu seperti breakout palsu dan pengoptimuman parameter kekal, yang memerlukan lebih banyak penunjuk untuk meningkatkan dan meningkatkan prestasi perdagangan sebenar sambil mengawal risiko. Secara keseluruhan ia adalah sistem breakout permulaan yang baik dengan banyak ruang untuk peningkatan.
/*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")