BinanceMultiStrategy
♡
Basics
mode: spot
timeframe: 5m
interface version: 3
Settings
stoploss: -0.05
has minimal roi
trailing
process only new candles
startup candle count: 200
hyperopt
hyperopt params: 2
Indicators
Bollinger_Bands
EMA
MACD
RSI
SMA
talib
Concepts
mean_reversion
trailing
15 related strategies (⧉ identical code, ≈ similar name)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | """ Multi-indicator Binance strategy for FreqTrade. Uses RSI, EMA crossover, MACD, and Bollinger Bands. """ from freqtrade.strategy import IStrategy, DecimalParameter, IntParameter from pandas import DataFrame import talib.abstract as ta class BinanceMultiStrategy(IStrategy): INTERFACE_VERSION = 3 # ROI - Take profit at these levels minimal_roi = { "0": 0.05, # 5% immediately "30": 0.03, # 3% after 30 min "60": 0.02, # 2% after 1 hour "120": 0.01, # 1% after 2 hours } stoploss = -0.05 # 5% stoploss trailing_stop = True trailing_stop_positive = 0.01 trailing_stop_positive_offset = 0.02 trailing_only_offset_is_reached = True timeframe = "5m" process_only_new_candles = True startup_candle_count: int = 200 # Hyperopt parameters buy_rsi = IntParameter(20, 40, default=30, space="buy") sell_rsi = IntParameter(60, 80, default=70, space="sell") def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: # RSI dataframe["rsi"] = ta.RSI(dataframe, timeperiod=14) # EMAs dataframe["ema_9"] = ta.EMA(dataframe, timeperiod=9) dataframe["ema_21"] = ta.EMA(dataframe, timeperiod=21) dataframe["ema_50"] = ta.EMA(dataframe, timeperiod=50) dataframe["ema_200"] = ta.EMA(dataframe, timeperiod=200) # MACD macd = ta.MACD(dataframe) dataframe["macd"] = macd["macd"] dataframe["macd_signal"] = macd["macdsignal"] dataframe["macd_hist"] = macd["macdhist"] # Bollinger Bands bb = ta.BBANDS(dataframe, timeperiod=20) dataframe["bb_upper"] = bb["upperband"] dataframe["bb_middle"] = bb["middleband"] dataframe["bb_lower"] = bb["lowerband"] # Volume SMA dataframe["volume_sma_20"] = ta.SMA(dataframe["volume"], timeperiod=20) return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( # RSI oversold (dataframe["rsi"] < self.buy_rsi.value) & # EMA crossover (9 crosses above 21) (dataframe["ema_9"] > dataframe["ema_21"]) & # Price above 200 EMA (uptrend) (dataframe["close"] > dataframe["ema_200"]) & # MACD bullish (dataframe["macd"] > dataframe["macd_signal"]) & # Price near lower Bollinger Band (dataframe["close"] < dataframe["bb_middle"]) & # Volume confirmation (dataframe["volume"] > dataframe["volume_sma_20"]) & (dataframe["volume"] > 0) ), "enter_long"] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( # RSI overbought (dataframe["rsi"] > self.sell_rsi.value) & # Price near upper Bollinger Band (dataframe["close"] > dataframe["bb_upper"] * 0.99) & # MACD bearish crossover (dataframe["macd"] < dataframe["macd_signal"]) & (dataframe["volume"] > 0) ), "exit_long"] = 1 return dataframe |
Strategy League — fixed backtest that feeds the ranking
No trades. This strategy never entered a position over the League window (33 pairs · 20210101-20260101), so there's nothing to backtest or rank — its entry conditions didn't trigger on the tested pairs and timeframe.
Backtests — over a market period
Backtest this strategy over a chosen crypto-cycle period. These don't affect the League ranking, and need that period's candle data downloaded.
Log in or sign up to run backtests.
| Period | Range | Total % | Win % | Max DD | Trades | |
|---|---|---|---|---|---|---|
| 2020 · DeFi Summer & Pre-Halving Rally | 20200101-20210101 | not run | ||||
| 2021 · Institutional Bull Market | 20210101-20220101 | not run | ||||
| 2022 · Post-Bull Crash & Macro Tightening | 20220101-20230101 | not run | ||||
| 2023–2024 · Recovery & ETF Anticipation | 20230101-20250101 | not run | ||||
| 2025–2026 · Current Cycle | 20250101-20260101 | not run | ||||
Walk forward
Out-of-sample backtest on recent data · 33 pairs · 20260101-20260701.
Backtest trust check
no lookahead patterns · 1 thing(s) worth reviewing before trusting the numbers
| Line | Pattern | Detail | |
|---|---|---|---|
| 31 | review | startup_candles_too_small | startup_candle_count is 200, but EMA(timeperiod=200) needing 3x warmup needs at least 600 candles -- so the first 400+ candles of every backtest use an indicator that hasn't warmed up. Recursive indicators (EMA/RSI/ADX/ATR) want several times their period, not exactly it |
ran by Ron · took s
Lookahead analysis
freqtrade lookahead-analysis: detects strategies peeking at future candles.