Basics
mode: spot
timeframe: 1d
interface version: 3
Settings
stoploss: -1.0
has minimal roi
process only new candles: false
Indicators
SMA
talib
9 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 | # --- Do not remove these libs --- import numpy as np # noqa import pandas as pd # noqa from pandas import DataFrame from freqtrade.strategy import (BooleanParameter, CategoricalParameter, DecimalParameter, IStrategy, IntParameter) # -------------------------------- # Add your lib to import here import talib.abstract as ta import freqtrade.vendor.qtpylib.indicators as qtpylib from functools import reduce class PrivateMACross(IStrategy): INTERFACE_VERSION = 3 timeframe = '1d' ma_short = 9 ma_long = 21 startup_candle_count: int = ma_long can_short: bool = False minimal_roi = { "0": 10.5 } stoploss = -1.0 trailing_stop = False process_only_new_candles = False use_exit_signal = True exit_profit_only = False ignore_roi_if_entry_signal = False order_types = { 'entry': 'market', 'exit': 'market', 'stoploss': 'market', 'stoploss_on_exchange': False } order_time_in_force = { 'entry': 'gtc', 'exit': 'gtc' } plot_config = { 'main_plot': { f'sma_short_9': {'color': 'red'}, f'sma_long_21': {'color': 'yellow'} } } def informative_pairs(self): return [] def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe['sma_short_9'] = ta.SMA(dataframe, timeperiod=self.ma_short) dataframe['sma_long_21'] = ta.SMA(dataframe, timeperiod=self.ma_long) return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: conditions_long = [] conditions_long.append(qtpylib.crossed_above( dataframe[f'sma_short_9'].shift(1), dataframe[f'sma_long_21'].shift(1) )) if conditions_long: dataframe.loc[ reduce(lambda x, y: x & y, conditions_long), 'enter_long'] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: conditions_exit_long = [] conditions_exit_long.append(qtpylib.crossed_above( dataframe[f'sma_long_21'], dataframe[f'sma_short_9'] )) if conditions_exit_long: dataframe.loc[ reduce(lambda x, y: x & y, conditions_exit_long), 'exit_long'] = 1 return dataframe |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 13.0s
pairs 33 pairs
timerange 20210101-20260101
mode spot
timeframe 1d
stake 100 USDT
wallet 1000 USDT
max open trades 10
fee exchange lowest tier
total profit+517.90%
final wallet6179 USDT
win rate31.9%
max drawdown-12.19%
market change+403.38%
vs market+114.52%
timeframe1d
profit factor2.26
expectancy ratio0.857
sharpe0.728
sortino7.373
CAGR+43.9%
calmar52.736
avg MFE+31.57%
avg MAE-13.36%
avg profit/trade8.33%
avg duration406h 43m
best trade+1050.00%
worst trade-42.03%
positive months21/61
consistent (3-mo)47.5%
worst 3-mo-36.09%
trades621
revision1
likely annual return+41%
range (5th–95th)+15% … +96%
chance of profit100.0%
worst-5% outcome+11%
significance (p)0.0
risk of ruin0.0%
- statistically significant edge (p=0.00)
- 100% of resampled runs stayed profitable
- comfortably beat buy-and-hold
Resampling the trade sequence 2,000× shows the spread of results this edge could plausibly produce — separating a dependable strategy from one that got lucky once.
Loading charts…
Monthly breakdown
| Month | Regime | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|---|
| Jan 2026 | bullish trending low vol | 5 | -0.89 | -1.77 | 2 | 3 | 40.0 | -10.27 | 100h 48m |
| Dec 2025 | bearish trending low vol | 15 | -10.18 | -6.78 | 1 | 14 | 6.7 | -10.15 | 217h 36m |
| Nov 2025 | bearish trending high vol | 22 | -18.44 | -8.38 | 1 | 21 | 4.5 | -8.67 | 136h 22m |
| Oct 2025 | bearish trending low vol | 11 | -4.05 | -3.69 | 3 | 8 | 27.3 | -6.99 | 318h 33m |
| Sep 2025 | bullish choppy low vol | 12 | -5.51 | -4.59 | 3 | 9 | 25.0 | -5.4 | 330h 00m |
| Aug 2025 | bullish choppy low vol | 15 | +14.33 | 9.56 | 10 | 5 | 66.7 | -6.55 | 665h 36m |
| Jul 2025 | bullish choppy low vol | 2 | -0.70 | -3.48 | 1 | 1 | 50.0 | -6.71 | 528h 00m |
| Jun 2025 | bearish choppy low vol | 12 | -5.41 | -4.50 | 2 | 10 | 16.7 | -6.58 | 396h 00m |
| May 2025 | bullish trending low vol | 9 | +10.24 | 11.37 | 8 | 1 | 88.9 | -7.25 | 733h 20m |
| Apr 2025 | bullish choppy low vol | 10 | -11.22 | -11.22 | 1 | 9 | 10.0 | -7.35 | 252h 00m |
| Mar 2025 | bearish trending high vol | 10 | -8.65 | -8.64 | 0 | 10 | 0.0 | -5.66 | 158h 24m |
| Feb 2025 | bearish trending low vol | 14 | -15.92 | -11.37 | 1 | 13 | 7.1 | -4.4 | 183h 26m |
| Jan 2025 | bearish choppy low vol | 14 | -8.34 | -5.96 | 1 | 13 | 7.1 | -2.09 | 317h 09m |
| Dec 2024 | bullish trending low vol | 10 | +73.21 | 73.18 | 9 | 1 | 90.0 | -3.68 | 962h 24m |
| Nov 2024 | bullish trending low vol | 5 | -3.25 | -6.51 | 0 | 5 | 0.0 | -4.46 | 384h 00m |
| Oct 2024 | bullish choppy low vol | 13 | +8.27 | 6.36 | 8 | 5 | 61.5 | -5.28 | 502h 09m |
| Sep 2024 | bearish choppy low vol | 9 | -7.04 | -7.82 | 1 | 8 | 11.1 | -5.43 | 365h 20m |
| Aug 2024 | bearish choppy high vol | 10 | -6.43 | -6.43 | 3 | 7 | 30.0 | -4.14 | 343h 12m |
| Jul 2024 | bearish trending low vol | 10 | -6.42 | -6.42 | 2 | 8 | 20.0 | -3.2 | 216h 00m |
| Jun 2024 | bearish choppy low vol | 14 | -3.27 | -2.34 | 5 | 9 | 35.7 | -2.12 | 361h 43m |
| May 2024 | bullish choppy high vol | 16 | -3.63 | -2.27 | 3 | 13 | 18.8 | -1.61 | 189h 00m |
| Apr 2024 | bearish choppy high vol | 14 | -2.54 | -1.83 | 4 | 10 | 28.6 | -1.04 | 315h 26m |
| Mar 2024 | bullish trending high vol | 9 | +19.18 | 21.30 | 6 | 3 | 66.7 | -0.54 | 762h 40m |
| Feb 2024 | bullish trending low vol | 6 | +12.81 | 21.35 | 4 | 2 | 66.7 | -0.47 | 660h 00m |
| Jan 2024 | bearish choppy high vol | 18 | +70.25 | 39.00 | 7 | 11 | 38.9 | -5.38 | 620h 00m |
| Dec 2023 | bullish trending low vol | 6 | -0.59 | -0.99 | 3 | 3 | 50.0 | -7.7 | 356h 00m |
| Nov 2023 | bullish trending low vol | 8 | +15.73 | 19.64 | 6 | 2 | 75.0 | -10.12 | 693h 00m |
| Oct 2023 | bullish trending low vol | 12 | -0.86 | -0.71 | 3 | 9 | 25.0 | -10.5 | 448h 00m |
| Sep 2023 | bearish choppy low vol | 8 | -2.76 | -3.45 | 1 | 7 | 12.5 | -9.84 | 129h 00m |
| Aug 2023 | bearish choppy low vol | 12 | -2.69 | -2.24 | 2 | 10 | 16.7 | -9.36 | 378h 00m |
| Jul 2023 | bullish trending low vol | 14 | +2.00 | 1.43 | 6 | 8 | 42.9 | -9.58 | 337h 43m |
| Jun 2023 | bullish trending low vol | 10 | -8.15 | -8.14 | 2 | 8 | 20.0 | -9.36 | 403h 12m |
| May 2023 | bearish choppy low vol | 5 | +4.29 | 8.57 | 2 | 3 | 40.0 | -7.83 | 297h 36m |
| Apr 2023 | bullish trending low vol | 12 | -1.96 | -1.63 | 4 | 8 | 33.3 | -8.57 | 486h 00m |
| Mar 2023 | bullish trending high vol | 12 | -15.81 | -13.17 | 1 | 11 | 8.3 | -8.23 | 258h 00m |
| Feb 2023 | bullish trending low vol | 12 | +38.53 | 32.08 | 10 | 2 | 83.3 | -11.73 | 800h 00m |
| Jan 2023 | bullish trending low vol | 1 | -0.04 | -0.38 | 0 | 1 | 0.0 | -12.19 | 744h 00m |
| Dec 2022 | bearish trending low vol | 10 | -6.50 | -6.49 | 0 | 10 | 0.0 | -12.18 | 302h 24m |
| Nov 2022 | bearish trending high vol | 10 | -12.28 | -12.27 | 3 | 7 | 30.0 | -11.28 | 472h 48m |
| Oct 2022 | bullish choppy low vol | 12 | -4.95 | -4.12 | 0 | 12 | 0.0 | -8.91 | 226h 00m |
| Sep 2022 | bearish choppy high vol | 10 | -9.43 | -9.43 | 1 | 9 | 10.0 | -8.33 | 309h 36m |
| Aug 2022 | bullish choppy high vol | 12 | +16.83 | 14.02 | 9 | 3 | 75.0 | -8.98 | 832h 00m |
| Jul 2022 | bearish trending high vol | 8 | -3.16 | -3.94 | 2 | 6 | 25.0 | -9.54 | 219h 00m |
| Jun 2022 | bearish trending high vol | 12 | -15.21 | -12.67 | 1 | 11 | 8.3 | -8.79 | 208h 00m |
| May 2022 | bearish trending high vol | 3 | -1.85 | -6.15 | 1 | 2 | 33.3 | -6.32 | 296h 00m |
| Apr 2022 | bearish choppy high vol | 10 | +8.07 | 8.07 | 8 | 2 | 80.0 | -7.32 | 609h 36m |
| Mar 2022 | bullish choppy high vol | 8 | -5.03 | -6.29 | 0 | 8 | 0.0 | -7.22 | 99h 00m |
| Feb 2022 | bearish trending high vol | 10 | -13.51 | -13.51 | 0 | 10 | 0.0 | -6.34 | 309h 36m |
| Jan 2022 | bearish trending high vol | 13 | -15.35 | -11.80 | 1 | 12 | 7.7 | -3.99 | 339h 42m |
| Dec 2021 | bearish trending high vol | 4 | -7.23 | -18.09 | 0 | 4 | 0.0 | -1.31 | 192h 00m |
| Nov 2021 | bullish trending high vol | 14 | +5.12 | 3.67 | 7 | 7 | 50.0 | -0.49 | 606h 51m |
| Oct 2021 | bullish trending high vol | 5 | +2.11 | 4.22 | 3 | 2 | 60.0 | -0.23 | 422h 24m |
| Sep 2021 | bearish trending high vol | 13 | +12.27 | 9.42 | 5 | 8 | 38.5 | -1.78 | 557h 32m |
| Aug 2021 | bullish trending high vol | 5 | +15.14 | 30.30 | 5 | 0 | 100.0 | -5.1 | 744h 00m |
| Jul 2021 | bearish trending high vol | 12 | -14.96 | -12.47 | 0 | 12 | 0.0 | -5.31 | 192h 00m |
| Jun 2021 | bearish trending high vol | 11 | -8.13 | -7.40 | 1 | 10 | 9.1 | -2.68 | 150h 33m |
| May 2021 | bearish trending high vol | 14 | +135.28 | 96.61 | 7 | 7 | 50.0 | -1.64 | 588h 00m |
| Apr 2021 | bearish choppy high vol | 7 | +40.41 | 57.75 | 5 | 2 | 71.4 | -0.59 | 541h 43m |
| Mar 2021 | bullish choppy high vol | 12 | +104.88 | 87.34 | 7 | 5 | 58.3 | -1.04 | 542h 00m |
| Feb 2021 | bullish trending high vol | 7 | +183.10 | 261.43 | 6 | 1 | 85.7 | -0.22 | 918h 51m |
| Jan 2021 | bullish trending high vol | 2 | -1.85 | -9.23 | 0 | 2 | 0.0 | -0.21 | 456h 00m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2026 | 5 | -0.89 | -1.77 | 2 | 3 | 40.0 | -10.27 | 100h 48m |
| 2025 | 146 | -63.85 | -4.37 | 32 | 114 | 21.9 | -10.15 | 323h 31m |
| 2024 | 134 | +151.14 | 11.27 | 52 | 82 | 38.8 | -5.43 | 458h 30m |
| 2023 | 112 | +27.69 | 2.47 | 40 | 72 | 35.7 | -12.19 | 429h 51m |
| 2022 | 118 | -62.37 | -5.28 | 26 | 92 | 22.0 | -12.18 | 365h 05m |
| 2021 | 106 | +466.14 | 43.96 | 46 | 60 | 43.4 | -5.31 | 492h 14m |
Trade charts — best 2 and worst 2 performing pairs (full OHLC candles are expensive to render for every pair)
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 | |
|---|---|---|---|
| 33 | review | unthrottled_candle_processing | process_only_new_candles is False, so populate_indicators/populate_entry_trend/populate_exit_trend re-run every throttle_secs (default 5s) even though their inputs -- closed candles -- haven't changed since the last run. This wastes CPU without changing any value; if the goal is order-book-level checks, put that logic in confirm_trade_entry/custom_exit instead, which already run every loop |
ran by Ron · took s
Lookahead analysis
Freqtrade logsno lookahead bias detected
20 signal(s) analysed · 0 biased entries · 0 biased exits
ran by Ron · took 7.9s