Update navigation labels to English and promote L1 tab
Browse files- frontend/dist/assets/{index-DSQyHgkN.js → index-BtJJee0_.js} +0 -0
- frontend/dist/index.html +1 -1
- frontend/src/App.tsx +31 -14
- frontend/src/components/BrokerPanel.tsx +1 -1
- frontend/src/components/InstitutionalPanel.tsx +11 -11
- frontend/src/components/IntradayKlineChart.tsx +2 -2
- frontend/src/components/MLAssistantPanel.tsx +2 -2
- frontend/src/components/MLDynamicVisualizationDashboard.tsx +2 -2
- frontend/src/components/PaperAlphaDashboard.tsx +4 -4
- frontend/src/components/ResearchReportPanel.tsx +2 -2
- frontend/src/components/TradeComparisonPanel.tsx +1 -1
frontend/dist/assets/{index-DSQyHgkN.js → index-BtJJee0_.js}
RENAMED
|
The diff for this file is too large to render.
See raw diff
|
|
|
frontend/dist/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
| 6 |
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 7 |
<title>Quant.ai</title>
|
| 8 |
-
<script type="module" crossorigin src="/assets/index-
|
| 9 |
<link rel="stylesheet" crossorigin href="/assets/index-C6LyAu7c.css">
|
| 10 |
</head>
|
| 11 |
<body>
|
|
|
|
| 5 |
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
| 6 |
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 7 |
<title>Quant.ai</title>
|
| 8 |
+
<script type="module" crossorigin src="/assets/index-BtJJee0_.js"></script>
|
| 9 |
<link rel="stylesheet" crossorigin href="/assets/index-C6LyAu7c.css">
|
| 10 |
</head>
|
| 11 |
<body>
|
frontend/src/App.tsx
CHANGED
|
@@ -636,7 +636,7 @@ function App() {
|
|
| 636 |
transition: 'all 0.2s ease'
|
| 637 |
}}
|
| 638 |
>
|
| 639 |
-
🚀
|
| 640 |
</button>
|
| 641 |
|
| 642 |
<button
|
|
@@ -654,7 +654,7 @@ function App() {
|
|
| 654 |
transition: 'all 0.2s ease'
|
| 655 |
}}
|
| 656 |
>
|
| 657 |
-
🤖 ML
|
| 658 |
</button>
|
| 659 |
|
| 660 |
<button
|
|
@@ -672,7 +672,7 @@ function App() {
|
|
| 672 |
transition: 'all 0.2s ease'
|
| 673 |
}}
|
| 674 |
>
|
| 675 |
-
⚡
|
| 676 |
</button>
|
| 677 |
|
| 678 |
<button
|
|
@@ -690,7 +690,25 @@ function App() {
|
|
| 690 |
transition: 'all 0.2s ease'
|
| 691 |
}}
|
| 692 |
>
|
| 693 |
-
🎬
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 694 |
</button>
|
| 695 |
|
| 696 |
<button
|
|
@@ -708,12 +726,12 @@ function App() {
|
|
| 708 |
transition: 'all 0.2s ease'
|
| 709 |
}}
|
| 710 |
>
|
| 711 |
-
🔬 Alpha
|
| 712 |
</button>
|
| 713 |
|
| 714 |
{/* Optional Advanced Tools */}
|
| 715 |
-
<select aria-label="
|
| 716 |
-
value={['broker', 'portfolio', 'replay', 'trade_comparison', 'institutional', 'live_dashboard', 'ml_assistant'].includes(activeTab) ? '' : activeTab}
|
| 717 |
onChange={(e) => {
|
| 718 |
if (e.target.value) setActiveTab(e.target.value as ActiveTab);
|
| 719 |
}}
|
|
@@ -727,13 +745,12 @@ function App() {
|
|
| 727 |
cursor: 'pointer'
|
| 728 |
}}
|
| 729 |
>
|
| 730 |
-
<option value="" disabled style={{ background: '#111', color: '#888' }}>⚙️
|
| 731 |
-
<option value="
|
| 732 |
-
<option value="
|
| 733 |
-
<option value="
|
| 734 |
-
<option value="
|
| 735 |
-
<option value="
|
| 736 |
-
<option value="experiments" style={{ background: '#111', color: '#fff' }}>🧪 策略实验对比</option>
|
| 737 |
</select>
|
| 738 |
</div>
|
| 739 |
|
|
|
|
| 636 |
transition: 'all 0.2s ease'
|
| 637 |
}}
|
| 638 |
>
|
| 639 |
+
🚀 Live Alpha
|
| 640 |
</button>
|
| 641 |
|
| 642 |
<button
|
|
|
|
| 654 |
transition: 'all 0.2s ease'
|
| 655 |
}}
|
| 656 |
>
|
| 657 |
+
🤖 ML Diagnostics
|
| 658 |
</button>
|
| 659 |
|
| 660 |
<button
|
|
|
|
| 672 |
transition: 'all 0.2s ease'
|
| 673 |
}}
|
| 674 |
>
|
| 675 |
+
⚡ Account & Trading
|
| 676 |
</button>
|
| 677 |
|
| 678 |
<button
|
|
|
|
| 690 |
transition: 'all 0.2s ease'
|
| 691 |
}}
|
| 692 |
>
|
| 693 |
+
🎬 Daily Trade Replay
|
| 694 |
+
</button>
|
| 695 |
+
|
| 696 |
+
<button
|
| 697 |
+
className={`nav-tab ${activeTab === 'saggese_wave' ? 'active' : ''}`}
|
| 698 |
+
onClick={() => setActiveTab('saggese_wave')}
|
| 699 |
+
style={{
|
| 700 |
+
padding: '8px 18px',
|
| 701 |
+
fontSize: '0.9rem',
|
| 702 |
+
fontWeight: 800,
|
| 703 |
+
background: activeTab === 'saggese_wave' ? 'linear-gradient(135deg, #06b6d4, #0891b2)' : 'transparent',
|
| 704 |
+
color: '#ffffff',
|
| 705 |
+
borderRadius: '6px',
|
| 706 |
+
border: activeTab === 'saggese_wave' ? 'none' : '1px solid rgba(6, 182, 212, 0.4)',
|
| 707 |
+
cursor: 'pointer',
|
| 708 |
+
transition: 'all 0.2s ease'
|
| 709 |
+
}}
|
| 710 |
+
>
|
| 711 |
+
🌊 L1 Data Status
|
| 712 |
</button>
|
| 713 |
|
| 714 |
<button
|
|
|
|
| 726 |
transition: 'all 0.2s ease'
|
| 727 |
}}
|
| 728 |
>
|
| 729 |
+
🔬 Alpha Research
|
| 730 |
</button>
|
| 731 |
|
| 732 |
{/* Optional Advanced Tools */}
|
| 733 |
+
<select aria-label="More Tools"
|
| 734 |
+
value={['broker', 'portfolio', 'replay', 'trade_comparison', 'institutional', 'saggese_wave', 'live_dashboard', 'ml_assistant'].includes(activeTab) ? '' : activeTab}
|
| 735 |
onChange={(e) => {
|
| 736 |
if (e.target.value) setActiveTab(e.target.value as ActiveTab);
|
| 737 |
}}
|
|
|
|
| 745 |
cursor: 'pointer'
|
| 746 |
}}
|
| 747 |
>
|
| 748 |
+
<option value="" disabled style={{ background: '#111', color: '#888' }}>⚙️ More Tools</option>
|
| 749 |
+
<option value="dashboard" style={{ background: '#111', color: '#fff' }}>📊 Backtest Dashboard</option>
|
| 750 |
+
<option value="report" style={{ background: '#111', color: '#fff' }}>📖 Quant Reports</option>
|
| 751 |
+
<option value="research" style={{ background: '#111', color: '#fff' }}>🤖 AI Strategy Assistant</option>
|
| 752 |
+
<option value="walkforward" style={{ background: '#111', color: '#fff' }}>🔄 Walk-Forward Validation</option>
|
| 753 |
+
<option value="experiments" style={{ background: '#111', color: '#fff' }}>🧪 Experiment Comparison</option>
|
|
|
|
| 754 |
</select>
|
| 755 |
</div>
|
| 756 |
|
frontend/src/components/BrokerPanel.tsx
CHANGED
|
@@ -714,7 +714,7 @@ export function BrokerPanel({ watchlist = [] }: BrokerPanelProps) {
|
|
| 714 |
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', marginBottom: '1rem', borderBottom: '1px solid var(--color-border)', paddingBottom: '10px' }}>
|
| 715 |
{([
|
| 716 |
{ id: 'analysis', label: '🧠 AI Live Analysis & Alerts' },
|
| 717 |
-
{ id: 'wave', label: '🌊
|
| 718 |
{ id: 'portfolio', label: '📈 Portfolio History' },
|
| 719 |
{ id: 'actions', label: '⚡ Execution Activity' },
|
| 720 |
{ id: 'history', label: '📅 Trade History' },
|
|
|
|
| 714 |
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', marginBottom: '1rem', borderBottom: '1px solid var(--color-border)', paddingBottom: '10px' }}>
|
| 715 |
{([
|
| 716 |
{ id: 'analysis', label: '🧠 AI Live Analysis & Alerts' },
|
| 717 |
+
{ id: 'wave', label: '🌊 L1 Data Status' },
|
| 718 |
{ id: 'portfolio', label: '📈 Portfolio History' },
|
| 719 |
{ id: 'actions', label: '⚡ Execution Activity' },
|
| 720 |
{ id: 'history', label: '📅 Trade History' },
|
frontend/src/components/InstitutionalPanel.tsx
CHANGED
|
@@ -140,7 +140,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 140 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 141 |
}`}
|
| 142 |
>
|
| 143 |
-
⚡ C++20
|
| 144 |
</button>
|
| 145 |
|
| 146 |
<button
|
|
@@ -151,7 +151,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 151 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 152 |
}`}
|
| 153 |
>
|
| 154 |
-
🧠
|
| 155 |
</button>
|
| 156 |
|
| 157 |
<button
|
|
@@ -162,7 +162,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 162 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 163 |
}`}
|
| 164 |
>
|
| 165 |
-
🏛️
|
| 166 |
</button>
|
| 167 |
|
| 168 |
<button
|
|
@@ -173,7 +173,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 173 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 174 |
}`}
|
| 175 |
>
|
| 176 |
-
🔬
|
| 177 |
</button>
|
| 178 |
|
| 179 |
<button
|
|
@@ -184,7 +184,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 184 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 185 |
}`}
|
| 186 |
>
|
| 187 |
-
📈
|
| 188 |
</button>
|
| 189 |
|
| 190 |
<button
|
|
@@ -195,7 +195,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 195 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 196 |
}`}
|
| 197 |
>
|
| 198 |
-
⚖️
|
| 199 |
</button>
|
| 200 |
|
| 201 |
<button
|
|
@@ -206,7 +206,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 206 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 207 |
}`}
|
| 208 |
>
|
| 209 |
-
🛡️
|
| 210 |
</button>
|
| 211 |
|
| 212 |
<button
|
|
@@ -217,7 +217,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 217 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 218 |
}`}
|
| 219 |
>
|
| 220 |
-
🔬
|
| 221 |
</button>
|
| 222 |
|
| 223 |
<button
|
|
@@ -228,7 +228,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 228 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 229 |
}`}
|
| 230 |
>
|
| 231 |
-
⚡ C++
|
| 232 |
</button>
|
| 233 |
|
| 234 |
<button
|
|
@@ -239,7 +239,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 239 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 240 |
}`}
|
| 241 |
>
|
| 242 |
-
📊
|
| 243 |
</button>
|
| 244 |
|
| 245 |
<button
|
|
@@ -250,7 +250,7 @@ export const InstitutionalPanel: React.FC = () => {
|
|
| 250 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 251 |
}`}
|
| 252 |
>
|
| 253 |
-
🌐
|
| 254 |
</button>
|
| 255 |
</div>
|
| 256 |
|
|
|
|
| 140 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 141 |
}`}
|
| 142 |
>
|
| 143 |
+
⚡ C++20 Engine & ITCH 5.0
|
| 144 |
</button>
|
| 145 |
|
| 146 |
<button
|
|
|
|
| 151 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 152 |
}`}
|
| 153 |
>
|
| 154 |
+
🧠 ML Visual Lab
|
| 155 |
</button>
|
| 156 |
|
| 157 |
<button
|
|
|
|
| 162 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 163 |
}`}
|
| 164 |
>
|
| 165 |
+
🏛️ Two-Stage Adaptive ML
|
| 166 |
</button>
|
| 167 |
|
| 168 |
<button
|
|
|
|
| 173 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 174 |
}`}
|
| 175 |
>
|
| 176 |
+
🔬 Out-of-Sample Alpha Lab
|
| 177 |
</button>
|
| 178 |
|
| 179 |
<button
|
|
|
|
| 184 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 185 |
}`}
|
| 186 |
>
|
| 187 |
+
📈 Optimal Execution (Almgren–Chriss)
|
| 188 |
</button>
|
| 189 |
|
| 190 |
<button
|
|
|
|
| 195 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 196 |
}`}
|
| 197 |
>
|
| 198 |
+
⚖️ Cointegration & Statistical Arbitrage
|
| 199 |
</button>
|
| 200 |
|
| 201 |
<button
|
|
|
|
| 206 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 207 |
}`}
|
| 208 |
>
|
| 209 |
+
🛡️ Risk Parity (ERC)
|
| 210 |
</button>
|
| 211 |
|
| 212 |
<button
|
|
|
|
| 217 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 218 |
}`}
|
| 219 |
>
|
| 220 |
+
🔬 Deflated Sharpe Ratio
|
| 221 |
</button>
|
| 222 |
|
| 223 |
<button
|
|
|
|
| 228 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 229 |
}`}
|
| 230 |
>
|
| 231 |
+
⚡ C++ Memory Profiler
|
| 232 |
</button>
|
| 233 |
|
| 234 |
<button
|
|
|
|
| 239 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 240 |
}`}
|
| 241 |
>
|
| 242 |
+
📊 Order Flow Imbalance
|
| 243 |
</button>
|
| 244 |
|
| 245 |
<button
|
|
|
|
| 250 |
: 'bg-slate-800 text-slate-400 hover:text-white'
|
| 251 |
}`}
|
| 252 |
>
|
| 253 |
+
🌐 Multi-Asset Backtesting
|
| 254 |
</button>
|
| 255 |
</div>
|
| 256 |
|
frontend/src/components/IntradayKlineChart.tsx
CHANGED
|
@@ -536,7 +536,7 @@ export const IntradayKlineChart: React.FC<IntradayKlineChartProps> = ({ ticker:
|
|
| 536 |
color: viewMode === 'robinhood' ? '#00c805' : '#94a3b8'
|
| 537 |
}}
|
| 538 |
>
|
| 539 |
-
📈
|
| 540 |
</button>
|
| 541 |
<button
|
| 542 |
onClick={() => setViewMode('kline')}
|
|
@@ -551,7 +551,7 @@ export const IntradayKlineChart: React.FC<IntradayKlineChartProps> = ({ ticker:
|
|
| 551 |
color: viewMode === 'kline' ? '#38bdf8' : '#94a3b8'
|
| 552 |
}}
|
| 553 |
>
|
| 554 |
-
🕯️
|
| 555 |
</button>
|
| 556 |
</div>
|
| 557 |
|
|
|
|
| 536 |
color: viewMode === 'robinhood' ? '#00c805' : '#94a3b8'
|
| 537 |
}}
|
| 538 |
>
|
| 539 |
+
📈 Price Curve
|
| 540 |
</button>
|
| 541 |
<button
|
| 542 |
onClick={() => setViewMode('kline')}
|
|
|
|
| 551 |
color: viewMode === 'kline' ? '#38bdf8' : '#94a3b8'
|
| 552 |
}}
|
| 553 |
>
|
| 554 |
+
🕯️ Candlesticks (OHLC)
|
| 555 |
</button>
|
| 556 |
</div>
|
| 557 |
|
frontend/src/components/MLAssistantPanel.tsx
CHANGED
|
@@ -79,7 +79,7 @@ export const MLAssistantPanel: React.FC<{ activeTicker: string }> = ({ activeTic
|
|
| 79 |
color: '#fff'
|
| 80 |
}}
|
| 81 |
>
|
| 82 |
-
⚡ Day Trading
|
| 83 |
</button>
|
| 84 |
<button
|
| 85 |
onClick={() => setHorizonMode('swing')}
|
|
@@ -94,7 +94,7 @@ export const MLAssistantPanel: React.FC<{ activeTicker: string }> = ({ activeTic
|
|
| 94 |
color: '#fff'
|
| 95 |
}}
|
| 96 |
>
|
| 97 |
-
📈
|
| 98 |
</button>
|
| 99 |
</div>
|
| 100 |
</div>
|
|
|
|
| 79 |
color: '#fff'
|
| 80 |
}}
|
| 81 |
>
|
| 82 |
+
⚡ Day Trading (15m)
|
| 83 |
</button>
|
| 84 |
<button
|
| 85 |
onClick={() => setHorizonMode('swing')}
|
|
|
|
| 94 |
color: '#fff'
|
| 95 |
}}
|
| 96 |
>
|
| 97 |
+
📈 Swing Trading (1d)
|
| 98 |
</button>
|
| 99 |
</div>
|
| 100 |
</div>
|
frontend/src/components/MLDynamicVisualizationDashboard.tsx
CHANGED
|
@@ -63,7 +63,7 @@ export const MLDynamicVisualizationDashboard: React.FC = () => {
|
|
| 63 |
color: activeTab === 'two_stage' ? '#fff' : '#94a3b8'
|
| 64 |
}}
|
| 65 |
>
|
| 66 |
-
🏛️
|
| 67 |
</button>
|
| 68 |
<button
|
| 69 |
onClick={() => setActiveTab('overview')}
|
|
@@ -78,7 +78,7 @@ export const MLDynamicVisualizationDashboard: React.FC = () => {
|
|
| 78 |
color: activeTab === 'overview' ? '#fff' : '#94a3b8'
|
| 79 |
}}
|
| 80 |
>
|
| 81 |
-
🤖
|
| 82 |
</button>
|
| 83 |
</div>
|
| 84 |
|
|
|
|
| 63 |
color: activeTab === 'two_stage' ? '#fff' : '#94a3b8'
|
| 64 |
}}
|
| 65 |
>
|
| 66 |
+
🏛️ Two-Stage Adaptive ML
|
| 67 |
</button>
|
| 68 |
<button
|
| 69 |
onClick={() => setActiveTab('overview')}
|
|
|
|
| 78 |
color: activeTab === 'overview' ? '#fff' : '#94a3b8'
|
| 79 |
}}
|
| 80 |
>
|
| 81 |
+
🤖 LightGBM Probabilities & Feature Importance
|
| 82 |
</button>
|
| 83 |
</div>
|
| 84 |
|
frontend/src/components/PaperAlphaDashboard.tsx
CHANGED
|
@@ -533,10 +533,10 @@ export const PaperAlphaDashboard: React.FC = () => {
|
|
| 533 |
{/* Navigation Sub-Tabs */}
|
| 534 |
<div style={{ display: 'flex', gap: '10px', borderBottom: '1px solid rgba(255,255,255,0.1)', paddingBottom: '12px', marginBottom: '20px' }}>
|
| 535 |
{[
|
| 536 |
-
{ id: 'matrix', label: '📊
|
| 537 |
-
{ id: 'microstructure', label: '🌊
|
| 538 |
-
{ id: 'models', label: '🤖
|
| 539 |
-
{ id: 'audit', label: '📑
|
| 540 |
].map(tab => (
|
| 541 |
<button
|
| 542 |
key={tab.id}
|
|
|
|
| 533 |
{/* Navigation Sub-Tabs */}
|
| 534 |
<div style={{ display: 'flex', gap: '10px', borderBottom: '1px solid rgba(255,255,255,0.1)', paddingBottom: '12px', marginBottom: '20px' }}>
|
| 535 |
{[
|
| 536 |
+
{ id: 'matrix', label: '📊 Price-Volume & Cross-Sectional Factors', badge: '31' },
|
| 537 |
+
{ id: 'microstructure', label: '🌊 L1 Order Flow & Stoikov Models', badge: 'OFI & Microprice' },
|
| 538 |
+
{ id: 'models', label: '🤖 Model Training & Feature Importance', badge: 'Zoo' },
|
| 539 |
+
{ id: 'audit', label: '📑 Research Sources & Feature Audit', badge: 'Audited' },
|
| 540 |
].map(tab => (
|
| 541 |
<button
|
| 542 |
key={tab.id}
|
frontend/src/components/ResearchReportPanel.tsx
CHANGED
|
@@ -409,13 +409,13 @@ export const ResearchReportPanel: React.FC<ResearchReportPanelProps> = ({ onAppl
|
|
| 409 |
className={`tab-btn ${comparisonMarket === 'US' ? 'active' : ''}`}
|
| 410 |
onClick={() => setComparisonMarket('US')}
|
| 411 |
>
|
| 412 |
-
🇺🇸
|
| 413 |
</button>
|
| 414 |
<button
|
| 415 |
className={`tab-btn ${comparisonMarket === 'A' ? 'active' : ''}`}
|
| 416 |
onClick={() => setComparisonMarket('A')}
|
| 417 |
>
|
| 418 |
-
🇨🇳
|
| 419 |
</button>
|
| 420 |
</div>
|
| 421 |
|
|
|
|
| 409 |
className={`tab-btn ${comparisonMarket === 'US' ? 'active' : ''}`}
|
| 410 |
onClick={() => setComparisonMarket('US')}
|
| 411 |
>
|
| 412 |
+
🇺🇸 US Equities
|
| 413 |
</button>
|
| 414 |
<button
|
| 415 |
className={`tab-btn ${comparisonMarket === 'A' ? 'active' : ''}`}
|
| 416 |
onClick={() => setComparisonMarket('A')}
|
| 417 |
>
|
| 418 |
+
🇨🇳 China A-Shares
|
| 419 |
</button>
|
| 420 |
</div>
|
| 421 |
|
frontend/src/components/TradeComparisonPanel.tsx
CHANGED
|
@@ -84,7 +84,7 @@ export function TradeComparisonPanel({ watchlist, activeTicker, onSelectTicker }
|
|
| 84 |
</div>
|
| 85 |
<div style={{ padding: '16px' }}>
|
| 86 |
<div style={{ display: 'flex', gap: 8, marginBottom: 12 }}>
|
| 87 |
-
{([{ value: 'price', label: '📈
|
| 88 |
key={view.value} onClick={() => setChartView(view.value)} aria-pressed={chartView === view.value}
|
| 89 |
style={{ padding: '8px 12px', borderRadius: 7, border: `1px solid ${chartView === view.value ? '#288bb1' : '#2b394d'}`, background: chartView === view.value ? '#12364c' : '#121d2b', color: chartView === view.value ? '#7dd3fc' : '#94a3b8', fontWeight: 700, cursor: 'pointer' }}
|
| 90 |
>{view.label}</button>)}
|
|
|
|
| 84 |
</div>
|
| 85 |
<div style={{ padding: '16px' }}>
|
| 86 |
<div style={{ display: 'flex', gap: 8, marginBottom: 12 }}>
|
| 87 |
+
{([{ value: 'price', label: '📈 Price, Trades & P&L' }, { value: 'classic', label: '📊 Rule Signals & Candlesticks' }] as const).map(view => <button
|
| 88 |
key={view.value} onClick={() => setChartView(view.value)} aria-pressed={chartView === view.value}
|
| 89 |
style={{ padding: '8px 12px', borderRadius: 7, border: `1px solid ${chartView === view.value ? '#288bb1' : '#2b394d'}`, background: chartView === view.value ? '#12364c' : '#121d2b', color: chartView === view.value ? '#7dd3fc' : '#94a3b8', fontWeight: 700, cursor: 'pointer' }}
|
| 90 |
>{view.label}</button>)}
|