chore: initial project scaffold and gitignore

This commit is contained in:
2026-04-03 07:33:32 +00:00
commit 3e3acbd13d
41 changed files with 3658 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
"""Portfolio domain models."""
from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime
from typing import Any, Protocol, runtime_checkable
@dataclass
class StrategySet:
id: str
strategy_name: str
strategy_config: str
created_at: datetime | None = None
@dataclass
class Portfolio:
portfolio_id: str
broker: str
status: str
symbol: str
strategy_name: str
strategy_params: dict[str, Any] = field(default_factory=dict)
cash_balance: float = 0.0
asset_quantity: float = 0.0
price: float = 0.0
profit_buffer: float = 0.0
current_strategy_set_id: str | None = None
created_at: datetime | None = None
updated_at: datetime | None = None
last_trade_at: datetime | None = None
@dataclass
class LedgerEntry:
portfolio_id: str
recorded_at: datetime
action: str
price: float
quantity: float
cash_balance_after: float
asset_quantity_after: float
total_value_after: float
fee_amount: float = 0.0
tax_amount: float = 0.0
profit_buffer_after: float = 0.0
strategy_set_id: str = "legacy"
note: str = ""
@runtime_checkable
class LiveAssetSource(Protocol):
def get_asset_quantity(self, symbol: str) -> float: ...