← Back to list

weekend_momentum_doge VALIDATED PASS

Auto-discovered strategy

Symbol: DOGE | Exchange: Binance | Role: momentum

4/6
Profitable Years
+56.5%
Total Return
51.3%
Avg Win Rate
0.49
Avg Sharpe

Year-by-Year Results

Click a year to view chart

Year Return Win Rate Trades Max DD Sharpe
2020 +13.4% 57.9% 19 8.2% 0.73
2021 -1.9% 41.7% 12 18.8% -0.11
2022 +16.2% 53.8% 13 11.7% 1.03
2023 -21.4% 38.5% 26 27.8% -1.03
2024 +43.5% 70.4% 27 11.8% 2.00
2025 +6.7% 45.5% 22 15.1% 0.29

Performance Chart

Loading chart...

Walk-Forward Validation PASS

1/1 Windows Profitable
+14.7% OOS Return
0.00 Median Sharpe
0.000 Score
Window Train Period Val Period Val Return Val Test Period Test Return Status
WF-1 2024-01→2025-06 2025-07→2025-12 +14.7% OK 2026-01→ongoing +0.0% PASS

AI Review

Not yet reviewed. Run: ./review_strategy.sh weekend_momentum_doge

Source Code

"""
Weekend Momentum DOGE Strategy
==============================

Trades Thursday/Friday breakouts into weekend momentum.

DOGE tends to see momentum continuation from Thursday/Friday breakouts
into the weekend as retail traders get active.

Entry Conditions:
- Thursday or Friday only (weekday 3 or 4)
- Close breaks above 10-bar high (breakout)
- Close > EMA20 (above short-term trend)
- Green bar (close > open) confirms buying pressure
- Not overextended (close < EMA20 * 1.10)

Exit Conditions:
- Hold ~48 hours (12 x 4h bars) into Sunday
- Stop loss: 5%
- Take profit: 6%

Performance (Train + Validation):
- Total Return: +49.1% across 47 trades
- Train 2024: +43.5% (27 trades, 70% WR)
- Train 2025-H1: -9.0% (8 trades, bear market)
- Validation 2025-H2: +14.7% (12 trades, 58% WR)
- Top 3 concentration: 36.6% (well-diversified)

Role: Momentum (allowed to lose up to -15% in bear markets)
"""


def init_strategy():
    return {
        'name': 'weekend_momentum_doge',
        'role': 'momentum',
        'warmup': 100,
        'subscriptions': [
            {'symbol': 'DOGEUSDT', 'exchange': 'binance', 'timeframe': '4h'},
        ],
        'parameters': {
            'breakout_period': 10,
            'hold_bars': 12,
            'stop_loss_pct': 5,
            'take_profit_pct': 6,
        }
    }


def process_time_step(ctx):
    """
    Process each time step for weekend momentum strategy.

    Uses relative indicators only:
    - EMA20 for trend
    - 10-bar high for breakout
    - Green bar for momentum confirmation
    """
    from lib import ema

    key = ('DOGEUSDT', 'binance')
    bars = ctx['bars'][key]
    i = ctx['i']
    positions = ctx['positions']
    params = ctx['parameters']

    bar = bars[i]
    actions = []

    # Calculate EMA20
    closes = [b.close for b in bars[:i+1]]
    ema20 = ema(closes, 20)

    if key not in positions:
        # Entry logic
        day = bar.timestamp.weekday()

        # Thursday (3) or Friday (4) only
        if day not in [3, 4]:
            return []

        breakout_period = params.get('breakout_period', 10)

        if i < breakout_period:
            return []

        # 10-bar high breakout
        highs = [b.high for b in bars[:i]]
        high_n = max(highs[i-breakout_period:i])

        if bar.close <= high_n:
            return []

        # Above EMA20 (short-term trend)
        if ema20[i] is None or bar.close <= ema20[i]:
            return []

        # Green bar (buying pressure)
        if bar.close <= bar.open:
            return []

        # Not overextended (within 10% of EMA20)
        if bar.close > ema20[i] * 1.10:
            return []

        # All conditions met - open long
        actions.append({
            'action': 'open_long',
            'symbol': 'DOGEUSDT',
            'exchange': 'binance',
            'size': 1.0,
            'stop_loss_pct': params.get('stop_loss_pct', 5),
            'take_profit_pct': params.get('take_profit_pct', 6),
        })
    else:
        # Exit logic - time-based
        pos = positions[key]
        bars_held = i - pos.entry_bar
        hold_bars = params.get('hold_bars', 12)

        if bars_held >= hold_bars:
            actions.append({
                'action': 'close_long',
                'symbol': 'DOGEUSDT',
                'exchange': 'binance',
            })

    return actions