feat: add Portfolio Value, Option Value, and Contracts columns to daily results

- Add option_contracts field to BacktestDailyPoint (number of contracts held)
- Update engine to calculate total option contracts from positions
- Update job serialization to include underlying_value, option_market_value, net_portfolio_value, option_contracts
- Update both render_result and render_job_result tables to show:
  - Low, High, Close (from previous commit)
  - Portfolio value (net_portfolio_value)
  - Option value (option_market_value)
  - Contracts (option_contracts)
  - LTV hedged
  - Margin call status
This commit is contained in:
Bu5hm4nn
2026-04-05 08:54:38 +02:00
parent 7a7b191a6d
commit 6b8336ab7e
4 changed files with 69 additions and 1 deletions

View File

@@ -87,6 +87,9 @@ class SyntheticBacktestEngine:
ltv_unhedged_worst = scenario.initial_portfolio.loan_amount / underlying_value_worst
ltv_hedged_worst = scenario.initial_portfolio.loan_amount / net_portfolio_value_worst
# Total option contracts held
option_contracts = sum(p.quantity for p in open_positions)
daily_points.append(
BacktestDailyPoint(
date=day.date,
@@ -103,6 +106,7 @@ class SyntheticBacktestEngine:
ltv_hedged=ltv_hedged,
margin_call_unhedged=ltv_unhedged_worst >= scenario.initial_portfolio.margin_call_ltv,
margin_call_hedged=ltv_hedged_worst >= scenario.initial_portfolio.margin_call_ltv,
option_contracts=option_contracts,
active_position_ids=tuple(active_position_ids),
)
)