Strategies
DOT Bybit 15-Minute Filtered Moving-Average Trend Catcher
Outcome: Abandoned
DotBybitFilteredSmaTrendCatcher
Outcome Summary
The Research Lead adapted an MQL5 EUR/USD moving-average trend catcher to DOT on Bybit, using ±1% SMA bands with a tight 0.4% stop and a wide 7% target. The single iteration's backtest lost the whole account within 71 days, and over 5,496 trades the mean net trade return was -0.524%, with a 5.7% win rate against the roughly 18% needed to break even. The analyst abandoned it at backtest review without optimizing, because the loss did not depend on position size and the allowed tuning range could not widen the stop beyond bar noise. The verdict rejects this pip-to-percent adaptation, not the original EUR/USD system, and the trades recorded after the liquidation date were flagged as a possible engine artifact that has not been verified.
Hypothesis
BYBIT is underrepresented at 2.8% versus its 5% target, and symmetric long-short trading addresses the 79.8% long-only concentration. Instrument/timeframe concentration was not supplied, so DOT is not claimed to be unused. The source's filtered entry and asymmetric fixed payoff distinguish this test from the failed LTC double-SMA crossover. Preserve the source mechanism rather than adding unrelated signals to meet every quota.
no_edge: negative_expectancy: decline optimization of this Research Lead version of the MQL5 'eur/usd trend catcher' on DOTUSDT.BYBIT 15m (SMA100, ±1% bands, 0.4% stop, 7% target). Over 5,496 closed positions the mean net trade return is -0.524%, against the +0.15% floor. PF is 0.274 and win rate is 5.7%. The loss is the same before and after the liquidation, so it is not a sizing problem. The ratio-locked tuning keeps the stop at 0.3-0.6%, inside 15m DOT noise, so optimization cannot fix it. This verdict rejects the tested pip-to-percent crypto adaptation, not the source's EUR/USD system. A version with a volatility-scaled (ATR) stop on a higher timeframe has not been tested. Trades recorded after the reported liquidation should be reviewed as a possible engine artifact; the cause has not been verified.
Implementation
Trades symmetric outward crossings of 1% bands around a 100-bar SMA on DOTUSDT Bybit 15-minute bars. Uses intrabar 0.4% stop and 7% target brackets, a 960-bar holding limit, a 0.25% equity risk budget and a 50% notional exposure cap.
Implements the requested crypto adaptation without additional indicators or filters. The continuous signal is percentage distance from the SMA. Derived bracket distances preserve the fixed 50:20:350 ratio when noise_filter_pct is tuned. SMA updates use a bounded deque and incremental sum; per-position holding state is scalar. Futures enable the required symmetric directions at 1x leverage. Mandatory local document reads failed because sandbox initialization could not create /opt/strategy-factory/.agents. The required outbox write was also attempted and failed; this JSON is returned directly and has not been saved to the requested path. No verification was run.
Verification Results
The sandbox reports liquidation, -100% return and average position size of 215.98%, despite the submitted sizing expression capping entry notional at 50% of settled equity. Reconcile executed entry quantities, sizing-time equity and impact accounting before interpreting these performance figures. They do not establish a defect in the submitted code.
Backtest Review
- Sharpe
- -7.28
- Total return
- -100.00%
- Max drawdown
- 100.00%
- Trades
- 5496
- Win rate
- 5.7%
- Profit factor
- 0.27
The mechanism runs as specified: symmetric SMA ±1% band crossings (2688 long / 2808 short), with the bracket stop/target and the time stop all firing. Input data is clean.
Large sample: 5,496 closed positions from 2021 to 2026.
Each trade loses on average, whatever the position size: mean pnl_pct is -0.524% against the +0.15% BYBIT review floor. It is -0.494% before the 2021-05-29 liquidation and -0.526% after it.
The payoff can't work: win rate is 5.66%, the average win is +3.47% and the average loss is -0.76% (PF 0.274). Breakeven needs about 18% winners.
A 0.4% stop on 15m DOT bars sits inside normal bar noise. The run had 80 losses in a row, and many trades were stopped out within one bar.
The account was liquidated after 71 days. The detail file still records trades after the liquidation date, which looks like an engine/accounting issue, but per-trade returns are equally negative before and after it.
Commissions are 54.7% of gross profit, plus $464k of modeled market impact.
QA's concern about sizing and the liquidation is partly confirmed: the liquidation and the trades recorded after it need an engine check. It does not change the verdict, because the loss shows up in per-trade % returns, which do not depend on position size.
Outcome Summary
Converting fixed pip distances to small fixed percentages put the stop inside 15m crypto bar noise (80 losses in a row, many stopped out within one bar), so a future version should test a volatility-scaled (ATR) stop on a higher timeframe.
The backtest review abandoned it before optimization for negative expectancy (no_edge). Per-trade returns were about equally negative before and after the liquidation (-0.494% vs -0.526%), so position sizing was not the cause, and the ratio-locked tuning range only allows a 0.3-0.6% stop, which sits inside normal 15m DOT bar noise.
A crypto adaptation of the MQL5 'eur/usd trend catcher' on DOTUSDT.BYBIT 15-minute bars: it entered long or short when price crossed a ±1% band around a 100-bar SMA, with a 0.4% stop and a 7% target that keep the source's 50:20:350 filter:stop:target ratio, plus a 960-bar time stop.
Over 5,496 closed positions from 2021-03-20 the account lost 100% and was liquidated on 2021-05-29, 71 days in. Sharpe was -7.28, profit factor 0.274, win rate 5.66% and mean net trade return -0.524% against the +0.15% floor; commissions were 54.7% of gross profit, on top of $464k of modeled market impact.
Analysis
eur/usd trend catcher
Backtest and paper results are hypothetical. Trading involves risk of loss.