Skip to content
All strategies

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

Derived by the Research Lead from "eur/usd trend catcher" by MQL5 Code Base (library) https://www.mql5.com/en/code/10977: Retain the source's 15-minute filtered moving-average trend entry and 50:20:350 distance ratio; choose SMA settings, percentage scaling, symmetric directions, position sizing and bounded holding time. Adapt the moving-average trend-catching mechanism described by sergeyrar1 in the MQL5 Code Base to DOTUSDT.BYBIT using 15-minute bars. The source specifies a 50-pip noise filter, 20-pip stop and……Show moreShow less

Derived by the Research Lead from "eur/usd trend catcher" by MQL5 Code Base (library) https://www.mql5.com/en/code/10977: Retain the source's 15-minute filtered moving-average trend entry and 50:20:350 distance ratio; choose SMA settings, percentage scaling, symmetric directions, position sizing and bounded holding time. Adapt the moving-average trend-catching mechanism described by sergeyrar1 in the MQL5 Code Base to DOTUSDT.BYBIT using 15-minute bars. The source specifies a 50-pip noise filter, 20-pip stop and 350-pip target, but the supplied description leaves the moving-average settings and filter implementation unspecified. Complete these with a 100-bar SMA and crossings of percentage bands around it. Replace EUR/USD pip distances with crypto-relative distances while preserving the filter:stop:target ratio of 50:20:350; baseline distances are 1.0%, 0.4% and 7.0%. This tests a crypto adaptation, not a reproduction of the EUR/USD results. The attached figure shows rising balance/equity and increasing trade sizes, without price candles, indicator settings or marked entries; it provides no verified performance evidence. The downloadable MQ4 source could not be retrieved, so no claim of code-level fidelity is made. Entries execute at signal-bar close. Protective stops trigger intrabar in the platform; no exchange-hosted protection or selectable same-bar ordering is required.

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.