- Introduced `train_daily.sh` for automating daily model retraining, including data download and model training steps. - Added `install_cron.sh` for setting up a cron job to run the daily training script. - Created `setup_schedule.sh` for configuring Systemd timers for daily training tasks. - Implemented a terminal UI using Rich for real-time monitoring of trading performance, including metrics display and log handling. - Updated `pyproject.toml` to include the `rich` dependency for UI functionality. - Enhanced `.gitignore` to exclude model and log files. - Added database support for trade persistence and metrics calculation. - Updated README with installation and usage instructions for the new features.
70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
"""Data models for trade persistence."""
|
|
from dataclasses import dataclass, asdict
|
|
from typing import Optional
|
|
from datetime import datetime
|
|
|
|
|
|
@dataclass
|
|
class Trade:
|
|
"""Represents a completed trade."""
|
|
|
|
trade_id: str
|
|
symbol: str
|
|
side: str
|
|
entry_price: float
|
|
size: float
|
|
size_usdt: float
|
|
entry_time: str
|
|
exit_price: Optional[float] = None
|
|
pnl_usd: Optional[float] = None
|
|
pnl_pct: Optional[float] = None
|
|
exit_time: Optional[str] = None
|
|
hold_duration_hours: Optional[float] = None
|
|
reason: Optional[str] = None
|
|
order_id_entry: Optional[str] = None
|
|
order_id_exit: Optional[str] = None
|
|
id: Optional[int] = None
|
|
|
|
def to_dict(self) -> dict:
|
|
"""Convert to dictionary."""
|
|
return asdict(self)
|
|
|
|
@classmethod
|
|
def from_row(cls, row: tuple, columns: list[str]) -> "Trade":
|
|
"""Create Trade from database row."""
|
|
data = dict(zip(columns, row))
|
|
return cls(**data)
|
|
|
|
|
|
@dataclass
|
|
class DailySummary:
|
|
"""Daily trading summary."""
|
|
|
|
date: str
|
|
total_trades: int = 0
|
|
winning_trades: int = 0
|
|
total_pnl_usd: float = 0.0
|
|
max_drawdown_usd: float = 0.0
|
|
id: Optional[int] = None
|
|
|
|
def to_dict(self) -> dict:
|
|
"""Convert to dictionary."""
|
|
return asdict(self)
|
|
|
|
|
|
@dataclass
|
|
class Session:
|
|
"""Trading session metadata."""
|
|
|
|
start_time: str
|
|
end_time: Optional[str] = None
|
|
starting_balance: Optional[float] = None
|
|
ending_balance: Optional[float] = None
|
|
total_pnl: Optional[float] = None
|
|
total_trades: int = 0
|
|
id: Optional[int] = None
|
|
|
|
def to_dict(self) -> dict:
|
|
"""Convert to dictionary."""
|
|
return asdict(self)
|