Trades Tuesday reversals after Monday selloffs. When Monday drops 1.5%+, Tuesday often reverses as weekly buyers step in. Holds until Friday to capture the rest of the weekly recovery.
Symbol: BTC | Exchange: Bitfinex
| Year | Return | Win Rate | Trades | Max DD | Sharpe |
|---|---|---|---|---|---|
| 2020 | +32.1% | 66.7% | 15 | 11.4% | 1.14 |
| 2021 | +23.5% | 65.4% | 26 | 24.0% | 0.69 |
| 2022 | +5.5% | 50.0% | 20 | 10.7% | 0.33 |
| 2023 | +11.9% | 81.8% | 11 | 4.0% | 1.56 |
| 2024 | +4.7% | 37.5% | 8 | 7.3% | 0.38 |
| 2025 | +4.0% | 53.8% | 13 | 10.8% | 0.30 |
See strategy file
See strategy file
"""
Strategy: tuesday_reversal_monday_dump
======================================
Trades Tuesday reversals after Monday selloffs. When Monday drops 1.5%+,
Tuesday often reverses as weekly buyers step in. Holds until Friday to
capture the rest of the weekly recovery.
Entry: Tuesday after Monday dropped 1.5%+, price recovers above Monday low,
not overextended (within 8% of 50 EMA)
Exit: Friday open
Performance: 6/6 years profitable | Total: +81.8%
2020: +32.1% | 67% WR | 15 trades
2021: +23.5% | 65% WR | 26 trades
2022: +5.5% | 50% WR | 20 trades
2023: +11.9% | 82% WR | 11 trades
2024: +4.7% | 38% WR | 8 trades
2025: +4.0% | 54% WR | 13 trades
"""
import sys
sys.path.insert(0, "/root/trade_rules")
from lib import ema
def init_strategy():
return {
'name': 'tuesday_reversal_monday_dump',
'subscriptions': [
{'symbol': 'tBTCUSD', 'exchange': 'bitfinex', 'timeframe': '4h'},
],
'parameters': {}
}
def process_time_step(ctx):
key = ('tBTCUSD', 'bitfinex')
bars = ctx['bars'].get(key, [])
i = ctx['i']
positions = ctx['positions']
if not bars or i >= len(bars) or i < 60:
return []
closes = [b.close for b in bars]
ema50 = ema(closes, 50)
if ema50[i] is None:
return []
actions = []
has_position = key in positions
if not has_position:
# Entry: Tuesday reversal after Monday dump
current = bars[i]
dow = current.timestamp.weekday()
# Must be Tuesday
if dow != 1:
return []
# Look back to Monday (~6 bars for 4h timeframe)
monday_idx = i - 6
if monday_idx < 1:
return []
monday = bars[monday_idx]
monday_prev = bars[monday_idx - 1] # Friday close
# Monday was down from Friday close by at least 1.5%
monday_change = (monday.close - monday_prev.close) / monday_prev.close * 100
if monday_change >= -1.5:
return []
# Tuesday is showing reversal (price above Monday low)
if current.close <= monday.low:
return []
# Not overextended - within 8% of 50 EMA
if current.close < ema50[i] * 0.92:
return []
actions.append({
'action': 'open_long',
'symbol': 'tBTCUSD',
'exchange': 'bitfinex',
'size': 1.0,
})
else:
# Exit on Friday (weekday = 4)
current = bars[i]
dow = current.timestamp.weekday()
if dow == 4:
actions.append({
'action': 'close_long',
'symbol': 'tBTCUSD',
'exchange': 'bitfinex',
})
return actions