Strategi ini menggunakan Bollinger Bands dan Moving Average untuk pergi LONG atau SHORT apabila harga mendekati band atas atau bawah. Ia pergi pendek apabila harga pecah di atas band atas dan pergi panjang apabila harga pecah di bawah band bawah. Strategi ini menggabungkan kelebihan kedua-dua trend berikut dan strategi pembalikan purata, dan berprestasi baik semasa pasaran yang terikat julat.
Strategi itu mengenal pasti dua isyarat kemasukan:
Isyarat panjang: apabila harga penutupan mencecah jalur bawah sementara di atas garis EMA, lilin sebelum ini menurun dan lilin semasa naik.
Isyarat pendek: apabila harga penutupan mencapai jalur atas sementara di bawah garis EMA, lilin sebelumnya adalah bullish dan lilin semasa adalah bearish.
Stop loss menggunakan stop loss tetap. Tahap stop loss ditetapkan pada harga kemasukan ditambah / tolak nisbah risiko / ganjaran kali jarak antara harga kemasukan dan mengambil tahap keuntungan.
mengambil keuntungan menggunakan mengambil keuntungan dinamik. mengambil keuntungan panjang ditetapkan di band bawah. mengambil keuntungan pendek ditetapkan di band atas.
Menggabungkan kekuatan kedua-dua strategi trend berikut dan strategi pembalikan purata, berprestasi baik semasa pasaran terhad julat.
Menggunakan Bollinger Bands untuk mengenal pasti tahap overbought dan oversold, meningkatkan ketepatan isyarat pembalikan.
Stop loss tetap memudahkan pengurusan risiko.
Mengambil keuntungan yang dinamik membolehkan pemaksiman keuntungan.
Strategi pelarian mudah terhalang, perlu berhati-hati dengan pelarian palsu.
Stop loss yang kerap diaktifkan apabila pasaran terlalu bergolak.
Stop loss tetap tidak dapat menyesuaikan diri dengan turun naik pasaran.
Penyesuaian parameter Bollinger Band yang buruk boleh membawa kepada hasil yang biasa-biasa saja.
Masukkan penunjuk RSI untuk menapis isyarat kemasukan. Sebagai contoh, hanya pergi panjang jika RSI melebihi 50, dan hanya pergi pendek jika RSI di bawah 50. Ini mengelakkan isyarat buruk.
Melaksanakan kehilangan berhenti adaptif yang menyesuaikan jarak berhenti berdasarkan turun naik. contohnya menggunakan ATR untuk menetapkan kehilangan berhenti dinamik.
Mengoptimumkan parameter Bollinger Bands untuk mencari kombinasi parameter terbaik.
Uji tempoh EMA yang berbeza untuk meningkatkan kesan sokongan/tahan EMA.
Strategi ini menggabungkan trend dan pembalikan, memasuki tahap overbought / oversold yang dikenal pasti oleh Bollinger Bands. Ia memaksimumkan keuntungan melalui mengambil keuntungan dinamik. Berprestasi baik semasa pasaran terhad. Berhati-hati dengan berhenti berjalan. Parameter penyempurnaan halus untuk mengoptimumkan prestasi. Secara keseluruhan strategi yang praktikal dan berkesan.
/*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)