Ini adalah strategi dagangan yang menggunakan Bollinger Bands. Strategi ini bertujuan untuk mengenal pasti peluang apabila harga turun naik secara ganas menggunakan Bollinger Bands dan membuat keputusan membeli atau menjual yang sesuai.
Strategi ini mengira band atas, band tengah dan band bawah Bollinger Bands untuk menentukan sama ada harga semasa berada dalam julat turun naik dan dengan itu membuat keputusan mengenai pembukaan atau penutupan kedudukan. Apabila harga mendekati band atas, ia dianggap sebagai titik melampau untuk panjang dan strategi memilih untuk menutup kedudukan panjang. Apabila harga jatuh berhampiran band bawah, ia dianggap sebagai titik melampau untuk pendek dan strategi memilih untuk membuka kedudukan panjang.
Selain itu, strategi ini juga memperkenalkan faktor pembalikan trend. Jika terdapat isyarat pembalikan, ia juga akan mencetuskan keputusan beli atau jual yang sesuai. Secara khusus, logik strategi adalah seperti berikut:
Yang di atas adalah logik perdagangan asas strategi ini. Dengan menggunakan ciri-ciri Bollinger Bands dan menggabungkan faktor trend dan pembalikan, strategi ini cuba menangkap titik pembalikan apabila turun naik meningkat.
Berbanding dengan strategi purata bergerak biasa, strategi ini mempunyai kelebihan berikut:
Secara amnya, strategi ini menggabungkan Bollinger Bands dan bar harga yang agak baik. Ia berdagang pada titik pembalikan yang munasabah untuk memastikan tahap keuntungan tertentu sambil mengawal risiko.
Walau bagaimanapun, masih ada beberapa risiko dengan strategi ini:
Oleh itu, pengoptimuman masa depan boleh memberi tumpuan kepada:
Kesimpulannya, ini adalah templat strategi perdagangan Bollinger Bands yang tipikal. Ia mengelakkan dagangan yang tidak berkesan yang berlebihan yang biasa digunakan untuk menggunakan Bollinger Bands sahaja dengan memperkenalkan penilaian pembalikan trend untuk menapis isyarat, yang secara teori boleh membawa kepada prestasi strategi yang baik. Tetapi parameter dan penapisan isyarat masih memerlukan pengoptimuman dan penambahbaikan lanjut untuk ketahanan dan untuk mengurangkan pertimbangan yang salah.
/*backtest start: 2023-12-18 00:00:00 end: 2024-01-17 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy("Noro's Bollinger Strategy v1.2", shorttitle = "Bollinger str 1.2", overlay = true ) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length") mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult") source = input(ohlc4, defval = ohlc4, title = "Bollinger Source") uset = input(true, defval = true, title = "Use trend entry") usect = input(true, defval = true, title = "Use counter-trend entry") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") showbands = input(true, defval = true, title = "Show Bollinger Bands") //Bollinger Bands basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev //Lines col = showbands ? black : na plot(upper, linewidth = 1, color = col) plot(basis, linewidth = 1, color = col) plot(lower, linewidth = 1, color = col) //Body body = abs(close - open) abody = ema(body, 30) //Signals bar = close > open ? 1 : close < open ? -1 : 0 up1 = bar == -1 and close >= basis and close < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset dn1 = bar == 1 and close <= basis and close > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset up2 = close <= lower and usect dn2 = close >= upper and usect exit = (strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open) and body > abody / 2 //Trading if up1 or up2 strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn1 or dn2 strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if exit strategy.close_all()