Bu5hm4nn
269745cd3e
fix: address PR review feedback for validation functions
...
1. Fix Friday logic edge case comment
- Clarified get_default_backtest_dates() docstring
- Removed confusing 'at least a week old' comment
- Explicitly documented Friday behavior
2. Reorder validation checks in validate_date_range_for_symbol()
- Now checks start > end first (most fundamental)
- Then checks end > today (future dates)
- Finally checks symbol-specific bounds
- Users get most actionable error first
3. Add server-side numeric bounds validation
- New validate_numeric_inputs() function
- Validates units > 0, loan >= 0, 0 < LTV < 1
- Called in run_backtest() before service call
4. Add boundary tests
- Test start_date exactly at SYMBOL_MIN_DATES boundary
- Test same-day date range (start == end)
- Test end_date exactly today
- Test end_date tomorrow (future)
- Test validation order returns most actionable error
- Test near-zero and large values for units calculation
- Test LTV at boundaries (0, 1, 0.01, 0.99)
5. Add tests for validate_numeric_inputs
- Valid inputs, zero/negative values
- LTV boundary conditions
2026-03-29 19:29:46 +02:00
Bu5hm4nn
f9ea7f0b67
fix: address PR review issues for event comparison and backtests
...
Critical fixes:
- Add validate_and_calculate_units() helper with proper error handling
- Handle division by zero for entry_spot in refresh_preview() and render_report()
- Add server-side validation for initial_value > 0
- Add try/except for derive_entry_spot() to handle fixture source limitations
Important improvements:
- Add dynamic default dates with get_default_backtest_dates()
- Add validate_date_range_for_symbol() for symbol-specific date bounds
- Add SYMBOL_MIN_DATES validation for backtests
- Update date_range_hint based on selected symbol
Tests:
- Add test_page_validation.py with 21 tests for:
- validate_and_calculate_units edge cases
- validate_date_range_for_symbol bounds checking
- get_default_backtest_dates dynamic generation
- SYMBOL_MIN_DATES constant verification
2026-03-29 18:45:29 +02:00
Bu5hm4nn
c2af363eef
feat(backtests): expand default date range to full Databento availability
...
- Changed default date range from 5 days (Jan 2024) to 2 years (2022-2023)
- Added SYMBOL_MIN_DATES constant documenting data availability per symbol
- GLD minimum date: 2004-11-18 (ETF launch)
- GC futures minimum date: 1974-01-01
- XAU index minimum date: 1970-01-01
- Added UI hint showing GLD data availability from ETF launch
- Users can now run backtests across the full historical range
2026-03-29 17:53:03 +02:00
Bu5hm4nn
853c80d3a2
feat(event-comparison): use initial portfolio value instead of underlying units
...
- Changed UI input from 'Underlying units' to 'Initial portfolio value ($)'
- Underlying units are now calculated as initial_value / entry_spot
- Updated default value to workspace gold_value instead of gold_ounces * entry_spot
- Result summary now shows both 'Initial value' and 'Underlying units'
- This allows users to specify how much they invest on day 1, and the system
automatically calculates the maximum purchasable shares/contracts
2026-03-29 16:12:33 +02:00
Bu5hm4nn
9a3b835c95
feat(DATA-DB-004): add Databento settings UI and independent scenario config
...
- Updated backtests page with Data Source card
- Data source selector (databento/yfinance/synthetic)
- Dataset dropdown (XNAS.BASIC, GLBX.MDP3)
- Resolution dropdown (ohlcv-1d, ohlcv-1h)
- Cost estimate display (placeholder for now)
- Added Scenario Configuration card
- Underlying symbol selector (GLD/GC/XAU)
- Start/end date inputs
- Start price input (0 = auto-derive)
- Underlying units, loan amount, margin call LTV
- BacktestPageService updates:
- get_historical_prices() with data_source parameter
- get_cost_estimate() for Databento cost estimation
- get_cache_stats() for cache status display
- Support for injected custom provider identity
- DataSourceInfo for provider metadata
- BacktestSettingsRepository integration:
- Load/save settings per workspace
- Default values from BacktestSettings.create_default()
- Test update: TLT validation message changed to reflect
new multi-symbol support (GLD, GC, XAU)
2026-03-29 11:12:11 +02:00
Bu5hm4nn
bb06fa7e80
feat(PORTFOLIO-003): add premium and spread for physical gold positions
2026-03-28 23:53:46 +01:00
Bu5hm4nn
0e972e9dd6
feat(PORTFOLIO-002): add position storage costs
2026-03-28 23:48:41 +01:00
Bu5hm4nn
63a8482753
feat(DISPLAY-002): GLD mode shows real share prices
2026-03-28 21:59:15 +01:00
Bu5hm4nn
dac0463d55
feat(DISPLAY-002): GLD mode shows real share prices
2026-03-28 21:45:00 +01:00
Bu5hm4nn
20f5086507
feat(DISPLAY-001): add underlying mode switching
2026-03-28 21:44:32 +01:00
Bu5hm4nn
1a39956757
feat(PORTFOLIO-001): add position-level portfolio entries
2026-03-28 21:29:30 +01:00
Bu5hm4nn
3b98ebae69
feat(DATA-004): add underlying instrument selector
2026-03-28 16:40:18 +01:00
Bu5hm4nn
9d06313480
feat(PRICING-002): add GLD/GC=F basis display on overview
2026-03-28 09:18:26 +01:00
Bu5hm4nn
4620234967
feat(EXEC-001): add hedge strategy builder
2026-03-27 22:33:20 +01:00
Bu5hm4nn
477514f838
feat(BT-002): add historical snapshot provider
2026-03-27 18:31:28 +01:00
Bu5hm4nn
1a6760bee3
feat(PORT-003): add historical ltv charts
2026-03-27 16:39:33 +01:00
Bu5hm4nn
3c9ff201e1
feat(BT-003B): add event comparison drilldown
2026-03-26 22:05:31 +01:00
Bu5hm4nn
ff76e326b1
feat(CORE-001D3B): surface alert history degraded state
2026-03-26 15:12:04 +01:00
Bu5hm4nn
09e03f96a8
chore(settings): drop unused last-saved helper
2026-03-26 15:05:28 +01:00
Bu5hm4nn
38d244356c
refactor(settings): separate preview validation from internal failures
2026-03-26 15:00:53 +01:00
Bu5hm4nn
e860c40567
fix(settings): reject fractional refresh intervals
2026-03-26 14:05:49 +01:00
Bu5hm4nn
2759d9a36f
fix(settings): track dirty state across all inputs
2026-03-26 13:59:56 +01:00
Bu5hm4nn
cfa3cfcc08
fix(settings): clarify last-saved status state
2026-03-26 13:54:56 +01:00
Bu5hm4nn
f7c134a709
fix(settings): preserve whole-dollar loan formatting
2026-03-26 13:34:34 +01:00
Bu5hm4nn
ea3b384103
fix(settings): fail closed on blank loan input
2026-03-26 13:28:30 +01:00
Bu5hm4nn
753e9d3146
fix(CORE-001D3A): accept decimal boundary inputs
2026-03-26 13:19:18 +01:00
Bu5hm4nn
f38d0a53a9
refactor(pre-alpha): fail closed on historical preview fallbacks
2026-03-26 11:55:45 +01:00
Bu5hm4nn
4eec0127da
fix(UX-001): reconcile preview validation behavior
2026-03-26 10:39:03 +01:00
Bu5hm4nn
82e52f7162
fix(UX-001): tighten historical stale state handling
2026-03-26 10:32:05 +01:00
Bu5hm4nn
78de8782c4
fix(UX-001): address layout review findings
2026-03-26 10:24:52 +01:00
Bu5hm4nn
a60c5fb1f2
feat(UX-001): add full-width two-pane dashboard layout
2026-03-25 23:19:09 +01:00
Bu5hm4nn
87900b01bf
fix(CORE-002C): align historical units with workspace weight
2026-03-25 21:37:55 +01:00
Bu5hm4nn
bfb6c71be3
fix(pricing): correct relative hedge payoff calculations
2026-03-25 19:27:26 +01:00
Bu5hm4nn
829c0b5da2
feat(CORE-002B): roll out hedge quote unit conversion
2026-03-25 15:46:44 +01:00
Bu5hm4nn
f0d7ab5748
feat(CORE-002): add GLD share quote conversion seam
2026-03-25 14:52:48 +01:00
Bu5hm4nn
132aaed512
feat(CORE-001D1): harden unit-aware workspace persistence
2026-03-25 13:19:33 +01:00
Bu5hm4nn
40f7e74a1b
feat(SEC-001): protect workspace bootstrap with turnstile
2026-03-25 10:02:10 +01:00
Bu5hm4nn
c7c8654be7
feat(CORE-001C): type historical unit materialization
2026-03-24 22:30:36 +01:00
Bu5hm4nn
7c2729485c
feat(CORE-001B): migrate overview and hedge math to unit types
2026-03-24 21:57:40 +01:00
Bu5hm4nn
5ac66ea97b
feat(PORT-004C): seed workspace routes from portfolio settings
2026-03-24 21:14:09 +01:00
Bu5hm4nn
2cbe4f274d
fix: restore workspace nav and correct overview spot fallback
2026-03-24 20:54:45 +01:00
Bu5hm4nn
75f8e0a282
feat(PORT-004A): add workspace bootstrap and scoped settings
2026-03-24 20:18:12 +01:00
Bu5hm4nn
24de006adb
feat: show hedge starting position summary
2026-03-24 19:36:37 +01:00
Bu5hm4nn
021ce7dd99
fix: anchor hedge contribution bars at zero
2026-03-24 19:34:41 +01:00
Bu5hm4nn
98ecfb735e
fix: correct hedge equity math at downside scenarios
2026-03-24 19:31:13 +01:00
Bu5hm4nn
ff4e565ee6
feat(BT-003A): add event comparison page
2026-03-24 19:20:35 +01:00
Bu5hm4nn
d2d85bccdb
feat(BT-001A): add backtest scenario runner page
2026-03-24 19:00:22 +01:00
Bu5hm4nn
2161e10626
feat(EXEC-001A): add named strategy templates
2026-03-24 12:27:39 +01:00
Bu5hm4nn
d0b1304b71
feat(PORT-002): add alert status and history
2026-03-24 11:04:32 +01:00
Bu5hm4nn
56e84680e8
feat(PORT-001A): add collateral entry basis settings
2026-03-24 00:38:13 +01:00