Trading session filter (UTC time window)
Allow signals only within a specific UTC hour window. Filters out phases of poor liquidity (Asia low) or prevents trading in risky sessions.
Core idea
Not all trading hours are equal. Markets behave differently across sessions — volatility, spread, and trend quality vary strongly. A session filter restricts trading to defined UTC hours.
Trading sessions (UTC)
| Session | UTC | Character |
|---|---|---|
| Asia | 00:00 – 08:00 | Low liquidity, often ranging, manipulation spikes |
| London | 07:00 – 16:00 | High liquidity, strong trends possible |
| New York | 13:00 – 22:00 | Highest liquidity (US open 13:30 UTC) |
| London/NY overlap | 13:00–16:00 | Most intense trading |
Botty implementation
strategies/conditions.py → filter condition session_filter. Disabled at [0, 24) (default).
def _filter_session(df, latest, signal, **p):
start = p.get("session_hour_start", 0)
end = p.get("session_hour_end", 24)
if start == 0 and end >= 24:
return True # disabled
hour = latest["timestamp"].hour
return start <= hour < end # wrap-around is also supported
Parameters:
- session_hour_start (default: 0) — start time in UTC
- session_hour_end (default: 24) — end time in UTC
When to use it?
- Activate trend-following strategies only during London+NY
- Avoid the Asia session if a strategy produces many false signals in ranging markets
- Exclude certain high-impact news times (e.g. US open 13:30 UTC)
Adjusting for daylight saving time
Hyperliquid and Binance deliver UTC timestamps. No adjustment needed — UTC is consistent.