This strategy identifies price channels using Bollinger Bands and determines support/resistance levels based on Fibonacci retracement ratios for algorithmic trading. It detects Bollinger Bands breakouts, tracks retracement levels, and enters long/short positions around high-probability pullback zones.
Calculating middle, upper and lower bands of Bollinger Bands
Middle band is SMA, upper/lower bands are SMA +/- multiples of ATR
Bollinger Bands expand and contract based on market volatility
Calculating Fibonacci retracement levels based on ratios
Retracement ratios are multiples of ATR * Fibonacci ratios
Multiple Fib levels are calculated based on middle band
Monitoring price breaking out of Bollinger Bands
Consider going long when price breaks above upper band
Consider going short when price breaks below lower band
Entering trades and setting SL/TP around Fib retracement zones
Enter trades when price pulls back to Fib zone
Set stop loss and take profit on the other side of the zone
Bollinger Bands clearly identify market volatility range and trends
Fibonacci ratios grasp key support and resistance levels
Combining indicators allows algorithmic trading
Pullback entries increase probability of success and avoid chasing
Adjustable parameters adapt to different periods and products
Bollinger Bands breakouts may be false signals
Difficult to predict precisely when price will retrace to Fib levels
Improper stop loss placement could increase losses
Insufficient or excessive pullback magnitude affects strategy
Ineffective parameters or persistent trending markets could invalidate strategy
Enhancing Bollinger Bands logic, considering volume, dynamic zone adjustment, etc.
Optimize Bollinger Bands parameters for better trend and S/R judgment
Add volume indicators to validate breakout signals
Utilize machine learning for pullback probability prediction
Incorporate more technical indicators for signal validation
Select reasonable parameters based on product characteristics and trading sessions
Timely adjust pullback zone strength for changing volatility
This strategy combines the strengths of Bollinger Bands and Fibonacci retracements to identify trends and enter at high-probability pullback levels. Risks can be reduced and results improved by parameter optimization, additional signal validation, dynamic zone adjustment, etc. There is room for expansion by incorporating volume, machine learning models, etc. The strategy can be further refined through continuous optimization.
/*backtest
start: 2023-08-27 00:00:00
end: 2023-09-26 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(shorttitle="BBands Fibo", title="Bollinger Bands Fibonacci Ratios", overlay=true)
length = input(20, minval=1, type=input.integer, title="Length")
src = input(close, title="Source")
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
fibo1 = input(defval=1.618, title="Fibonacci Ratio 1")
fibo2 = input(defval=2.618, title="Fibonacci Ratio 2")
fibo3 = input(defval=4.236, title="Fibonacci Ratio 3")
fiboBuyReverse = input(false, title = "Use Reverse Buy?")
fiboBuy = input(options = ["Fibo 1", "Fibo 2", "Fibo 3"],defval = "Fibo 1", title="Fibonacci Buy")
fiboSellReverse = input(false, title = "Use Reverse Sell?")
fiboSell = input(options = ["Fibo 1", "Fibo 2", "Fibo 3"],defval = "Fibo 1", title="Fibonacci Sell")
sma = sma(src, length)
atr = atr(length)
ratio1 = atr * fibo1
ratio2 = atr * fibo2
ratio3 = atr * fibo3
upper3 = sma + ratio3
upper2 = sma + ratio2
upper1 = sma + ratio1
lower1 = sma - ratio1
lower2 = sma - ratio2
lower3 = sma - ratio3
plot(sma, style=0, title="Basis", color=color.orange, linewidth=2, offset = offset)
upp3 = plot(upper3, transp=90, title="Upper 3", color=color.teal, offset = offset)
upp2 = plot(upper2, transp=60, title="Upper 2", color=color.teal, offset = offset)
upp1 = plot(upper1, transp=30, title="Upper 1", color=color.teal, offset = offset)
low1 = plot(lower1, transp=30, title="Lower 1", color=color.teal, offset = offset)
low2 = plot(lower2, transp=60, title="Lower 2", color=color.teal, offset = offset)
low3 = plot(lower3, transp=90, title="Lower 3", color=color.teal, offset = offset)
fill(upp3, low3, title = "Background", color=color.new(color.teal, 95))
targetBuy = fiboBuy == "Fibo 1" ? upper1 : fiboBuy == "Fibo 2" ? upper2 : upper3
targetBuy := fiboBuyReverse == false ? targetBuy : fiboBuy == "Fibo 1" ? lower1 : fiboBuy == "Fibo 2" ? lower2 : lower3
buy = low < targetBuy and high > targetBuy
targetSell = fiboSell == "Fibo 1" ? lower1 : fiboSell == "Fibo 2" ? lower2 : lower3
targetSell := fiboSellReverse == false ? targetSell : fiboSell == "Fibo 1" ? upper1 : fiboSell == "Fibo 2" ? upper2 : upper3
sell = low < targetSell and high > targetSell
strategy.entry("Buy", true, when = buy)
strategy.entry("Sell", false, when = sell)