Auto-discovered strategy
Symbol: DOGE | Exchange: Binance | Role: momentum
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 |
| 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 |
Not yet reviewed. Run: ./review_strategy.sh weekend_momentum_doge
"""
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