BBRSI4cust Strategy: The Customizable Bollinger Player
Nickname: Parameter Adjustment Master
Occupation: Adaptive Bottom Fisher
Timeframe: 15 minutes
I. What Is This Strategy?
Simply put, BBRSI4cust is:
- A Bollinger Band strategy with built-in "adjustment knobs"
- Checks trend (+DI) + position (Bollinger lower band) when buying
- Checks mean reversion (Bollinger middle band) when selling
- Parameters can be optimized and adjusted yourself
Like a professional angler who "adjusts gear based on the weather" 🎣
II. Core Configuration: Conservative Short-Term Play
Take Profit Rules (ROI Table)
0 minutes: Run if you make 0.3%
Translation: This ROI setting is too conservative, right? Only 0.3%? It's basically saying "good enough, let the signal tell me when to leave"
Stop Loss Rules
Fixed stop loss: -10% (now this is called a normal stop loss)
Trailing stop: Enabled (but using default values)
Translation:
- Fixed stop loss = "Quit when losing 10%"—much more reasonable than BBRSI3366's -33%
- Trailing stop = "Specific parameters not set, let the system figure it out"
III. Buy Conditions: Trend + Position Double Confirmation
This strategy's buy requires three conditions to be met simultaneously:
Condition #1: +DI Above Threshold
(dataframe['plus_di'] > self.buy_di.value) # Default > 20
Plain English:
"+DI is part of the directional indicator system, showing uptrend strength. Above 20 means there's some upward momentum"
Condition #2: Price Breaks Below Bollinger Lower Band
(qtpylib.crossed_below(dataframe['low'], dataframe['bb_lowerband']))
Plain English:
"Low price crosses below Bollinger lower band—price has been pushed down, might bounce back"
Condition #3: Has Volume
(dataframe['volume'] > 0)
Plain English:
"This candle has volume, it's not empty air"
Combined Translation:
"Has upward trend + price pushed to lower band + people are trading = buying opportunity!"
IV. Sell Logic: Return to Middle Band Then Leave
Signal Sell: High Price Crosses Above Bollinger Middle Band
(qtpylib.crossed_above(dataframe['high'], dataframe['bb_middleband1']))
Plain English:
"High price breaks above Bollinger middle band—bounce is about done, let's go"
Custom Exit: Real-time Price Crosses Middle Band
if (qtpylib.crossed_above(current_rate, current_candle['bb_middleband1'])):
return "bb_profit_sell"
Plain English:
"Current price crosses middle band, triggers bb_profit_sell—lock in profit"
Summary: Both sell methods point to the same signal—when price returns to Bollinger middle band, it's time to leave
V. Adjustable Parameters: The Essence of This Strategy
This strategy's biggest feature is parameters can be optimized:
| Parameter | Adjustable Range | Default | Plain English |
|---|---|---|---|
| buy_bb | 1-4 | 1 | Bollinger Band width (for buying) |
| buy_di | 10-20 | 20 | +DI threshold (buy filter) |
| sell_bb | 1-4 | 1 | Bollinger Band width (for selling) |
Let me translate:
buy_bb (Buy Bollinger Band Width)
- = 1: Standard Bollinger Bands, more signals but potentially more false signals
- = 2: Wider, fewer signals but potentially more accurate
- = 3-4: Very wide, very few signals, only buys in extreme situations
buy_di (Buy Trend Filter)
- = 10: Loose condition, easier to buy
- = 20: Strict condition, needs stronger uptrend to buy
sell_bb (Sell Bollinger Band Width)
- Affects the middle band position for selling
- Can be different from buy_bb, more flexible
Comment: This strategy gives you three knobs to adjust for the best parameters for the current market—but the prerequisite is you need to know how to use hyperopt for parameter optimization 😅
VI. This Strategy's "Personality Traits"
✅ Pros (Praise Section)
- Adjustable Parameters: Not hardcoded like BBRSI3366, can be adjusted for different markets
- Trend Filter: +DI condition avoids randomly buying in pure downtrends
- Reasonable Stop Loss: -10% stop loss, finally normal
- Dual Bollinger Bands: Can use different parameters for buying and selling, more flexible
- Custom Exit: Real-time price monitoring, more precise exits
⚠️ Cons (Complaint Section)
- RSI Calculated But Not Used: Calculated RSI but never used—why waste computing power?
- ROI Too Low: 0.3% target is almost like not setting one
- Parameter Optimization Risk: Hyperopt optimization might "memorize answers"
- Learning Curve: Need to understand Hyperopt to get maximum value
VII. Applicable Scenarios: When to Use It?
| Market Environment | Recommended Parameters | Reason |
|---|---|---|
| Sideways range | buy_bb=2, buy_di=15 | Wider Bollinger Bands, medium trend filter |
| Slow bull market | buy_bb=1, buy_di=20 | Standard Bollinger Bands, strict trend filter |
| High volatility | buy_bb=3-4 | Wider Bollinger Bands, avoid false signals |
| Downtrend | ❌ Not recommended | +DI condition may not be met for extended periods |
VIII. What Market Can This Strategy Make Money In?
8.1 Core Logic: Trend Confirmation + Oversold Bounce
BBRSI4cust's trading philosophy:
- Check trend first: +DI high enough means there's upward momentum
- Check position next: Price pushed down to Bollinger lower band
- Wait for reversion: Return to middle band then leave
Its Money-Making Philosophy: "Oversold bounce with trend confirmation"
8.2 Performance in Different Markets (Plain English Version)
| Market Type | Performance Rating | Plain English Explanation |
|---|---|---|
| 📈 Slow bull range | ⭐⭐⭐⭐☆ | +DI filter effective, bounce signals accurate |
| 🔄 Sideways range | ⭐⭐⭐⭐⭐ | Bollinger Bands up and down, eat both sides |
| 📉 Downtrend | ⭐⭐☆☆☆ | +DI too low, can't buy in |
| ⚡️ High volatility | ⭐⭐⭐☆☆ | Widen Bollinger Band parameters and it still works |
One-Sentence Summary: Ranging market + upward trend = this strategy's comfort zone
IX. Want to Run This Strategy? Check These Configurations First
9.1 Trading Pair Configuration
| Configuration Item | Recommended Value | Comment |
|---|---|---|
| Timeframe | 15m (default) | Medium-term trading, more stable than 5m |
| Number of pairs | 5-20 | Too many to handle |
| ROI target | Suggest raising to 1%-2% | 0.3% is too low |
9.2 Hyperopt Parameter Optimization Recommendations
# Optimize buy parameters
freqtrade hyperopt --hyperopt-loss SharpeHyperOptLoss \
--spaces buy sell --timeframe 15m \
--strategy BBRSI4cust -e 500
Comment: This strategy is designed for parameter tuning, it's a waste not to run hyperopt
9.3 Hardware Requirements
| Number of Trading Pairs | Minimum Memory | Recommended Memory | Experience |
|---|---|---|---|
| 1-10 pairs | 2GB | 4GB | Smooth |
| 10-50 pairs | 4GB | 8GB | No pressure |
| 50+ pairs | 8GB | 16GB | Still easy |
Comment: Same as BBRSI3366, this strategy has low hardware requirements
9.4 Backtest vs Live Trading
Important Notes:
- After parameter optimization, verify if it's overfitted
- Use out-of-sample data for testing
- Rolling window validation for parameter stability
Suggested Process:
- Run hyperopt to optimize parameters first
- Validate with out-of-sample data
- Paper trading test
- Small position live trading
X. Bonus: The Strategy Author's "Little Secrets"
Look carefully at the code, you'll find some interesting things:
-
RSI Calculated But Not Used
dataframe['rsi'] = ta.RSI(dataframe) # Calculated
# And then nothing... completely unused in signals"Since we calculated it, might as well keep it for charting"
-
INTERFACE_VERSION = 3
INTERFACE_VERSION = 3"This is the new Freqtrade strategy interface, quite modern"
-
Dual Bollinger Band Design
bollinger = qtpylib.bollinger_bands(..., stds=self.buy_bb.value) # For buying
bollinger1 = qtpylib.bollinger_bands(..., stds=self.sell_bb.value) # For selling"One set of Bollinger Bands for buying, another for selling—this is asymmetric long/short strategy design"
-
Complete plot_config Configuration
plot_config = {
'main_plot': {...},
'subplots': {
"DI": {...},
"RSI": {...}
}
}"Charting configuration ready, convenient for debugging"
XI. Summary: How's This Strategy Really?
One-Sentence Review
"Adjustable-parameter Bollinger strategy, for players who like to tinker and optimize"
Who Should Use It?
- ✅ Quantitative players who like adjusting parameters
- ✅ People who know how to use Hyperopt
- ✅ Ranging market traders
- ✅ Bottom fishers who want trend filtering
Who Shouldn't Use It?
- ❌ Lazy people (need to adjust parameters)
- ❌ Beginners who don't understand Hyperopt
- ❌ Downtrend markets
- ❌ People who like simple strategies
My Advice
1. First run backtest with default parameters, see the results
2. Learn how to use freqtrade hyperopt to optimize parameters
3. Validate with out-of-sample data, prevent overfitting
4. Periodically re-optimize parameters based on market changes
XII. ⚠️ Risk Re-emphasis (Must Read This Section)
The Trap of Parameter Optimization
BBRSI4cust's optimizable parameters are a double-edged sword:
Over-optimization may lead to "memorizing answers"—perfect performance on historical data, but a mess in live trading.
Simply put: "Historical backtest return 1000%, live trading loss 50%"
Hyperopt Risks
When using Hyperopt optimization, be aware of:
- Overfitting: Parameters too fitted to historical data
- Instability: Parameters perform very differently in different time periods
- Market Changes: Optimized parameters may become invalid quickly
My Advice (Honest Words)
1. Don't blindly pursue maximum backtest returns
2. Use rolling window validation for parameter stability
3. Reserve some data for out-of-sample testing
4. Observe live performance after optimization, adjust timely
5. Combine multiple strategies, don't bet on just one
Remember: Optimizable parameters ≠ better strategy. Sometimes simple strategies are more robust. Tuning parameters is an art, not simply maximizing backtest returns! 🙏
Final Reminder: This strategy's greatest value is learning the design pattern of optimizable parameter strategies. If you like adjusting parameters and optimizing, this is a great practice target. But if you want "plug and play," you might need to run a round of hyperopt first to find suitable parameters.