feat: add dynamic advisor asset allocation

This commit is contained in:
Windows
2026-09-11 14:44:29 +08:00
parent 8ffd08b4ce
commit ff71a1a724
15 changed files with 652 additions and 22 deletions
+54
View File
@@ -75,6 +75,60 @@ class AdvisorProductMetricSnapshot(Base):
created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
class AdvisorProductAssetClassification(Base):
__tablename__ = "advisor_product_asset_classification"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
product_id: Mapped[int] = mapped_column(BigInteger, nullable=False)
as_of_date: Mapped[date] = mapped_column(Date, nullable=False)
asset_class: Mapped[str] = mapped_column(String(32), nullable=False)
source: Mapped[str] = mapped_column(String(64), nullable=False)
status: Mapped[str] = mapped_column(String(16), nullable=False)
created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
updated_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
class AdvisorProductDataQualitySnapshot(Base):
__tablename__ = "advisor_product_data_quality_snapshot"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
product_id: Mapped[int] = mapped_column(BigInteger, nullable=False)
as_of_date: Mapped[date] = mapped_column(Date, nullable=False)
observation_count: Mapped[int] = mapped_column(BigInteger, nullable=False)
expected_trading_days: Mapped[int] = mapped_column(BigInteger, nullable=False)
price_coverage_pct: Mapped[Decimal] = mapped_column(Numeric(7, 4), nullable=False)
turnover_coverage_pct: Mapped[Decimal] = mapped_column(Numeric(7, 4), nullable=False)
max_abs_daily_return_pct: Mapped[Decimal | None] = mapped_column(Numeric(10, 4))
status: Mapped[str] = mapped_column(String(16), nullable=False)
reason_codes: Mapped[list[str]] = mapped_column(JSON, nullable=False)
rule_version: Mapped[str] = mapped_column(String(16), nullable=False)
created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
class AdvisorAllocationBacktestRun(Base):
__tablename__ = "advisor_allocation_backtest_run"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
backtest_no: Mapped[str] = mapped_column(String(36), unique=True, nullable=False)
started_on: Mapped[date] = mapped_column(Date, nullable=False)
ended_on: Mapped[date] = mapped_column(Date, nullable=False)
profile_risk_level: Mapped[str] = mapped_column(String(8), nullable=False)
return_target_lower_pct: Mapped[Decimal] = mapped_column(Numeric(7, 4), nullable=False)
max_drawdown_pct: Mapped[Decimal] = mapped_column(Numeric(7, 4), nullable=False)
liquidity_requirement: Mapped[str] = mapped_column(String(32), nullable=False)
status: Mapped[str] = mapped_column(String(32), nullable=False)
observation_count: Mapped[int] = mapped_column(BigInteger, nullable=False)
static_total_return_pct: Mapped[Decimal | None] = mapped_column(Numeric(12, 4))
dynamic_total_return_pct: Mapped[Decimal | None] = mapped_column(Numeric(12, 4))
static_max_drawdown_pct: Mapped[Decimal | None] = mapped_column(Numeric(12, 4))
dynamic_max_drawdown_pct: Mapped[Decimal | None] = mapped_column(Numeric(12, 4))
dynamic_rebalance_count: Mapped[int] = mapped_column(BigInteger, nullable=False)
liquidity_history_coverage_pct: Mapped[Decimal] = mapped_column(Numeric(7, 4), nullable=False)
limitations: Mapped[list[str]] = mapped_column(JSON, nullable=False)
strategy_version: Mapped[str] = mapped_column(String(32), nullable=False)
created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
class AdvisorProductSuitabilityReference(Base):
__tablename__ = "advisor_product_suitability_reference"