alpha-visualizer 1.3.2__tar.gz → 1.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- alpha_visualizer-1.3.2/.hypothesis/constants/a143537c99265376 → alpha_visualizer-1.3.4/.hypothesis/constants/3039d4d1f0d58a79 +1 -1
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CHANGELOG.md +18 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/PKG-INFO +1 -1
- alpha_visualizer-1.3.4/docs/screenshots/en/backtest-tv.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/en/browse.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/en/compare-heatmap.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/en/detail.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/en/ideas.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/en/live.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/en/optimize.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/en/strategy-signal-tv.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/ja/backtest-tv.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/ja/browse.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/ja/compare-heatmap.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/ja/detail.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/ja/ideas.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/ja/live.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/ja/optimize.png +0 -0
- alpha_visualizer-1.3.4/docs/screenshots/ja/strategy-signal-tv.png +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/openapi.json +1 -1
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/EquityDrawdownPaneTV.tsx +91 -13
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/EquityDrawdownPaneTV.test.tsx +112 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/LivePositionView.tsx +27 -3
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/LivePositionView.test.tsx +56 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/pyproject.toml +2 -2
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/__init__.py +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/BrowsePage-BtjWf_pg.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/BrowsePage-BEPv8i_r.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/BrowsePage-BtjWf_pg.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/BrowsePage-BEPv8i_r.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ChartDataTable-B_PMsr6F.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ChartDataTable-dR4i0xte.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ChartDataTable-B_PMsr6F.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ChartDataTable-dR4i0xte.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ComparePage-BQLtkozx.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ComparePage-BXYzurL5.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ComparePage-BQLtkozx.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ComparePage-BXYzurL5.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/DetailPage-DkgwWfN1.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/DetailPage-CYYypa9D.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/DetailPage-DkgwWfN1.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/DetailPage-CYYypa9D.js.map +1 -1
- alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-CKE4ZeC_.js +2 -0
- alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-CKE4ZeC_.js.map +1 -0
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/IdeasPage-CZt2Um3Q.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/IdeasPage-Bs7yfwo7.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/IdeasPage-CZt2Um3Q.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/IdeasPage-Bs7yfwo7.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LivePage-nyToYYsN.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/LivePage-DUYLKDB7.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LivePage-nyToYYsN.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/LivePage-DUYLKDB7.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LiveTab-CB_3VlBE.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/LiveTab-DXzJxU14.js +2 -2
- alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/LiveTab-DXzJxU14.js.map +1 -0
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MaintenancePage-B2IUJ3dt.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/MaintenancePage-DPViJS0Q.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MaintenancePage-B2IUJ3dt.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/MaintenancePage-DPViJS0Q.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-BXEamLE3.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-8oDntE_g.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-BXEamLE3.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-8oDntE_g.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReportPage-izblXE1Q.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ReportPage-BTyui937.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReportPage-izblXE1Q.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ReportPage-BTyui937.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReturnDistributionChart-D69B-itS.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ReturnDistributionChart-CN6C-pWs.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReturnDistributionChart-D69B-itS.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ReturnDistributionChart-CN6C-pWs.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunLogDetails-CG22uYt8.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/RunLogDetails-C4662i4B.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunLogDetails-CG22uYt8.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/RunLogDetails-C4662i4B.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunsPage-CXsBfoVg.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/RunsPage--P5KB6Aw.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunsPage-CXsBfoVg.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/RunsPage--P5KB6Aw.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/SettingsToggles-tt-Rmlqz.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/SettingsToggles-DPZul5Ek.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/SettingsToggles-tt-Rmlqz.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/SettingsToggles-DPZul5Ek.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ShareCardButton-DEt_rFr8.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ShareCardButton-Bt6mrRao.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ShareCardButton-DEt_rFr8.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/ShareCardButton-Bt6mrRao.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/errorMessage-CogRMclS.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/errorMessage-DlX-ZPy3.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/errorMessage-CogRMclS.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/errorMessage-DlX-ZPy3.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/index-CSTPOquK.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/index-DsjiJ9NK.js +3 -3
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/index-CSTPOquK.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/index-DsjiJ9NK.js.map +1 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/useBacktestData-BcRTA3hv.js → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/useBacktestData-B31tpHTO.js +2 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/useBacktestData-BcRTA3hv.js.map → alpha_visualizer-1.3.4/src/alpha_visualizer/static/assets/useBacktestData-B31tpHTO.js.map +1 -1
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/index.html +1 -1
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/uv.lock +1 -1
- alpha_visualizer-1.3.2/docs/screenshots/en/backtest-tv.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/en/browse.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/en/compare-heatmap.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/en/detail.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/en/ideas.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/en/live.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/en/optimize.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/en/strategy-signal-tv.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/ja/backtest-tv.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/ja/browse.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/ja/compare-heatmap.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/ja/detail.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/ja/ideas.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/ja/live.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/ja/optimize.png +0 -0
- alpha_visualizer-1.3.2/docs/screenshots/ja/strategy-signal-tv.png +0 -0
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-BqqjTDsR.js +0 -2
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-BqqjTDsR.js.map +0 -1
- alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LiveTab-CB_3VlBE.js.map +0 -1
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.agents/skills/source-command-audit-licenses/SKILL.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.agents/skills/source-command-pre-release/SKILL.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.claude/commands/audit-licenses.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.claude/commands/pre-release.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.codex/hooks.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/bug_report_ja.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/ISSUE_TEMPLATE/feature_request_ja.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/codeql/README.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/codeql/codeql-config.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/dependabot.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/workflows/ci.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/workflows/codeql.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/workflows/lighthouse.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.github/workflows/release.yml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.gitignore +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/.gitignore +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/0bf3463e8f4751b8 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/0caad6595136948b +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/184fa6728d185660 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/296b8092179c9f55 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/312a7aaf12a1fd47 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/316886ef98081ce9 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/331e194303817b32 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/36df1978b70731f9 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/43f703bafb1e4b04 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4577b97f57a8a832 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4726660442f99a00 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4a1c4d1532cab28e +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4b255f25d1067b71 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/4fd44198986300fe +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/508b282112ab038e +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/5320b01940d4c4ce +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/59c16b30deb5c037 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/5c80be020ed7a646 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/5c9eb073058f11a0 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/5fca39058ed3753e +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/64f671cc8bd3c7e4 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/6abf3e9a1356666c +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/707dd0d075295200 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/757b1f8305546439 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/7cea79ac6c0799bb +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/7f90c9d611001617 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/8d9ea99caee79fd4 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/906238816b505c1e +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/98d0c8b0e6532609 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/99c8a89c4a9a7859 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/9c2871fc1ddbab71 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/a636a4647020033d +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/ab4df659c6b192db +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/acddbf8018c5d884 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/af039261f357a5c1 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/b5541576e1e9aea7 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/b6221357177fc116 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/b9ff5bcd3a53e3a7 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/bfd4c6ca4462fe73 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/c4312fe8499bc1f7 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/c5349cb90ddc7968 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/d34317036474de6e +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/da39a3ee5e6b4b0d +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/dbe657c7851479a7 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/e41b0128c49db70e +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/e44a457d795e56c2 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/e52ef865e1fc122f +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/ea2d606acbfff989 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/eed5e66c16ae84b8 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/f7c4a04c97c0daf8 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/fa443af6269a6e02 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/fa54b8596401d232 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/.hypothesis/constants/ff4517cbfe51fea1 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/AGENTS.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CLAUDE.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CODE_OF_CONDUCT.en.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CODE_OF_CONDUCT.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CONTRIBUTING.en.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/CONTRIBUTING.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/LICENSE +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/NOTICE +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/README.en.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/README.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/SECURITY.en.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/SECURITY.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/THIRDPARTY_LICENSES.txt +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/cliff.toml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/adr/0001-pages-vs-screens.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/adr/0002-charts-visx-vs-components.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/adr/0003-openapi-typescript-codegen.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/adr/0004-condition-node-discriminated-union.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/lighthouse-ci.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/screenshots/en/compare.png +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/screenshots/en/strategy.png +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/screenshots/ja/compare.png +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/screenshots/ja/strategy.png +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/plans/2026-07-25-live-equity-rich.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/plans/2026-07-26-browse-recipe-rollup.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/plans/2026-07-27-browse-symbol-coverage.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/plans/2026-07-27-maintenance-orphan-runs.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/specs/2026-07-25-live-equity-rich-design.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/specs/2026-07-26-browse-recipe-rollup-design.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/specs/2026-07-27-browse-symbol-coverage-design.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/docs/superpowers/specs/2026-07-27-maintenance-orphan-runs-design.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.gitignore +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.npmrc +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.size-limit.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.storybook/main.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/.storybook/preview.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/CLAUDE.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/README.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/THIRDPARTY_FONTS.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/README.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/historical/SPY_1d.parquet +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/ideas/ideas.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/results/backtest_results.db +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/dual_symbol_qqq.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/dual_symbol_spy.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/ema_trend_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/ema_trend_v2.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/ema_trend_v3.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/idle_recipe_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/idle_recipe_v2.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/momo_breakout.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/no_symbol_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/rsi_reversal.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/data/strategies/sma_cross.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/fixtures/forge/forge.yaml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/helpers/locators.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/samples/sample-fixture.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/screenshots/capture.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/screenshots/equity-tv.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/screenshots/strategy-signal-tv.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/browse.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/compare.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/detail.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/i18n.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/maintenance.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/specs/share.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/visual/README.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/visual/__snapshots__/linux/equity-drawdown-tv.png +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/visual/__snapshots__/linux/strategy-signal-tv.png +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/e2e/visual/tv-charts.spec.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/eslint.config.js +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/index.html +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/package.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/playwright.config.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/playwright.samples.config.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/playwright.screenshots.config.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/playwright.visual.config.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/pnpm-lock.yaml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/pnpm-workspace.yaml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/public/favicon.svg +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/public/icons.svg +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/api/__tests__/client.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/api/client.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/api/types.gen.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/api/types.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/CompareEquityTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/CompareEquityTV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/EquityDrawdownPaneTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/RollingMetricsChartTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/RollingMetricsChartTV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/StrategySignalChartTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/StrategySignalChartTV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/WFOEquityTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/WFOEquityTV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/CompareEquityTV.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/RollingMetricsChartTV.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/StrategySignalChartTV.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/WFOEquityTV.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/data.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/regimeBands.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/theme.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/__tests__/trades.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/data.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/regimeBands.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/theme.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/trades.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/AnnualReturnsBarV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/CorrelationHeatmapV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/MAEMFEScatterV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/MonthlyHeatmapV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/OptimizeHeatmapV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/OptimizeScatterV.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/Sparkline.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/visx/Sparkline.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/AppFooter.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/AppNav.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/CommandPalette.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/ConfirmActionButton.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/DetailToolbar.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/MetricsSummaryBarV2.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/MetricsSummaryBarV2.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/RootLayout.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/RouteErrorScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/RunLogDetails.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/SettingsToggles.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/ShareCardButton.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/StrategyHero.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/AppFooter.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/AppNav.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/CommandPalette.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/CorrelationHeatmap.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/MetricsSummaryBarV2.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/RootLayout.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/RouteErrorScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/SettingsToggles.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/ShareCardButton.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/ShareCardXButton.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/__tests__/responsive-styles.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/CollapsibleSection.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/CompareFloatingBar.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/CreateStrategyEntry.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/FilterBar.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/GroupByToggle.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/Heroline.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/RecipeRow.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/RunCompareView.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/RunHistoryTab.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/SavedViews.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/StrategyRow.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/StrategySlidePanel.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/StrategyTable.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/StrategyTableFooter.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/SymbolCoverageTable.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/CollapsibleSection.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/CreateStrategyEntry.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/FilterBar.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/RecipeRow.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/RunCompareView.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/RunHistoryTab.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/StrategyRow.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/StrategySlidePanel.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/StrategyTable.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/StrategyTableFooter.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/browser/__tests__/SymbolCoverageTable.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/AnnualReturnsBar.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/AnnualSummaryTable.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/CorrelationHeatmap.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/DrawdownDetailChart.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/HoldingPeriodChart.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/MAEMFEScatter.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/MonteCarloChart.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/OptimizeHeatmap.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/OptimizeScatter.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/ReturnDistributionChart.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/VaRChart.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/WFOTimeline.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/WeekdayPerformanceChart.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/__tests__/AnnualSummaryTable.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/__tests__/HoldingPeriodChart.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/charts/__tests__/MonteCarloChart.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/jobs/JobRunnerCard.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/LiveKpiRow.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/LivePositionsTable.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/LiveTab.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/SummaryCard.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/LiveKpiRow.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/LivePositionsTable.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/LiveTab.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/__tests__/format.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/format.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/CarryAdjustedCard.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/CompareTable.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/ISOOSMetrics.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/MetricInfoTip.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/MetricsGrid.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/PortfolioComposer.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/RegimeBreakdownCards.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/SignalQualityBadge.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/SubperiodMetrics.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/CompareTable.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/MetricInfoTip.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/MetricsGrid.hidden.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/MetricsGrid.sentinel.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/MetricsGrid.tooltip.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/SignalQualityBadge.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/SubperiodMetrics.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/__tests__/evaluateGood.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/metrics/evaluate.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/trades/TradeTable.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/trades/__tests__/TradeTable.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/tuning/DuplicateStrategyCard.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/tuning/TuningPanel.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/tuning/__tests__/DuplicateStrategyCard.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/tuning/__tests__/TuningPanel.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/constants/__tests__/metricDefinitions.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/constants/helpLinks.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/constants/metricDefinitions.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/constants/runSource.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/contexts/DashboardContext.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/contexts/dashboardConstants.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/__tests__/definedTokens.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/__tests__/noHardcodedColors.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/__tests__/tokens.contrast.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/a11y.css +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Button.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Card.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/ChartDataTable.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Chip.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/ConfirmDialog.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Divider.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/ErrorBanner.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/KeyValue.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Loading.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/OverflowMenu.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Pill.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Pill.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/SectionHeader.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/SortHeaderCell.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Stat.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Stat.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/TabBar.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/Toolbar.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/ChartDataTable.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/ConfirmDialog.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/ErrorBanner.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/Loading.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/OverflowMenu.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/Pill.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/SortHeaderCell.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/__tests__/TabBar.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/index.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/primitives/srOnly.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/tokens.css +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/design/useChartTheme.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useDocumentTitle.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useEquityViewport.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useFetchByKey.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useJobRunner.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useLiveAvailability.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useOrphanRuns.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useRunBacktest.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useScrollRestoration.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useSparklineCache.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useStarredStrategies.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useStrategyHistorical.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useStrategyList.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useSyncedTimeRange.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useTheme.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useViewerSettings.lang.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/__tests__/useViewerSettings.shared.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useBacktestData.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useDebounce.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useDocumentTitle.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useEquityViewport.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useFetchByKey.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useIdeasList.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useJobRunner.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useLiveAvailability.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useLiveList.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useOrphanRuns.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useRecentStrategies.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useScrollRestoration.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useSparklineCache.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useStarredStrategies.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useStrategyHistorical.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useStrategyList.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useSyncedTimeRange.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/hooks/useTheme.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/i18n/__tests__/strings.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/i18n/strings.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/annualSummary.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/benchmark.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/bestSharpe.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/correlation.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/distribution.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/drawdown.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/errorMessage.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/format.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/holdingPeriod.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/liveEquity.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/metricLabel.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/monteCarlo.properties.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/monteCarlo.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/optimizeHeatmap.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/paramImportance.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/portfolio.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/recipes.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/rolling.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/searchParams.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/searchStrategies.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/sentinel.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/shareCard.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/shareCardMulti.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/shareTweet.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/subperiod.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/symbolStats.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/walkForward.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/__tests__/weekday.test.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/annualSummary.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/assetClass.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/benchmark.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/bestSharpe.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/correlation.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/csv.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/distribution.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/drawdown.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/errorMessage.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/exportPng.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/format.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/holdingPeriod.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/liveEquity.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/metricLabel.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/monteCarlo.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/optimizeHeatmap.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/paramImportance.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/portfolio.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/recipes.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/rolling.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/searchParams.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/searchStrategies.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/sentinel.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/shareCard.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/shareTweet.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/subperiod.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/symbolStats.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/walkForward.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/lib/weekday.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/main.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/mock/btData.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/BrowsePage.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/ComparePage.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/DetailPage.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/IdeasPage.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/LivePage.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/MaintenancePage.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/ReportPage.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/RunsPage.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/BrowsePage.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/ComparePage.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/DetailPage.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/MaintenancePage.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/ReportPage.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/pages/__tests__/RunsPage.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/router.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/BacktestScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/BacktestScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/BrowseScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/CompareScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/CompareScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/ISOOSScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/IdeasScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/IdeasScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/LiveScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/LiveScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/MaintenanceScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/OptimizeScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/OptimizeScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/StrategyScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/WFOScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/WFOScreen.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/BacktestScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/CompareScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/ISOOSScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/LiveScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/MaintenanceScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/OptimizeScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/__tests__/WFOScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/screens/strategy/SignalChartCard.tsx +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/test-setup.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/tsconfig.app.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/tsconfig.e2e.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/tsconfig.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/tsconfig.node.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/vite.config.ts +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/lighthouserc.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/release.sh +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/README.en.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/README.md +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/compatibility_matrix.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/ideas_defs.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/pseudo_backtest.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/pseudo_grid.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/pseudo_wfo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/strategy_defs.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/synthetic_ohlcv.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/_generators/writers.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/build_samples.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/ideas/ideas.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/results/backtest_results.db +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/bbands_breakout_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/donchian_turtle_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/ema_adx_macd_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/macd_crossover_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/range_reversion_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/rsi_reversion_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/sma_crossover_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/data/strategies/supertrend_adx_v1.json +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/samples/sample-forge/forge.yaml +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/scripts/compare_sqlite_dump.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/scripts/generate_openapi.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/scripts/generate_thirdparty_js.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/scripts/verify_build_artifacts.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/app.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/cli.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/db.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/dependencies.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/errors.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/forge_config.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/log_sanitize.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/backtest_results.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/ideas.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/live.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/optimization.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/repositories/strategies.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/historical.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/ideas.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/jobs.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/live.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/maintenance.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/optimize.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/results.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/run.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/strategies.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/routers/wfo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/health.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/historical.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/ideas.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/live.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/maintenance.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/optimize.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/results.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/strategies.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/schemas/wfo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/backtest.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/forge_cli.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/historical.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/jobs.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/live.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/tuning.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/services/walk_forward.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/SortHeaderCell-CetYtnjX.js +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/SortHeaderCell-CetYtnjX.js.map +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/fonts-DJsrEZjK.css +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/format-D0fEne3x.js +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/format-D0fEne3x.js.map +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/index-ngPg-0Y0.css +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-BLrFJfvD.woff +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-iW8qmuJY.woff2 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-BFXNXuvF.woff2 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-pobXraBK.woff +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-BgSTtRxb.woff2 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-D7bG6gX1.woff +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/react-CuMkScR3.js +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/react-CuMkScR3.js.map +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/react-router-CU9OAEs1.js +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/react-router-CU9OAEs1.js.map +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/rolldown-runtime-C0phanGV.js +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DMD1h6_f.woff +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DouSKlru.woff2 +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/tv-D3Zm-VpQ.js +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/tv-D3Zm-VpQ.js.map +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/useDocumentTitle-DPighAM_.js +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/useDocumentTitle-DPighAM_.js.map +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/visx-HscrFEDZ.js +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/assets/visx-HscrFEDZ.js.map +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/favicon.svg +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/src/alpha_visualizer/static/icons.svg +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/conftest.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/factories.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/fixtures/build_e2e_fixture.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_backtest_results_repo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_ideas_reader.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_live_repo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_optimization_repo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/repositories/test_strategies_repo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_db_mode_write_paths.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_forge_yaml_integration.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_historical.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_ideas.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_jobs.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_live.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_maintenance.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_optimize.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_results.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_run.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_sparkline.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_strategies.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_strategies_source.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_strategy_duplicate.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_strategy_save.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/routers/test_wfo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_pseudo_backtest.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_pseudo_grid.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_pseudo_wfo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_sample_forge.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_strategy_defs.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_synthetic_ohlcv.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/samples/test_writers.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/schemas/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/schemas/test_schemas.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/__init__.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_backtest.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_backtest_properties.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_forge_cli.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_forge_failure_translation.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_historical.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_jobs.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_live.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_tuning.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/services/test_wfo.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_app.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_cli.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_compare_sqlite_dump.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_db.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_dependencies.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_errors.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_forge_config.py +0 -0
- {alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/tests/test_log_sanitize.py +0 -0
|
@@ -11,6 +11,24 @@ alpha-visualizer の全バージョン変更履歴です。
|
|
|
11
11
|
_(EN) Entries below are generated from Conventional Commits (Japanese). Group names: 新機能 = Features, バグ修正 = Bug fixes, リファクタリング = Refactoring, パフォーマンス改善 = Performance, ドキュメント = Docs, テスト = Tests, その他 = Chore. Breaking commits are tagged 破壊的変更._
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
## [1.3.3] - 2026-08-01
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### 新機能
|
|
18
|
+
|
|
19
|
+
- エクイティチャートに系列凡例を追加する (#463)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## [1.3.2] - 2026-08-01
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### 新機能
|
|
27
|
+
|
|
28
|
+
- EULA 未同意で forge が Abort した際に同意手順を案内する (#462)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
14
32
|
## [1.3.1] - 2026-08-01
|
|
15
33
|
|
|
16
34
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alpha-visualizer
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.4
|
|
4
4
|
Summary: Web visualization tool for AlphaForge backtest results
|
|
5
5
|
Project-URL: Homepage, https://github.com/alforge-labs/alpha-visualizer
|
|
6
6
|
Project-URL: Repository, https://github.com/alforge-labs/alpha-visualizer
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
{alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/charts/tv/EquityDrawdownPaneTV.tsx
RENAMED
|
@@ -45,6 +45,13 @@ export interface EquityOverlay {
|
|
|
45
45
|
dashed?: boolean
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
/** 凡例 1 件分。色・線種は対応する系列に実際に適用したものと同じ値を入れる。 */
|
|
49
|
+
interface SeriesLegendEntry {
|
|
50
|
+
label: string
|
|
51
|
+
color: string
|
|
52
|
+
dashed: boolean
|
|
53
|
+
}
|
|
54
|
+
|
|
48
55
|
export interface EquityDrawdownPaneTVProps {
|
|
49
56
|
equity: number[]
|
|
50
57
|
dates: string[]
|
|
@@ -54,6 +61,11 @@ export interface EquityDrawdownPaneTVProps {
|
|
|
54
61
|
showBenchmark?: boolean
|
|
55
62
|
/** equity と並走する追加比較系列(issue の多系列比較・任意本数) */
|
|
56
63
|
overlays?: EquityOverlay[]
|
|
64
|
+
/**
|
|
65
|
+
* 凡例に出す主系列(equity)の名前。主系列が何を指すかは画面ごとに違う
|
|
66
|
+
* (バックテスト = 戦略の成績 / ライブ = 実際の運用成績)ため呼び出し側が決める。
|
|
67
|
+
*/
|
|
68
|
+
equityLabel?: string
|
|
57
69
|
compact?: boolean
|
|
58
70
|
/** レジーム背景バンドの元データ(issue #317) */
|
|
59
71
|
regimeSeries?: RegimeSeries | null
|
|
@@ -78,6 +90,7 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
|
|
|
78
90
|
benchmark,
|
|
79
91
|
showBenchmark = false,
|
|
80
92
|
overlays,
|
|
93
|
+
equityLabel = 'Strategy',
|
|
81
94
|
compact = false,
|
|
82
95
|
regimeSeries,
|
|
83
96
|
showRegime = false,
|
|
@@ -113,6 +126,22 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
|
|
|
113
126
|
|
|
114
127
|
const overlayCount = overlays?.length ?? 0
|
|
115
128
|
|
|
129
|
+
/**
|
|
130
|
+
* overlay のラベル → パレット位置。**系列の生成と凡例が共有する唯一の割り当て**。
|
|
131
|
+
*
|
|
132
|
+
* 色は配列位置ではなく**ラベル**で決める。配列位置で決めると、ラベルはそのままで
|
|
133
|
+
* 並び順だけ変わったときに系列の色が入れ替わり、線の色で系列を識別している画面では
|
|
134
|
+
* 同じものが別物に見える。ソート済みユニークラベルの位置を使うことで、並び替えに
|
|
135
|
+
* 対して安定させる。
|
|
136
|
+
*
|
|
137
|
+
* ここを 1 箇所に集約するのは、凡例が系列と別ロジックで色を決めると両者が食い違う
|
|
138
|
+
* ため(凡例の存在価値は色と系列名の対応付けだけにあり、ずれた凡例は無いより悪い)。
|
|
139
|
+
*/
|
|
140
|
+
const overlayColorIndexByLabel = useMemo(() => {
|
|
141
|
+
const labels = [...new Set((overlays ?? []).map((o) => o.label))].sort()
|
|
142
|
+
return new Map(labels.map((label, idx) => [label, idx] as const))
|
|
143
|
+
}, [overlays])
|
|
144
|
+
|
|
116
145
|
const { equityData, benchmarkData, overlayData, drawdownData, markers } = useMemo(() => {
|
|
117
146
|
const conv = fromViewportPoints(points, overlayCount)
|
|
118
147
|
const ddSlicedDates = points.map((p) => p.date.toISOString().slice(0, 10))
|
|
@@ -240,16 +269,8 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
|
|
|
240
269
|
}
|
|
241
270
|
}
|
|
242
271
|
|
|
243
|
-
// 色は配列位置ではなく**ラベル**で決める。配列位置で決めると、ラベルは
|
|
244
|
-
// そのままで並び順だけ変わったときに系列の色が入れ替わり、線の色で系列を
|
|
245
|
-
// 識別している画面では同じものが別物に見える。ソート済みユニークラベルの
|
|
246
|
-
// 位置を使うことで、並び替えに対して安定させる。
|
|
247
|
-
const colorIndexByLabel = new Map(
|
|
248
|
-
[...wantedLabels].sort().map((label, idx) => [label, idx]),
|
|
249
|
-
)
|
|
250
|
-
|
|
251
272
|
wanted.forEach((overlay) => {
|
|
252
|
-
const colorIndex =
|
|
273
|
+
const colorIndex = overlayColorIndexByLabel.get(overlay.label) ?? 0
|
|
253
274
|
const options = overlayLineOptions(theme, colorIndex, overlay.color, overlay.dashed)
|
|
254
275
|
const existing = map.get(overlay.label)
|
|
255
276
|
if (existing) {
|
|
@@ -258,7 +279,7 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
|
|
|
258
279
|
map.set(overlay.label, chart.addSeries(LineSeries, options, 0))
|
|
259
280
|
}
|
|
260
281
|
})
|
|
261
|
-
}, [overlays, theme])
|
|
282
|
+
}, [overlays, overlayColorIndexByLabel, theme])
|
|
262
283
|
|
|
263
284
|
// issue #317: レジーム背景バンドの attach/detach。
|
|
264
285
|
// primitive は bands をクロージャに持つため、series/表示切替/テーマが変わったら
|
|
@@ -331,6 +352,50 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
|
|
|
331
352
|
)
|
|
332
353
|
|
|
333
354
|
// 凡例は DOM 側に描く(canvas 内に描くとテキスト検索・SR 到達性が失われるため)
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* equity + 比較系列の凡例。
|
|
358
|
+
*
|
|
359
|
+
* 比較系列が 1 本も無い画面(IS/OOS・レポート)では線が equity 1 本しかなく、
|
|
360
|
+
* 凡例は操作行を圧迫するだけなので出さない。色・線種は系列に渡すオプションを
|
|
361
|
+
* そのまま引くので、系列側の色決定を変えても凡例が置き去りにならない。
|
|
362
|
+
*/
|
|
363
|
+
const seriesLegend = useMemo<SeriesLegendEntry[]>(() => {
|
|
364
|
+
// 重複ラベルは系列側が label キーの Map で後勝ちに統合する。凡例だけ 2 件
|
|
365
|
+
// 並ぶと、描かれていない線が存在するように見えるので同じ規則で潰す。
|
|
366
|
+
const uniqueOverlays = [...new Map((overlays ?? []).map((o) => [o.label, o])).values()]
|
|
367
|
+
if (!showBenchmark && uniqueOverlays.length === 0) return []
|
|
368
|
+
|
|
369
|
+
const entries: SeriesLegendEntry[] = [
|
|
370
|
+
{
|
|
371
|
+
label: equityLabel,
|
|
372
|
+
color: equityAreaOptions(theme, isPositive).lineColor ?? theme.text3,
|
|
373
|
+
dashed: false,
|
|
374
|
+
},
|
|
375
|
+
]
|
|
376
|
+
if (showBenchmark) {
|
|
377
|
+
entries.push({
|
|
378
|
+
label: 'Buy & Hold',
|
|
379
|
+
color: benchmarkLineOptions(theme).color ?? theme.text3,
|
|
380
|
+
dashed: true,
|
|
381
|
+
})
|
|
382
|
+
}
|
|
383
|
+
for (const overlay of uniqueOverlays) {
|
|
384
|
+
const options = overlayLineOptions(
|
|
385
|
+
theme,
|
|
386
|
+
overlayColorIndexByLabel.get(overlay.label) ?? 0,
|
|
387
|
+
overlay.color,
|
|
388
|
+
overlay.dashed,
|
|
389
|
+
)
|
|
390
|
+
entries.push({
|
|
391
|
+
label: overlay.label,
|
|
392
|
+
color: options.color ?? theme.text3,
|
|
393
|
+
dashed: Boolean(overlay.dashed),
|
|
394
|
+
})
|
|
395
|
+
}
|
|
396
|
+
return entries
|
|
397
|
+
}, [overlays, overlayColorIndexByLabel, showBenchmark, equityLabel, theme, isPositive])
|
|
398
|
+
|
|
334
399
|
const regimeLegend = useMemo(() => {
|
|
335
400
|
if (!showRegime || !regimeSeries) return []
|
|
336
401
|
return createRegimeBandsPrimitive(regimeSeries, theme.series, REGIME_BAND_ALPHA).legend()
|
|
@@ -407,20 +472,33 @@ export function EquityDrawdownPaneTV(props: EquityDrawdownPaneTVProps) {
|
|
|
407
472
|
>
|
|
408
473
|
Log
|
|
409
474
|
</button>
|
|
410
|
-
{
|
|
475
|
+
{seriesLegend.length > 0 && (
|
|
411
476
|
<div
|
|
477
|
+
data-testid="series-legend"
|
|
412
478
|
style={{
|
|
413
479
|
marginLeft: 12,
|
|
414
480
|
display: 'flex',
|
|
415
481
|
gap: 12,
|
|
416
482
|
alignItems: 'center',
|
|
483
|
+
flexWrap: 'wrap',
|
|
417
484
|
fontFamily: 'var(--mono)',
|
|
418
485
|
fontSize: 'var(--fs-mono-sm)',
|
|
419
486
|
color: 'var(--text3)',
|
|
420
487
|
}}
|
|
421
488
|
>
|
|
422
|
-
|
|
423
|
-
|
|
489
|
+
{seriesLegend.map((e) => (
|
|
490
|
+
<span key={e.label} style={{ display: 'flex', alignItems: 'center', gap: 5 }}>
|
|
491
|
+
<span
|
|
492
|
+
data-testid={`series-legend-swatch-${e.label}`}
|
|
493
|
+
aria-hidden="true"
|
|
494
|
+
style={{
|
|
495
|
+
width: 16,
|
|
496
|
+
borderTop: `2px ${e.dashed ? 'dashed' : 'solid'} ${e.color}`,
|
|
497
|
+
}}
|
|
498
|
+
/>
|
|
499
|
+
{e.label}
|
|
500
|
+
</span>
|
|
501
|
+
))}
|
|
424
502
|
</div>
|
|
425
503
|
)}
|
|
426
504
|
{regimeLegend.length > 0 && (
|
|
@@ -596,3 +596,115 @@ describe('EquityDrawdownPaneTV log scale (issue #378)', () => {
|
|
|
596
596
|
)
|
|
597
597
|
})
|
|
598
598
|
})
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
* 系列凡例。ライブ画面は overlays(指数・バックテスト)で 3 本の線を重ねて描くが、
|
|
602
|
+
* 凡例が無いためどの線が何かを判別できなかった。
|
|
603
|
+
*/
|
|
604
|
+
describe('EquityDrawdownPaneTV series legend', () => {
|
|
605
|
+
const baseProps = {
|
|
606
|
+
lang: 'ja' as const,
|
|
607
|
+
equity: sampleEquity,
|
|
608
|
+
dates: sampleDates,
|
|
609
|
+
drawdown: sampleDrawdown,
|
|
610
|
+
isCutoffIdx: 15,
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
function overlayColors(): string[] {
|
|
614
|
+
return addSeriesMock.mock.calls
|
|
615
|
+
.filter((args) => (args as unknown[])[0] === 'LineSeriesDef')
|
|
616
|
+
.map((args) => ((args as unknown[])[1] as { color?: string }).color ?? '')
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
it('overlays の各ラベルを凡例に表示する', () => {
|
|
620
|
+
render(
|
|
621
|
+
<EquityDrawdownPaneTV
|
|
622
|
+
{...baseProps}
|
|
623
|
+
overlays={[
|
|
624
|
+
{ label: '指数(Buy & Hold)', values: sampleEquity },
|
|
625
|
+
{ label: 'バックテスト', values: sampleEquity, dashed: true },
|
|
626
|
+
]}
|
|
627
|
+
/>,
|
|
628
|
+
)
|
|
629
|
+
const legend = screen.getByTestId('series-legend')
|
|
630
|
+
expect(legend).toHaveTextContent('指数(Buy & Hold)')
|
|
631
|
+
expect(legend).toHaveTextContent('バックテスト')
|
|
632
|
+
})
|
|
633
|
+
|
|
634
|
+
it('凡例の色は実際に系列へ渡した色と一致する', () => {
|
|
635
|
+
// WHY: 凡例の存在価値は「線の色 → 系列名」の対応付けだけにある。色が
|
|
636
|
+
// 食い違った凡例は、無いより悪い(別系列を読み違えたまま判断される)。
|
|
637
|
+
// 実際、統合前の凡例は Strategy を theme.accent 固定で描いていたが、
|
|
638
|
+
// equity 線は success/danger で描かれており一致していなかった。
|
|
639
|
+
render(
|
|
640
|
+
<EquityDrawdownPaneTV
|
|
641
|
+
{...baseProps}
|
|
642
|
+
overlays={[
|
|
643
|
+
{ label: 'QQQ', values: sampleEquity },
|
|
644
|
+
{ label: 'BT', values: sampleEquity, dashed: true },
|
|
645
|
+
]}
|
|
646
|
+
/>,
|
|
647
|
+
)
|
|
648
|
+
const [qqqColor, btColor] = overlayColors()
|
|
649
|
+
expect(qqqColor).toBeTruthy()
|
|
650
|
+
expect(btColor).toBeTruthy()
|
|
651
|
+
|
|
652
|
+
const swatchOf = (label: string) =>
|
|
653
|
+
screen.getByTestId(`series-legend-swatch-${label}`)
|
|
654
|
+
expect(swatchOf('QQQ')).toHaveStyle({ borderTopColor: qqqColor })
|
|
655
|
+
expect(swatchOf('BT')).toHaveStyle({ borderTopColor: btColor })
|
|
656
|
+
// dashed 指定は線種としても凡例に反映する(色だけでは 2 系列を区別しにくい)
|
|
657
|
+
expect(swatchOf('BT')).toHaveStyle({ borderTopStyle: 'dashed' })
|
|
658
|
+
expect(swatchOf('QQQ')).toHaveStyle({ borderTopStyle: 'solid' })
|
|
659
|
+
})
|
|
660
|
+
|
|
661
|
+
it('主系列のラベルは equityLabel で差し替えられる', () => {
|
|
662
|
+
// WHY: 主系列が何かは画面ごとに違う(バックテスト = Strategy / ライブ = 実績)。
|
|
663
|
+
// 比較系列だけ名前が付いて主系列が無名だと、どれが自分の成績か分からない。
|
|
664
|
+
render(
|
|
665
|
+
<EquityDrawdownPaneTV
|
|
666
|
+
{...baseProps}
|
|
667
|
+
equityLabel="ライブ"
|
|
668
|
+
overlays={[{ label: 'QQQ', values: sampleEquity }]}
|
|
669
|
+
/>,
|
|
670
|
+
)
|
|
671
|
+
expect(screen.getByTestId('series-legend')).toHaveTextContent('ライブ')
|
|
672
|
+
})
|
|
673
|
+
|
|
674
|
+
it('比較系列が無ければ凡例を出さない', () => {
|
|
675
|
+
// WHY: 線が 1 本しかない画面(IS/OOS・レポート)で凡例を出しても情報量は
|
|
676
|
+
// 増えず、チャート上部の操作行を圧迫するだけ。
|
|
677
|
+
render(<EquityDrawdownPaneTV {...baseProps} />)
|
|
678
|
+
expect(screen.queryByTestId('series-legend')).not.toBeInTheDocument()
|
|
679
|
+
})
|
|
680
|
+
|
|
681
|
+
it('showBenchmark 時は Buy & Hold を凡例に含む', () => {
|
|
682
|
+
render(
|
|
683
|
+
<EquityDrawdownPaneTV
|
|
684
|
+
{...baseProps}
|
|
685
|
+
benchmark={sampleEquity.map((v) => v * 0.9)}
|
|
686
|
+
showBenchmark
|
|
687
|
+
/>,
|
|
688
|
+
)
|
|
689
|
+
const legend = screen.getByTestId('series-legend')
|
|
690
|
+
expect(legend).toHaveTextContent('Strategy')
|
|
691
|
+
expect(legend).toHaveTextContent('Buy & Hold')
|
|
692
|
+
})
|
|
693
|
+
|
|
694
|
+
it('重複ラベルの overlays は凡例にも 1 件だけ出す', () => {
|
|
695
|
+
// WHY: 系列側は label をキーにした Map で 1 本に統合される。凡例だけ 2 件
|
|
696
|
+
// 並ぶと、描かれていない線が存在するように見える。
|
|
697
|
+
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
698
|
+
render(
|
|
699
|
+
<EquityDrawdownPaneTV
|
|
700
|
+
{...baseProps}
|
|
701
|
+
overlays={[
|
|
702
|
+
{ label: 'QQQ', values: sampleEquity },
|
|
703
|
+
{ label: 'QQQ', values: sampleEquity.map((v) => v * 2) },
|
|
704
|
+
]}
|
|
705
|
+
/>,
|
|
706
|
+
)
|
|
707
|
+
expect(screen.getAllByTestId('series-legend-swatch-QQQ')).toHaveLength(1)
|
|
708
|
+
warn.mockRestore()
|
|
709
|
+
})
|
|
710
|
+
})
|
{alpha_visualizer-1.3.2 → alpha_visualizer-1.3.4}/frontend/src/components/live/LivePositionView.tsx
RENAMED
|
@@ -78,10 +78,25 @@ function admitComparisonSeries(
|
|
|
78
78
|
return series
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
/**
|
|
82
|
+
* `ChartTheme.series`(accent / steel / moss / umber / mauve)における mauve の位置。
|
|
83
|
+
*
|
|
84
|
+
* 指数の色をパレット任せにすると、ラベルのソート順で 2 色目の steel が当たる。
|
|
85
|
+
* ライブ equity は success(緑 #4A723A)/ danger(赤)で描かれ、steel(#5B7A8C) は
|
|
86
|
+
* 緑と ΔE 44.6 しか離れていない(他の系列ペアは 67〜75)。明度も L* 49.5 vs 43.9 と
|
|
87
|
+
* 近いため、細い線では主系列と見分けられない。緑からも赤からも離れた mauve
|
|
88
|
+
* (ΔE 67.7)を固定で割り当てる。
|
|
89
|
+
*/
|
|
90
|
+
const MAUVE_SERIES_INDEX = 4
|
|
91
|
+
|
|
81
92
|
/** 許容済み系列(`admitComparisonSeries` 通過後)を overlay 形式に変換する。 */
|
|
82
|
-
function toOverlay(
|
|
93
|
+
function toOverlay(
|
|
94
|
+
label: string,
|
|
95
|
+
series: [string, number][] | null,
|
|
96
|
+
style?: Pick<EquityOverlay, 'color' | 'dashed'>,
|
|
97
|
+
): EquityOverlay | null {
|
|
83
98
|
if (!series) return null
|
|
84
|
-
return { label, values: series.map(([, v]) => v) }
|
|
99
|
+
return { label, values: series.map(([, v]) => v), ...style }
|
|
85
100
|
}
|
|
86
101
|
|
|
87
102
|
/**
|
|
@@ -115,7 +130,13 @@ export function LivePositionView({ summary, warnings, lang }: Props): ReactEleme
|
|
|
115
130
|
const acceptedBacktest = admitComparisonSeries(backtestLabel, summary.backtest_equity, values.length)
|
|
116
131
|
|
|
117
132
|
const overlays: EquityOverlay[] = [
|
|
118
|
-
|
|
133
|
+
// 指数だけは色と線種を明示する(理由は MAUVE_SERIES_INDEX のコメント)。
|
|
134
|
+
// 破線は色以外の手がかりでの区別も兼ねる(バックテスト画面の Buy & Hold と同じ扱い)
|
|
135
|
+
toOverlay(benchmarkLabel, acceptedBenchmark, {
|
|
136
|
+
color: theme.series[MAUVE_SERIES_INDEX],
|
|
137
|
+
dashed: true,
|
|
138
|
+
}),
|
|
139
|
+
// バックテストは既定パレット(accent 橙)のまま。equity の緑・赤とは十分離れている
|
|
119
140
|
toOverlay(backtestLabel, acceptedBacktest),
|
|
120
141
|
].filter((o): o is EquityOverlay => o != null)
|
|
121
142
|
|
|
@@ -179,6 +200,9 @@ export function LivePositionView({ summary, warnings, lang }: Props): ReactEleme
|
|
|
179
200
|
drawdown={drawdown}
|
|
180
201
|
isCutoffIdx={0}
|
|
181
202
|
overlays={overlays}
|
|
203
|
+
// 既定の 'Strategy' はバックテスト画面向けの名前。ここでの主系列は
|
|
204
|
+
// 実運用の成績なので、比較系列(指数・バックテスト)と取り違えない名前にする
|
|
205
|
+
equityLabel={L('ライブ', 'Live')}
|
|
182
206
|
lang={lang}
|
|
183
207
|
/>
|
|
184
208
|
</div>
|
|
@@ -125,6 +125,24 @@ describe('<LivePositionView /> assembly (Task 13)', () => {
|
|
|
125
125
|
expect(props?.overlays).toEqual([])
|
|
126
126
|
})
|
|
127
127
|
|
|
128
|
+
it('主系列の凡例ラベルを言語に応じて渡す', () => {
|
|
129
|
+
// WHY: ライブ画面は equity に指数・バックテストを重ねる。凡例の既定ラベルは
|
|
130
|
+
// 'Strategy'(バックテスト画面向け)なので、そのままだと主系列が「戦略の
|
|
131
|
+
// バックテスト曲線」に見え、実運用の成績と取り違える。
|
|
132
|
+
const summary = {
|
|
133
|
+
strategy_id: 'pf_1',
|
|
134
|
+
kind: 'position' as const,
|
|
135
|
+
metrics: {},
|
|
136
|
+
equity: [['2026-06-04T00:00:00', 1_000_000]],
|
|
137
|
+
} as unknown as LiveSummary
|
|
138
|
+
|
|
139
|
+
render(<LivePositionView summary={summary} warnings={[]} lang="ja" />)
|
|
140
|
+
expect(equityPaneProps.current?.equityLabel).toBe('ライブ')
|
|
141
|
+
|
|
142
|
+
render(<LivePositionView summary={summary} warnings={[]} lang="en" />)
|
|
143
|
+
expect(equityPaneProps.current?.equityLabel).toBe('Live')
|
|
144
|
+
})
|
|
145
|
+
|
|
128
146
|
it('ベンチマークがあれば overlays に指数系列を equity と同じインデックスで積む', () => {
|
|
129
147
|
const summary = {
|
|
130
148
|
strategy_id: 'pf_1',
|
|
@@ -164,6 +182,44 @@ describe('<LivePositionView /> assembly (Task 13)', () => {
|
|
|
164
182
|
expect(overlays[0]?.values).toEqual([1_000_000, 1_020_000])
|
|
165
183
|
})
|
|
166
184
|
|
|
185
|
+
it('指数は主系列と混同しない色・線種を明示指定する', () => {
|
|
186
|
+
// WHY: ライブ equity は success(緑 #4A723A)/ danger(赤)で描かれる。
|
|
187
|
+
// overlay の色をパレット任せにすると、ラベルのソート順で 2 色目の
|
|
188
|
+
// steel(#5B7A8C) が指数に当たる。steel は緑と ΔE 44.6 しか離れておらず
|
|
189
|
+
// (他の系列ペアは 67〜75)、明度も L* 49.5 vs 43.9 と近いため、細い線では
|
|
190
|
+
// 見分けられない。緑からも赤からも離れた mauve を固定で割り当て、さらに
|
|
191
|
+
// 破線にして色以外の手がかりでも区別できるようにする。
|
|
192
|
+
const summary = {
|
|
193
|
+
strategy_id: 'pf_1',
|
|
194
|
+
kind: 'position' as const,
|
|
195
|
+
metrics: {},
|
|
196
|
+
equity: [
|
|
197
|
+
['2026-06-04T00:00:00', 1_000_000],
|
|
198
|
+
['2026-06-05T00:00:00', 995_000],
|
|
199
|
+
] as [string, number][],
|
|
200
|
+
benchmark_equity: [
|
|
201
|
+
['2026-06-04T00:00:00', 1_000_000],
|
|
202
|
+
['2026-06-05T00:00:00', 1_020_000],
|
|
203
|
+
] as [string, number][],
|
|
204
|
+
backtest_equity: [
|
|
205
|
+
['2026-06-04T00:00:00', 1_000_000],
|
|
206
|
+
['2026-06-05T00:00:00', 1_010_000],
|
|
207
|
+
] as [string, number][],
|
|
208
|
+
} as unknown as LiveSummary
|
|
209
|
+
|
|
210
|
+
render(<LivePositionView summary={summary} warnings={[]} lang="ja" />)
|
|
211
|
+
const overlays = equityPaneProps.current?.overlays ?? []
|
|
212
|
+
const index = overlays.find((o) => o.label === '指数(Buy & Hold)')
|
|
213
|
+
const backtest = overlays.find((o) => o.label === 'バックテスト')
|
|
214
|
+
|
|
215
|
+
// mauve(ChartTheme.series の 5 色目)。steel が当たらないことが要点
|
|
216
|
+
expect(index?.color).toBe('#7B5380')
|
|
217
|
+
expect(index?.dashed).toBe(true)
|
|
218
|
+
// バックテストは既定パレット(accent 橙)のまま。緑とは十分離れている
|
|
219
|
+
expect(backtest?.color).toBeUndefined()
|
|
220
|
+
expect(backtest?.dashed).toBeFalsy()
|
|
221
|
+
})
|
|
222
|
+
|
|
167
223
|
it('overlay で除外された系列は KPI の超過リターンにも使われない(Finding 1: チャートと KPI の判定を統一)', () => {
|
|
168
224
|
// WHY: buildOverlay がチャート描画を弾く系列を、KPI 行(超過リターン)が
|
|
169
225
|
// 生の summary.benchmark_equity / backtest_equity をそのまま受け取って
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "alpha-visualizer"
|
|
3
|
-
version = "1.3.
|
|
3
|
+
version = "1.3.4"
|
|
4
4
|
description = "Web visualization tool for AlphaForge backtest results"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -93,7 +93,7 @@ dev = [
|
|
|
93
93
|
]
|
|
94
94
|
|
|
95
95
|
[tool.bumpversion]
|
|
96
|
-
current_version = "1.3.
|
|
96
|
+
current_version = "1.3.4"
|
|
97
97
|
commit = true
|
|
98
98
|
message = "chore: バージョン {new_version} にバンプ"
|
|
99
99
|
tag = true
|