Strategi ini menggunakan Bollinger Bands dan Moving Average untuk pergi LONG atau SHORT ketika harga mendekati band atas atau bawah. Strategi ini menggabungkan keuntungan dari kedua strategi trend berikut dan rata-rata reversi, dan berkinerja baik selama pasar yang terikat kisaran.
Strategi ini mengidentifikasi dua sinyal masuk:
Sinyal panjang: ketika harga penutupan mencapai band bawah sementara di atas garis EMA, lilin sebelumnya bearish dan lilin saat ini bullish.
Sinyal pendek: ketika harga penutupan mencapai band atas sementara di bawah garis EMA, lilin sebelumnya bullish dan lilin saat ini bearish.
Stop loss menggunakan stop loss tetap. Stop loss level ditetapkan pada harga masuk ditambah/dikurangi rasio risiko/imbalan kali jarak antara harga masuk dan level take profit.
Take profit menggunakan take profit dinamis. take profit panjang ditetapkan pada band bawah. take profit pendek ditetapkan pada band atas.
Menggabungkan kekuatan dari kedua strategi trend berikut dan rata-rata pembalikan, berkinerja baik selama pasar kisaran.
Menggunakan Bollinger Bands untuk mengidentifikasi tingkat overbought dan oversold, meningkatkan keakuratan sinyal pembalikan.
Stop loss tetap memfasilitasi manajemen risiko.
Mengambil keuntungan secara dinamis memungkinkan untuk memaksimalkan keuntungan.
Strategi breakout mudah untuk menghentikan lari. perlu berhati-hati dari breakout palsu.
Stop loss sering diaktifkan ketika pasar terlalu bergolak.
Stop loss tetap tidak dapat beradaptasi dengan volatilitas pasar.
Penyesuaian parameter Bollinger Bands yang buruk dapat menyebabkan hasil yang tidak baik.
Menggabungkan indikator RSI untuk menyaring sinyal masuk. Misalnya, hanya pergi panjang jika RSI di atas 50, dan hanya pergi pendek jika RSI di bawah 50. Ini menghindari sinyal buruk.
Mengimplementasikan stop loss adaptif yang menyesuaikan jarak stop berdasarkan volatilitas. misalnya menggunakan ATR untuk mengatur stop loss dinamis.
Mengoptimalkan parameter Bollinger Bands untuk menemukan kombinasi parameter terbaik.
Uji periode EMA yang berbeda untuk meningkatkan efek support/resistance EMA.
Strategi ini menggabungkan tren dan pembalikan, memasuki tingkat overbought / oversold yang diidentifikasi oleh Bollinger Bands. Ini memaksimalkan keuntungan melalui mengambil keuntungan yang dinamis. Berkinerja baik selama pasar yang terikat rentang. Berhati-hati dengan stop run. Perbaiki parameter untuk mengoptimalkan kinerja. Secara keseluruhan strategi yang praktis dan efektif.
/*backtest start: 2023-10-24 00:00:00 end: 2023-10-31 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Welcome to yet another script. This script was a lot easier since I was stuck for so long on the Donchian Channels one and learned so much from that one that I could use in this one // This code should be a lot cleaner compared to the Donchian Channels, but we'll leave that up to the pro's // This strategy has two entry signals, long = when price hits lower band, while above EMA, previous candle was bearish and current candle is bullish // Short = when price hits upper band, while below EMA, previous candle was bullish and current candle is bearish // Take profits are the opposite side's band(lower band for long signals, upper band for short signals). This means our take profit price will change per bar // Our stop loss doesn't change, it's the difference between entry price and the take profit target divided by the input risk reward // At the time of writing this, I could probably calculate that much easier by simply multiplying the opposite band by the input risk reward ratio // Since I want to get this script out and working on the next one, I won't clean that up, I'm sorry // strategy(shorttitle="BB Trending Reverse Strategy", title="Bollinger Bands Trending Reverse Strategy", overlay=true, default_qty_type = strategy.cash, default_qty_value = 150, initial_capital = 1000, currency = currency.USD, commission_type = "percent", commission_value = 0.036) // The built-in Bollinger Band indicator inputs and variables, added some inputs of my own and organised the code length = input(20, minval=1) src = input(close, title="Source") mult = input(2.0, minval=0.001, maxval=50, title="StdDev") emaInput = input(title = "EMA Input", type = input.integer, defval = 200, minval = 10, maxval = 400, step = 1) riskreward = input(title = "Risk/Reward Ratio", type = input.float, defval = 1.50, minval = 0.01, maxval = 100, step = 0.01) offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev ema = ema(close, emaInput) // These are our conditions as explained above entryLong = low[1] <= lower[1] and low <= lower and low > ema entryShort = high[1] >= upper[1] and high >= upper and high < ema reversecandleLong = close > open and close[1] < open[1] reversecandleShort = close < open and close[1] > open[1] var stopLong = 0.0 var stopShort = 0.0 // These are our entry signals, notice how the stop condition is within the if statement while the strategy.exit is outside of the if statement, this way the take profit targets trails up or down depending on what the price does if reversecandleLong and entryLong and strategy.position_size == 0 stopLong := (((close / upper - 1) * riskreward + 1) * close) strategy.entry("Long Entry", strategy.long, comment = "Long Entry") strategy.exit("Exit Long", "Long Entry", limit = upper, stop = stopLong, comment = "Exit Long") if reversecandleShort and entryShort and strategy.position_size == 0 stopShort := (((close / lower - 1) / riskreward + 1) * close) strategy.entry("Short Entry", strategy.short, comment = "Short Entry") strategy.exit("Exit Short", "Short Entry", limit = lower, stop = stopShort, comment = "Exit Short") // The built-in Bollinger Band plots plot(basis, "Basis", color=#872323, offset = offset) p1 = plot(upper, "Upper", color=color.teal, offset = offset) p2 = plot(lower, "Lower", color=color.teal, offset = offset) fill(p1, p2, title = "Background", color=#198787, transp=95) plot(ema, color=color.red) // These plots are to check the stoplosses, they can make a mess of your chart so only use these if you want to make sure these work // plot(stopLong) // plot(stopShort)