Add FastAPI backend for energy trading system
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.
This commit is contained in:
145
backend/app/models/schemas.py
Normal file
145
backend/app/models/schemas.py
Normal file
@@ -0,0 +1,145 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional, List, Dict, Any
|
||||
from pydantic import BaseModel, Field
|
||||
from app.models.enums import (
|
||||
RegionEnum,
|
||||
StrategyEnum,
|
||||
TradeTypeEnum,
|
||||
BacktestStatusEnum,
|
||||
ModelType,
|
||||
AlertTypeEnum,
|
||||
TrainingStatusEnum,
|
||||
)
|
||||
|
||||
|
||||
class PriceData(BaseModel):
|
||||
timestamp: datetime
|
||||
region: RegionEnum
|
||||
day_ahead_price: float
|
||||
real_time_price: float
|
||||
volume_mw: float
|
||||
|
||||
|
||||
class BatteryState(BaseModel):
|
||||
timestamp: datetime
|
||||
battery_id: str
|
||||
capacity_mwh: float
|
||||
charge_level_mwh: float
|
||||
charge_rate_mw: float
|
||||
discharge_rate_mw: float
|
||||
efficiency: float
|
||||
charge_level_pct: float = Field(default_factory=lambda: 0.0)
|
||||
|
||||
|
||||
class BacktestConfig(BaseModel):
|
||||
start_date: str
|
||||
end_date: str
|
||||
strategies: List[StrategyEnum] = Field(default_factory=list)
|
||||
use_ml: bool = True
|
||||
battery_min_reserve: Optional[float] = None
|
||||
battery_max_charge: Optional[float] = None
|
||||
arbitrage_min_spread: Optional[float] = None
|
||||
|
||||
|
||||
class BacktestMetrics(BaseModel):
|
||||
total_revenue: float
|
||||
arbitrage_profit: float
|
||||
battery_revenue: float
|
||||
mining_profit: float
|
||||
battery_utilization: float
|
||||
price_capture_rate: float
|
||||
win_rate: float
|
||||
sharpe_ratio: float
|
||||
max_drawdown: float
|
||||
total_trades: int
|
||||
|
||||
|
||||
class TrainingRequest(BaseModel):
|
||||
model_type: ModelType
|
||||
horizon: Optional[int] = None
|
||||
start_date: str
|
||||
end_date: str
|
||||
hyperparameters: Dict[str, Any] = Field(default_factory=dict)
|
||||
|
||||
|
||||
class PredictionResponse(BaseModel):
|
||||
model_id: str
|
||||
timestamp: datetime
|
||||
prediction: float
|
||||
confidence: Optional[float] = None
|
||||
features_used: List[str] = Field(default_factory=list)
|
||||
|
||||
|
||||
class ModelInfo(BaseModel):
|
||||
model_id: str
|
||||
model_type: ModelType
|
||||
version: str
|
||||
created_at: datetime
|
||||
metrics: Dict[str, float] = Field(default_factory=dict)
|
||||
hyperparameters: Dict[str, Any] = Field(default_factory=dict)
|
||||
|
||||
|
||||
class TrainingStatus(BaseModel):
|
||||
training_id: str
|
||||
status: TrainingStatusEnum
|
||||
progress: float = 0.0
|
||||
current_epoch: Optional[int] = None
|
||||
total_epochs: Optional[int] = None
|
||||
metrics: Dict[str, float] = Field(default_factory=dict)
|
||||
error_message: Optional[str] = None
|
||||
started_at: Optional[datetime] = None
|
||||
completed_at: Optional[datetime] = None
|
||||
|
||||
|
||||
class ArbitrageOpportunity(BaseModel):
|
||||
timestamp: datetime
|
||||
buy_region: RegionEnum
|
||||
sell_region: RegionEnum
|
||||
buy_price: float
|
||||
sell_price: float
|
||||
spread: float
|
||||
volume_mw: float
|
||||
|
||||
|
||||
class DashboardSummary(BaseModel):
|
||||
latest_timestamp: datetime
|
||||
total_volume_mw: float
|
||||
avg_realtime_price: float
|
||||
arbitrage_count: int
|
||||
battery_count: int
|
||||
avg_battery_charge: float
|
||||
|
||||
|
||||
class Trade(BaseModel):
|
||||
timestamp: datetime
|
||||
backtest_id: str
|
||||
trade_type: TradeTypeEnum
|
||||
region: Optional[RegionEnum] = None
|
||||
price: float
|
||||
volume_mw: float
|
||||
revenue: float
|
||||
battery_id: Optional[str] = None
|
||||
|
||||
|
||||
class StrategyStatus(BaseModel):
|
||||
strategy: StrategyEnum
|
||||
enabled: bool
|
||||
last_execution: Optional[datetime] = None
|
||||
total_trades: int = 0
|
||||
profit_loss: float = 0.0
|
||||
|
||||
|
||||
class Alert(BaseModel):
|
||||
alert_id: str
|
||||
alert_type: AlertTypeEnum
|
||||
timestamp: datetime
|
||||
message: str
|
||||
data: Dict[str, Any] = Field(default_factory=dict)
|
||||
acknowledged: bool = False
|
||||
|
||||
|
||||
class AppSettings(BaseModel):
|
||||
battery_min_reserve: float
|
||||
battery_max_charge: float
|
||||
arbitrage_min_spread: float
|
||||
mining_margin_threshold: float
|
||||
Reference in New Issue
Block a user