Basics
mode: spot
timeframe: 1h
interface version: 3
Settings
stoploss: -0.99
has minimal roi
Indicators
SMA
talib
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 | # --- Do not remove these libs --- freqtrade backtesting --strategy SmoothScalp --timerange 20210110-20210410 from freqtrade.strategy.interface import IStrategy from typing import Dict, List from functools import reduce from pandas import DataFrame # -------------------------------- import talib.abstract as ta import freqtrade.vendor.qtpylib.indicators as qtpylib from typing import Dict, List from functools import reduce from pandas import DataFrame, DatetimeIndex, merge # -------------------------------- import talib.abstract as ta import freqtrade.vendor.qtpylib.indicators as qtpylib import numpy #V1 class heikin(IStrategy): INTERFACE_VERSION = 3 #do not use this strategy in live mod. It is not good enough yet and can only be use to find trends. timeframe = '1h' #I haven't found the best roi and stoplost, so feel free to explore. minimal_roi = { "0": 10, } stoploss = -0.99 def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe['hclose']=(dataframe['open'] + dataframe['high'] + dataframe['low'] + dataframe['close']) / 4 dataframe['hopen']= ((dataframe['open'].shift(2) + dataframe['close'].shift(2))/ 2) #it is not the same as real heikin ashi since I found that this is better. dataframe['hhigh']=dataframe[['open','close','high']].max(axis=1) dataframe['hlow']=dataframe[['open','close','low']].min(axis=1) dataframe['emac'] = ta.SMA(dataframe['hclose'], timeperiod=6) #to smooth out the data and thus less noise. dataframe['emao'] = ta.SMA(dataframe['hopen'], timeperiod=6) return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( (dataframe['emao'] < dataframe['emac']) ), 'buy'] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( (dataframe['emao'] > dataframe['emac']) ), 'sell'] = 1 return dataframe |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 88.5s
pairs 33 pairs
timerange 20210101-20260101
mode spot
timeframe 1h
stake 100 USDT
wallet 1000 USDT
max open trades 10
fee exchange lowest tier
total profit-90.08%
final wallet99 USDT
win rate34.0%
max drawdown-97.02%
market change+447.62%
vs market-537.70%
timeframe1h
profit factor0.95
expectancy ratio-0.033
sharpe-1.022
sortino-4.932
CAGR-37.0%
calmar-0.971
avg MFE+3.23%
avg MAE-2.42%
avg profit/trade-0.06%
avg duration6h 35m
best trade+1000.00%
worst trade-43.04%
win/loss streak17 / 48
positive months7/23
consistent (3-mo)14.3%
worst 3-mo-102.94%
trades14618
revision1
likely annual return-72%
range (5th–95th)-84% … -38%
chance of profit0.4%
worst-5% outcome-86%
significance (p)0.699
risk of ruin0.0%
- profit isn't statistically significant (p=0.70) — hard to tell apart from luck
- only 0% of resampled runs were profitable
- profitable in only 14% of rolling 3-month windows
- did not beat simply holding the market
- very deep drawdown (-97%)
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 |
|---|---|---|---|---|---|---|---|---|---|
| Nov 2022 | bearish trending high vol | 63 | -5.95 | -0.94 | 14 | 49 | 22.2 | -97.02 | 5h 45m |
| Oct 2022 | bullish choppy low vol | 136 | -4.32 | -0.32 | 38 | 98 | 27.9 | -95.36 | 5h 15m |
| Sep 2022 | bearish choppy high vol | 211 | -3.19 | -0.15 | 70 | 141 | 33.2 | -94.04 | 6h 04m |
| Aug 2022 | bullish choppy high vol | 305 | -17.20 | -0.56 | 82 | 223 | 26.9 | -93.01 | 5h 24m |
| Jul 2022 | bearish trending high vol | 331 | +1.24 | 0.04 | 122 | 209 | 36.9 | -89.76 | 6h 23m |
| Jun 2022 | bearish trending high vol | 389 | -20.53 | -0.53 | 122 | 267 | 31.4 | -89.4 | 5h 35m |
| May 2022 | bearish trending high vol | 621 | -45.72 | -0.74 | 207 | 414 | 33.3 | -84.04 | 5h 49m |
| Apr 2022 | bearish choppy high vol | 781 | -36.69 | -0.47 | 209 | 572 | 26.8 | -68.28 | 6h 05m |
| Mar 2022 | bullish choppy high vol | 895 | -14.72 | -0.16 | 291 | 604 | 32.5 | -59.73 | 6h 30m |
| Feb 2022 | bearish trending high vol | 658 | +5.83 | 0.09 | 239 | 419 | 36.3 | -56.34 | 7h 04m |
| Jan 2022 | bearish trending high vol | 766 | -28.45 | -0.37 | 232 | 534 | 30.3 | -54.88 | 6h 35m |
| Dec 2021 | bearish trending high vol | 809 | -12.46 | -0.15 | 263 | 546 | 32.5 | -50.11 | 6h 32m |
| Nov 2021 | bullish trending high vol | 798 | -17.89 | -0.22 | 250 | 548 | 31.3 | -42.38 | 6h 48m |
| Oct 2021 | bullish trending high vol | 820 | -9.99 | -0.12 | 288 | 532 | 35.1 | -36.94 | 6h 48m |
| Sep 2021 | bearish trending high vol | 745 | -11.44 | -0.15 | 294 | 451 | 39.5 | -34.53 | 6h 46m |
| Aug 2021 | bullish trending high vol | 812 | +18.47 | 0.23 | 292 | 520 | 36.0 | -37.82 | 6h 45m |
| Jul 2021 | bearish trending high vol | 857 | -23.46 | -0.27 | 297 | 560 | 34.7 | -39.82 | 5h 56m |
| Jun 2021 | bearish trending high vol | 771 | -45.37 | -0.59 | 234 | 537 | 30.4 | -30.71 | 5h 58m |
| May 2021 | bearish trending high vol | 764 | -30.99 | -0.41 | 260 | 504 | 34.0 | -19.09 | 6h 42m |
| Apr 2021 | bearish choppy high vol | 777 | +37.12 | 0.48 | 308 | 469 | 39.6 | -6.99 | 7h 33m |
| Mar 2021 | bullish choppy high vol | 796 | +3.58 | 0.04 | 278 | 518 | 34.9 | -9.04 | 7h 08m |
| Feb 2021 | bullish trending high vol | 699 | +47.08 | 0.67 | 290 | 409 | 41.5 | -8.2 | 7h 36m |
| Jan 2021 | bullish trending high vol | 814 | +124.96 | 1.53 | 295 | 519 | 36.2 | -14.47 | 6h 52m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2022 | 5156 | -169.70 | -0.33 | 1626 | 3530 | 31.5 | -97.02 | 6h 14m |
| 2021 | 9462 | +79.61 | 0.08 | 3349 | 6113 | 35.4 | -50.11 | 6h 46m |
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
2 potential lookahead pattern(s) found · 2 warning(s)
| Line | Pattern | Detail | |
|---|---|---|---|
| 31 | leak | whole_series_reduction | .max() over the whole column sees future rows (use .rolling(window).max() for a causal value) |
| 32 | leak | whole_series_reduction | .min() over the whole column sees future rows (use .rolling(window).min() for a causal value) |
| 40 | realism | dead_v2_signal | writes the freqtrade v2 column 'buy' from a v3 populate_* method -- v3 reads enter_*/exit_* only, so this signal is dead code and never trades |
| 48 | realism | dead_v2_signal | writes the freqtrade v2 column 'sell' from a v3 populate_* method -- v3 reads enter_*/exit_* only, so this signal is dead code and never trades |
ran by Ron · took s
Lookahead analysis
freqtrade lookahead-analysis: detects strategies peeking at future candles.