Skip to content
All strategies

Strategies

Freqtrade AwesomeMacd (berlinguyinca), faithful 1h long-only port on NEARUSDT spot

Outcome: Abandoned

AwesomeMacdNearSpot

Outcome Summary

This run ported Freqtrade's AwesomeMacd unchanged to NEARUSDT spot on 1h bars, as a replication test rather than a predicted edge. The 6-year backtest shows the port follows the source rules, but the signal carried no information: 462 trades averaged 0.093% each, profit factor was 0.923, Sharpe was -0.59, and modeled impact drove the account to zero in December 2022. The backtest reviewer abandoned the run after one iteration because it was below the spot fee floor and lost money even before impact, so optimization and later stages were not reached. The reviewer also flagged an unverified engine issue for review: trades kept opening after the equity curve hit zero.

Hypothesis

Faithful port of the Freqtrade strategy 'AwesomeMacd' by Gert Wohlgemuth (berlinguyinca, GPL-3.0; itself converted from sthewissen's Mynt AwesomeMacd.cs). We port the Freqtrade version as written, not the Mynt original: Freqtrade gates on the MACD LINE (TA-Lib defaults 12/26/9) being above or below zero, while Mynt used the MACD HISTOGRAM with (5,7,4). Indicators on 1h bars: AO = SMA(median price (H+L)/2, 5) - SMA(median price, 34), the qtpylib awesome_oscillator default (simple, not weighted). MACD line =……Show moreShow less

Faithful port of the Freqtrade strategy 'AwesomeMacd' by Gert Wohlgemuth (berlinguyinca, GPL-3.0; itself converted from sthewissen's Mynt AwesomeMacd.cs). We port the Freqtrade version as written, not the Mynt original: Freqtrade gates on the MACD LINE (TA-Lib defaults 12/26/9) being above or below zero, while Mynt used the MACD HISTOGRAM with (5,7,4). Indicators on 1h bars: AO = SMA(median price (H+L)/2, 5) - SMA(median price, 34), the qtpylib awesome_oscillator default (simple, not weighted). MACD line = EMA(close,12) - EMA(close,26), as TA-Lib computes it. ADX(14) is computed in the source but never used in any rule, so it is omitted (no behavioural effect). Entry (enter_long) fires when macd > 0 AND ao > 0 AND the previous bar's ao < 0, i.e. AO crosses up through zero while MACD is positive. The exit signal (exit_long) fires when macd < 0 AND ao < 0 AND the previous bar's ao > 0. Freqtrade defaults also apply: minimal_roi {"0": 0.10}, a take-profit at +10% profit from minute 0; stoploss -0.25; use_exit_signal = True; exit_profit_only = False; one open trade per pair; long-only (can_short defaults to False). Platform adaptations: (1) Venue and instrument. The source names no pair, so we chose NEARUSDT.BINANCE_SPOT: long-only and unleveraged belong on spot, NEAR has had multi-year Binance 1h history since Oct 2020, and NEAR is little used in the corpus, unlike BTC, LINK, DOT and ATOM. (2) Fill timing. Freqtrade fills a signal at the next candle's open. On a 24/7 venue that is the registry's use_equivalent: a market order at the signal bar's close. (3) The ROI and the stop are intrabar orders matched by the platform (the take-profit as a limit/MIT order, the stop as a reduce-only _submit_stop_market), mirroring Freqtrade's backtest, which exits on the candle's high and low. No exchange-resting order is required. (4) Sizing. Freqtrade's stake comes from user config. We use the platform default: 95% of account equity per entry, one position at a time, no pyramiding. (5) Fees are Binance spot taker 0.10% per side. All parameters are frozen at the source defaults. Expected per-trade arithmetic: an AO zero-cross with MACD>0 on NEAR 1h starts a swing whose winners are capped at +10% and whose losers run to the exit cross (typically -2% to -5%) or to -25%. Even at a ~40% win rate with a +4% average winner and a -2.5% average loser, gross is about +0.1% per trade. That is not clearly above the 0.20% round trip, so this is a faithful replication test, not a predicted strong edge.

BINANCE_SPOT is the right venue for a long-only, no-leverage strategy, and spot proposals have the higher survival rate. NEAR is unused in the corpus, so this avoids the over-tested BTC series. No supplementary feed is needed.

no_edge: negative_expectancy. Fee-floor check: avg_trade_return_pct is 0.093% against the 0.25% BINANCE_SPOT floor. PF is 0.923, Sharpe -0.59 and IC 0.0009 (t=0.21) across 462 closed trades over about 6 years. Summed trade PnL is negative even before modeled impact, at about -$388k, and 2022 and 2025 lose -1.4% and -1.6% per trade. Commissions are only 6.6% of gross, so fees are not the cause: the +10% ROI cap against the -25% stop does not pay at a 38% win rate. With modeled impact (183% of gross, capacity about……Show moreShow less

no_edge: negative_expectancy. Fee-floor check: avg_trade_return_pct is 0.093% against the 0.25% BINANCE_SPOT floor. PF is 0.923, Sharpe -0.59 and IC 0.0009 (t=0.21) across 462 closed trades over about 6 years. Summed trade PnL is negative even before modeled impact, at about -$388k, and 2022 and 2025 lose -1.4% and -1.6% per trade. Commissions are only 6.6% of gross, so fees are not the cause: the +10% ROI cap against the -25% stop does not pay at a 38% win rate. With modeled impact (183% of gross, capacity about $30k) the account goes to 0 in Dec 2022. All parameters are contract-fixed, so optimization cannot change anything. QA's smoke-test concern holds on the full history. Scope: this rejects only the faithful AwesomeMacd port on NEARUSDT Binance spot 1h with Freqtrade's default ROI and stop at 95% equity sizing. It does not reject AwesomeMacd on other pairs, Mynt's histogram variant, or other ROI/stop settings. Separate symptom for engine review, not verified: the equity curve reads 0 after the liquidation on 2022-12-08 while trades keep opening at six-figure notional, so sizing appears to use equity that excludes the folded impact.

Implementation

Faithful port of Freqtrade AwesomeMacd (berlinguyinca) on NEARUSDT Binance spot 1h, long-only. Buys when the Awesome Oscillator (SMA5-SMA34 of median price) crosses up through zero (ao>0, previous ao<0) while the MACD line (EMA12-EMA26) is positive. It sells on the mirror condition (macd<0, ao<0, previous ao>0). A bracket holds the 10% minimal_roi take-profit and the -25% stoploss intrabar. Each entry uses 95% of equity, one position at a time.

Rules, indicator definitions (simple-MA AO on median price, TA-Lib-style SMA-seeded EMAs for the MACD line) and defaults follow the source line for line. ADX and the MACD signal/histogram are computed in the source but never used in a rule, so they are omitted. The ROI and stoploss are a venue-matched bracket placed at entry, so they fire inside the bar, as in Freqtrade's backtest. should_exit only handles the exit signal. calculate_signal returns AO as % of price as a continuous signal, and the cross/MACD gate lives in should_enter/should_exit. This tests a replication: the hypothesis's own arithmetic puts gross edge near the 0.20% spot round trip.

Verification Results

Optional: seed the fast EMA with the SMA of closes[slow-fast : slow] to match TA-Lib exactly. No behavioural change is expected after warm-up.

TA-Lib's MACD seeds the fast EMA with an SMA over the window that ends where the slow EMA's seed ends (both outputs start at the same index). Here the fast EMA is seeded on the first 12 closes. The difference decays geometrically, is negligible once warm-up finishes (min_bars 60, and the catch-up loop feeds every buffered bar on the first call), and only affects the first few hours of history and the warm-up after each walk-forward boundary reset.

None required. Optionally add freqtrade_fee to the fixed plan so the TP derivation is pinned explicitly.

take_profit_pct is 0.102102 (10.21% on price), not 10%. That is the Freqtrade net-of-fees ROI exit rate, open*(1+roi+fee)/(1-fee), with fee 0.001, and it is a correct translation of minimal_roi {"0": 0.10}. The constructor enforces it against roi_pct and freqtrade_fee. freqtrade_fee is not in research_contract.fixed, so it is noted here for traceability only.

The sandbox (832 days, 172 closed trades, unoptimized) shows avg_trade_return_pct -0.25% against the 0.20% spot round trip, PF 0.83 and a 94.5% drawdown. Commission is only 7.7% of gross, so the gross edge itself looks negative or flat. All profit came in the stressed-vol tercile. This is in line with the hypothesis's own estimate (~+0.1% gross per trade). Every parameter is frozen (tunable is empty), so optimization cannot change the result. The full-history backtest should decide this faithful replication. Check first whether the year-by-year mean trade return is also negative on the full history.

Backtest Review

Sharpe
-0.59
Total return
-100.00%
Max drawdown
100.00%
Trades
462
Win rate
38.3%
Profit factor
0.92

Trades match the source rules. All 462 entries are long-only AO zero-cross-up entries with MACD > 0. Exits come from the +10% ROI leg (winners cluster near +9.3%), the -25% stop (losers cluster near -25.5%) or the signal cross. The port is faithful.

Large sample: 462 closed trades over about 6 years, metrics_reliable true, clean input audit.

Below the spot fee floor and loses money: avg_trade_return_pct is 0.093% against the 0.25% BINANCE_SPOT review floor. PF is 0.923, Sharpe -0.59, executed-signal IC 0.0009 (t=0.21), so the signal carries no information. Fees are not the cause: commissions are only 6.6% of gross.

QA's concern holds on the full history. Year-by-year mean trade return is +3.74% (2020), +0.88% (2021), -1.39% (2022), +0.26% (2023), +0.65% (2024), -1.63% (2025), +1.14% (2026). Summed trade PnL before modeled impact is about -$388k, driven by -25% stop hits (e.g. -$141k on 2025-02-03 and -$136k on 2025-10-10). The bracket's payoff structure is the losing part: winners are capped at +10% and the stop is 2.5x that size.

Modeled impact is 183% of gross (about $853k) and capacity_usd is only about $29.8k. At this sizing, NEAR spot on 1h bars is too illiquid, and the reported equity hit 0 on 2022-12-08 (liquidated). The strategy is also beta-shaped in its winning years: 2020-21 gains came alongside NEAR's bull run.

Possible ledger inconsistency, not independently verified: the reported equity curve is 0 from Dec 2022, yet trades keep opening at about $130k-$550k notional until 2026. Sizing evidently reads an equity figure that excludes the folded impact cost. Treat this as a symptom for engine review. It does not change the verdict, because trade-level PnL is negative even before impact.

Outcome Summary

Fees were not the problem (commissions were only 6.6% of gross); the losses came from capping winners at +10% while letting losers run to a -25% stop, which cannot pay at a ~38% win rate, and 95%-equity sizing on illiquid NEAR spot added severe impact costs.

The backtest review voted abandon before optimization (no_edge: negative_expectancy). Average trade return was below the 0.25% BINANCE_SPOT floor, and summed trade PnL was about -$388k even before impact. All parameters were contract-fixed, so optimization could not change the result.

A faithful port of Freqtrade's AwesomeMacd (berlinguyinca) to NEARUSDT Binance spot 1h bars: go long when the Awesome Oscillator crosses up through zero while the MACD line is positive, exit on the opposite cross, with Freqtrade's default +10% ROI and -25% stoploss and 95% equity sizing.

Over 462 long trades from Oct 2020 to Oct 2026, the average trade returned 0.093% of notional, with a 38.3% win rate, profit factor 0.923, Sharpe -0.59 and signal IC 0.0009 (t=0.21). Total return was -100%: with modeled impact (183% of gross, capacity about $29.8k), the account was liquidated on 2022-12-08.

Analysis

AwesomeMacd

Analysis

AwesomeMacd.py

AwesomeMacd.cs

Backtest and paper results are hypothetical. Trading involves risk of loss.