Trading Strategy of Short Selling When Bollinger Band Crosses Below Price with RSI Callback

Author: ChaoZhang, Date: 2023-12-26 12:08:44



This strategy utilizes Bollinger Bands to determine if price has entered the overbought area and combines RSI indicator to identify callback opportunities. It goes short when a death cross is formed in the overbought area and stops out when price rises back above the Bollinger Upper Band.

Trading Principles

The strategy is based on the following principles:

  1. When close price crosses above Bollinger Upper Band, it indicates the asset has entered overbought territory and a callback is likely
  2. RSI indicator effectively determines overbought/oversold levels. RSI > 70 is considered overbought
  3. Go short when close price crosses below Upper Band
  4. Close position when RSI pulls back from overbought zone or stop loss is triggered

Advantage Analysis

Advantages of this strategy:

  1. Bollinger Bands determine overbought/oversold levels accurately, improving trade success rate
  2. RSI filters out false breakout signals, avoiding unnecessary losses
  3. High risk to reward ratio obtained by effectively controlling risk

Risk Analysis

Risks in this strategy:

  1. Price may continue going up after breaking above Upper Band, leading to further losses
  2. Failure of timely RSI pullback results in loss amplification
  3. Unidirectional short position leaves no room for trading in consolidation

Risks can be minimized by:

  1. Adjusting stop loss properly for timely stop out
  2. Adding indicators to confirm RSI callback
  3. Using moving averages to determine consolidation

Optimization Directions

This strategy can be improved on:

  1. Optimizing Bollinger parameters for more assets
  2. Fine tuning RSI parameters for better signals
  3. Adding more indicators to pinpoint trend reversal points
  4. Incorporating long trade logic
  5. Implement dynamic stop loss based on volatility


In summary, this is a typical overbought quick short scalping strategy. It capitalizes on Bollinger Bands for trade entries and RSI to filter signals. Risk is managed through prudent stop loss placement. Further enhancements can come from parameter tuning, adding indicators, expanding trade logic etc.

start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
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
// © Coinrule

strategy("Bollinger Band Below Price with RSI",

showDate = input(defval=true, title='Show Date Range')
timePeriod = time >= timestamp(syminfo.timezone, 2022, 1, 1, 0, 0)
notInTrade = strategy.position_size <= 0

//Bollinger Bands Indicator
length =, minval=1)
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset =, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

// RSI inputs and calculations
lengthRSI = 14
RSI = ta.rsi(close, lengthRSI)

// Configure trail stop level with input options
longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01
shortTrailPerc = input.float(title='Trail Short Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01

// Determine trail stop loss prices
//longStopPrice = 0.0
shortStopPrice = 0.0

//longStopPrice := if strategy.position_size > 0
    //stopValue = close * (1 - longTrailPerc)
    //math.max(stopValue, longStopPrice[1])

shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + shortTrailPerc)
    math.min(stopValue, shortStopPrice[1])

//Entry and Exit
strategy.entry(id="short", direction=strategy.short, when=ta.crossover(close, upper) and RSI < 70 and timePeriod and notInTrade)

if (ta.crossover(upper, close) and RSI > 70 and timePeriod)
    strategy.exit(id='close', limit = shortStopPrice)