Freqtrade Strategy

AwesomeMacd

1h candlesMomentumSpot, long only

Tested 1 Jun 2023 – 30 May 2025
Rank 4 of 27 by return

AwesomeMacd turned $1,000 into $1,878 (+87.8%) over 729 days, while holding Bitcoin returned +288.1% and an equal mix of the ten coins +194.8%. Its worst drawdown was 23.9%, a substantial dip to sit through. It lost more trades than it won (31% win rate) but its winners were large enough for a profit factor of 1.23.

AwesomeMacd account balance compared with holding Bitcoin$0$1,000$2,000$3,000$4,000JulOctJan 2024AprJulOctJan 2025AprAwesomeMacd $1,878BTC hold $3,880
Account balance from $1,000 (closed trades, daily). Dashed line: $1,000 held in BTC over the same days.
Total return+87.8%$1,878 final balance
Max drawdown23.9%5 Dec 2024 to 10 Apr 2025
Win rate31.4%316 wins / 690 losses
Profit factor1.23Gross wins ÷ gross losses
Trades1,0061.4 per day
Average trade+0.44%after fees
Average hold2d 3hwinners 3d 3h, losers 1d 15h
Annualised (CAGR)+37.1%Sharpe 1.99 · Sortino 3.78

How AwesomeMacd trades

AwesomeMacd enters on the 1-hour chart when the Awesome Oscillator flips from negative to positive while the MACD line is already above zero. It exits when both turn negative again. A 10% take-profit caps each trade.

ADX is calculated but never used in the rules. The strategy relies on two momentum readings agreeing, so it trades often and wins on fewer than a third of trades.

Rules at a glance

Indicators
MACD, Awesome Oscillator, ADX
Take-profit (minimal ROI)
10% from entry
Stoploss
−25%
Trailing stop
Off
Exit signal
Used

Results by month

Profit or loss in USDT for trades closed in each month.

JFMAMJJASOND2023-33+65-131-16+204+203+2742024-28+233+135-117+39-74+23-48+138+42+356-262025-61-227-18-74+18

Results by coin

PairTradesWin rateProfit (USDT)Avg. hold
SOL/USDT11041.8%+347.451d 22h
DOT/USDT8531.8%+130.612d 3h
LINK/USDT10036.0%+108.482d 3h
BTC/USDT11529.6%+104.352d 21h
DOGE/USDT9131.9%+89.881d 23h
BNB/USDT12128.1%+83.902d 6h
AVAX/USDT8331.3%+77.601d 21h
ADA/USDT9229.3%+29.061d 19h
XRP/USDT9530.5%−22.741d 21h
ETH/USDT11424.6%−70.112d 2h

Why trades closed

Exit reasonTradesWin rateProfit (USDT)
Take-profit (ROI)213100.0%+4,263.78
Stoploss50.0%−251.60
Exit signal78813.1%−3,133.68

The code

AwesomeMacd comes from the community freqtrade-strategies repository (GPL-3.0). These are the parts that decide when it trades; the full file is 67 lines.

Entry rules
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    dataframe.loc[
        (
                (dataframe['macd'] > 0) &
                (dataframe['ao'] > 0) &
                (dataframe['ao'].shift() < 0)

        ),
        'enter_long'] = 1
    return dataframe
Exit rules
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    dataframe.loc[
        (
                (dataframe['macd'] < 0) &
                (dataframe['ao'] < 0) &
                (dataframe['ao'].shift() > 0)

        ),
        'exit_long'] = 1
    return dataframe
Indicators
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    dataframe['adx'] = ta.ADX(dataframe, timeperiod=14)
    dataframe['ao'] = qtpylib.awesome_oscillator(dataframe)

    macd = ta.MACD(dataframe)
    dataframe['macd'] = macd['macd']
    dataframe['macdsignal'] = macd['macdsignal']
    dataframe['macdhist'] = macd['macdhist']

    return dataframe

Reproduce this test

With freqtrade installed (see our Docker guide), download the data and run the same backtest:

freqtrade download-data --exchange binance --pairs ADA/USDT AVAX/USDT BNB/USDT BTC/USDT DOGE/USDT DOT/USDT ETH/USDT LINK/USDT SOL/USDT XRP/USDT --timeframes 1h --timerange 20230501-20250530
freqtrade backtesting --strategy AwesomeMacd --timeframe 1h \
  --timerange 20230601-20250530 --dry-run-wallet 1000 --stake-amount 200 --max-open-trades 5 --fee 0.001

Results can differ slightly with a different data source or freqtrade version. See how we test.