Implements FastAPI backend with ML model support for energy trading, including price prediction models and RL-based battery trading policy. Features dashboard, trading, backtest, and settings API routes with WebSocket support for real-time updates.
37 lines
1019 B
Python
37 lines
1019 B
Python
from datetime import datetime, timedelta
|
|
from typing import Optional
|
|
import pytz
|
|
|
|
|
|
def utcnow() -> datetime:
|
|
"""Get current UTC datetime."""
|
|
return datetime.now(pytz.UTC)
|
|
|
|
|
|
def parse_date(date_str: str) -> datetime:
|
|
"""Parse date string to datetime."""
|
|
formats = ["%Y-%m-%d", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S"]
|
|
for fmt in formats:
|
|
try:
|
|
return datetime.strptime(date_str, fmt)
|
|
except ValueError:
|
|
continue
|
|
raise ValueError(f"Unable to parse date: {date_str}")
|
|
|
|
|
|
def format_timestamp(dt: datetime, format_str: str = "%Y-%m-%dT%H:%M:%S") -> str:
|
|
"""Format datetime to string."""
|
|
return dt.strftime(format_str)
|
|
|
|
|
|
def calculate_time_delta(start: datetime, end: datetime) -> timedelta:
|
|
"""Calculate time delta between two datetimes."""
|
|
return end - start
|
|
|
|
|
|
def safe_divide(a: float, b: float, default: float = 0.0) -> float:
|
|
"""Safely divide two numbers with default fallback."""
|
|
if b == 0:
|
|
return default
|
|
return a / b
|