Strategi ini menggabungkan metrik trend-mengikut VFI dan Moving Averages dengan penunjuk pembalikan Bollinger Bands untuk menangkap trend dan pembalikan dalam pasaran secara adaptif.
Komponen utama strategi ini ialah:
Penunjuk perbezaan EMA untuk menentukan trend. Ia mengira perbezaan peratusan antara EMA 20 hari dan EMA 50 hari untuk menilai arah trend jangka menengah dan panjang.
Bollinger Band untuk mengesan pembalikan. Band tengah adalah SMA 20 hari, dan lebar band adalah 1.5 penyimpangan standard dari band tengah. Isyarat perdagangan dihasilkan apabila harga memecahkan band atas atau bawah.
Amplitud VFI untuk mengesan keletihan. Apabila VFI mendekati hadnya (0, 20), kebarangkalian pembalikan trend dianggap lebih tinggi.
Apabila harga pecah di atas Bollinger Band atas dan perbezaan VFI dan EMA menunjukkan trend menaik, pergi panjang. Apabila harga pecah di bawah band bawah atau VFI mencapai ambang, tutup kedudukan.
Pengenalan VFI menjadikan hubungan harga-volume lebih munasabah dan mengelakkan mengikuti harga secara buta.
Gabungan perbezaan EMA dan VFI menjadikan penentuan trend lebih dipercayai.
Gabungan Bollinger Bands dan VFI menjadikan strategi lebih mudah disesuaikan dengan turun naik dua hala di pasaran.
Penunjuk harga jumlah tidak dapat sepenuhnya mengelakkan risiko pecah palsu.
Parameter Bollinger Bands yang tidak betul boleh membawa kepada perdagangan berlebihan atau menangkap pasaran.
Penyelesaian:
Gabungkan lebih banyak penunjuk untuk menentukan trend untuk mengelakkan bergantung pada satu sahaja.
Sesuaikan parameter EMA kepada nilai yang betul.
Uji kesan parameter Bollinger pada strategi dalam keadaan pasaran yang berbeza.
Teruskan mengoptimumkan parameter VFI untuk menjadikannya lebih sensitif.
Tambah pertimbangan pecah berdasarkan saluran harga atau Envelope penunjuk.
Uji pengenalan lebih banyak penunjuk harga jumlah seperti OBV, PVT dll.
Memperkenalkan teknik pembelajaran mesin dan AI untuk merealisasikan pengoptimuman parameter dinamik.
Strategi ini secara komprehensif mempertimbangkan trend berikut dan pengesanan pembalikan dengan VFI, perbezaan EMA dan Bollinger Bands untuk menangkap turun naik pasaran dua hala. Langkah seterusnya adalah untuk terus mengoptimumkan parameter, memperkaya metrik penilaian, memperluaskan penerapan, dan meningkatkan keuntungan.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-24 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © beststockalert //@version=4 strategy(title="Super Bollinger Band Breakout", shorttitle = "Super BB-BO", overlay=true) source = close length = input(130, title="VFI length") coef = input(0.2) vcoef = input(2.5, title="Max. vol. cutoff") signalLength=input(5) // session pre = input( type=input.session, defval="0400-0935") trade_session = input( type=input.session, defval="0945-1700") use_trade_session = true isinsession = use_trade_session ? not na(time('1', trade_session)) : true is_newbar(sess) => t = time("D", sess) not na(t) and (na(t[1]) or t > t[1]) is_session(sess) => not na(time(timeframe.period, sess)) preNew = is_newbar(pre) preSession = is_session(pre) float preLow = na preLow := preSession ? preNew ? low : min(preLow[1], low) : preLow[1] float preHigh = na preHigh := preSession ? preNew ? high : max(preHigh[1], high) : preHigh[1] // vfi 9lazybear ma(x,y) => 0 ? sma(x,y) : x typical=hlc3 inter = log( typical ) - log( typical[1] ) vinter = stdev(inter, 30 ) cutoff = coef * vinter * close vave = sma( volume, length )[1] vmax = vave * vcoef vc = iff(volume < vmax, volume, vmax) //min( volume, vmax ) mf = typical - typical[1] vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) ) vfi = ma(sum( vcp , length )/vave, 3) vfima=ema( vfi, signalLength ) //ema diff ema20 = ema(close,20) ema50 = ema(close,50) diff = (ema20-ema50)*100/ema20 ediff = ema(diff,20) // basis = sma(source, 20) dev = 1.5 * stdev(source, 20) upper = basis + dev lower = basis - dev ema9 = ema(source, 9) if ( ((crossover(source, upper) and diff>ediff and diff>0) or (close>upper and (vfi >0 or vfima>0 or ediff>0.05) and (vfi<14 or vfima<14)) )) strategy.entry("Long", strategy.long) if (crossunder(source, lower) or vfi>19 or vfima>19 or diff<(ediff+0.01) ) strategy.close("Long")