|
|
<!DOCTYPE html> |
|
|
<html lang="en" dir="ltr" data-theme="light"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>Professional Trading Terminal | Crypto Intelligence Hub</title> |
|
|
<link rel="icon" type="image/svg+xml" href="../../assets/icons/favicon.svg"> |
|
|
|
|
|
|
|
|
<script src="https://unpkg.com/lightweight-charts@4.1.3/dist/lightweight-charts.standalone.production.js"></script> |
|
|
|
|
|
<style> |
|
|
* { |
|
|
margin: 0; |
|
|
padding: 0; |
|
|
box-sizing: border-box; |
|
|
} |
|
|
|
|
|
:root { |
|
|
--bg-primary: #0a0e27; |
|
|
--bg-secondary: #0f1429; |
|
|
--bg-tertiary: #141B38; |
|
|
--border-color: rgba(255, 255, 255, 0.1); |
|
|
--text-primary: #f8fafc; |
|
|
--text-secondary: rgba(248, 250, 252, 0.75); |
|
|
--accent-cyan: #2dd4bf; |
|
|
--accent-purple: #818cf8; |
|
|
--accent-green: #22c55e; |
|
|
--accent-red: #ef4444; |
|
|
--accent-yellow: #fbbf24; |
|
|
} |
|
|
|
|
|
body { |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
|
|
background: var(--bg-primary); |
|
|
color: var(--text-primary); |
|
|
overflow: hidden; |
|
|
} |
|
|
|
|
|
|
|
|
.trading-terminal { |
|
|
display: grid; |
|
|
grid-template-columns: 300px 1fr 320px; |
|
|
grid-template-rows: 60px 1fr 200px; |
|
|
height: 100vh; |
|
|
gap: 1px; |
|
|
background: var(--border-color); |
|
|
} |
|
|
|
|
|
|
|
|
.top-bar { |
|
|
grid-column: 1 / 4; |
|
|
background: var(--bg-secondary); |
|
|
display: flex; |
|
|
align-items: center; |
|
|
justify-content: space-between; |
|
|
padding: 0 1.5rem; |
|
|
border-bottom: 1px solid var(--border-color); |
|
|
} |
|
|
|
|
|
.symbol-selector { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
gap: 1rem; |
|
|
} |
|
|
|
|
|
.symbol-input { |
|
|
background: var(--bg-tertiary); |
|
|
border: 1px solid var(--border-color); |
|
|
border-radius: 8px; |
|
|
padding: 0.5rem 1rem; |
|
|
color: var(--text-primary); |
|
|
font-size: 1rem; |
|
|
font-weight: 600; |
|
|
width: 150px; |
|
|
} |
|
|
|
|
|
.symbol-input:focus { |
|
|
outline: none; |
|
|
border-color: var(--accent-cyan); |
|
|
} |
|
|
|
|
|
.timeframe-buttons { |
|
|
display: flex; |
|
|
gap: 0.5rem; |
|
|
} |
|
|
|
|
|
.timeframe-btn { |
|
|
background: var(--bg-tertiary); |
|
|
border: 1px solid var(--border-color); |
|
|
border-radius: 6px; |
|
|
padding: 0.4rem 0.8rem; |
|
|
color: var(--text-secondary); |
|
|
cursor: pointer; |
|
|
font-size: 0.875rem; |
|
|
transition: all 0.2s; |
|
|
} |
|
|
|
|
|
.timeframe-btn:hover { |
|
|
border-color: var(--accent-cyan); |
|
|
color: var(--text-primary); |
|
|
} |
|
|
|
|
|
.timeframe-btn.active { |
|
|
background: var(--accent-cyan); |
|
|
color: var(--bg-primary); |
|
|
border-color: var(--accent-cyan); |
|
|
} |
|
|
|
|
|
.status-indicators { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
gap: 1.5rem; |
|
|
} |
|
|
|
|
|
.status-badge { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
gap: 0.5rem; |
|
|
padding: 0.4rem 0.8rem; |
|
|
border-radius: 6px; |
|
|
font-size: 0.875rem; |
|
|
background: var(--bg-tertiary); |
|
|
} |
|
|
|
|
|
.status-dot { |
|
|
width: 8px; |
|
|
height: 8px; |
|
|
border-radius: 50%; |
|
|
background: var(--accent-green); |
|
|
animation: pulse 2s infinite; |
|
|
} |
|
|
|
|
|
@keyframes pulse { |
|
|
0%, 100% { opacity: 1; } |
|
|
50% { opacity: 0.5; } |
|
|
} |
|
|
|
|
|
|
|
|
.left-sidebar { |
|
|
background: var(--bg-secondary); |
|
|
overflow-y: auto; |
|
|
padding: 1rem; |
|
|
} |
|
|
|
|
|
.tool-section { |
|
|
margin-bottom: 1.5rem; |
|
|
} |
|
|
|
|
|
.tool-section h3 { |
|
|
font-size: 0.875rem; |
|
|
text-transform: uppercase; |
|
|
letter-spacing: 0.05em; |
|
|
color: var(--text-secondary); |
|
|
margin-bottom: 0.75rem; |
|
|
padding-bottom: 0.5rem; |
|
|
border-bottom: 1px solid var(--border-color); |
|
|
} |
|
|
|
|
|
.tool-btn { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
gap: 0.75rem; |
|
|
width: 100%; |
|
|
padding: 0.75rem; |
|
|
background: var(--bg-tertiary); |
|
|
border: 1px solid var(--border-color); |
|
|
border-radius: 8px; |
|
|
color: var(--text-primary); |
|
|
cursor: pointer; |
|
|
margin-bottom: 0.5rem; |
|
|
transition: all 0.2s; |
|
|
} |
|
|
|
|
|
.tool-btn:hover { |
|
|
background: rgba(45, 212, 191, 0.1); |
|
|
border-color: var(--accent-cyan); |
|
|
} |
|
|
|
|
|
.tool-btn.active { |
|
|
background: rgba(45, 212, 191, 0.2); |
|
|
border-color: var(--accent-cyan); |
|
|
} |
|
|
|
|
|
.tool-icon { |
|
|
font-size: 1.25rem; |
|
|
} |
|
|
|
|
|
.indicator-toggle { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
justify-content: space-between; |
|
|
padding: 0.75rem; |
|
|
background: var(--bg-tertiary); |
|
|
border-radius: 8px; |
|
|
margin-bottom: 0.5rem; |
|
|
} |
|
|
|
|
|
.toggle-switch { |
|
|
position: relative; |
|
|
width: 48px; |
|
|
height: 24px; |
|
|
background: rgba(255, 255, 255, 0.1); |
|
|
border-radius: 12px; |
|
|
cursor: pointer; |
|
|
transition: background 0.3s; |
|
|
} |
|
|
|
|
|
.toggle-switch.on { |
|
|
background: var(--accent-cyan); |
|
|
} |
|
|
|
|
|
.toggle-slider { |
|
|
position: absolute; |
|
|
top: 2px; |
|
|
left: 2px; |
|
|
width: 20px; |
|
|
height: 20px; |
|
|
background: white; |
|
|
border-radius: 50%; |
|
|
transition: transform 0.3s; |
|
|
} |
|
|
|
|
|
.toggle-switch.on .toggle-slider { |
|
|
transform: translateX(24px); |
|
|
} |
|
|
|
|
|
|
|
|
.chart-container { |
|
|
background: var(--bg-secondary); |
|
|
position: relative; |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
} |
|
|
|
|
|
.chart-toolbar { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
justify-content: space-between; |
|
|
padding: 0.75rem 1rem; |
|
|
background: var(--bg-tertiary); |
|
|
border-bottom: 1px solid var(--border-color); |
|
|
} |
|
|
|
|
|
.chart-tools { |
|
|
display: flex; |
|
|
gap: 0.5rem; |
|
|
} |
|
|
|
|
|
.chart-tool-btn { |
|
|
padding: 0.5rem; |
|
|
background: transparent; |
|
|
border: 1px solid var(--border-color); |
|
|
border-radius: 6px; |
|
|
color: var(--text-secondary); |
|
|
cursor: pointer; |
|
|
transition: all 0.2s; |
|
|
} |
|
|
|
|
|
.chart-tool-btn:hover { |
|
|
background: rgba(45, 212, 191, 0.1); |
|
|
border-color: var(--accent-cyan); |
|
|
color: var(--text-primary); |
|
|
} |
|
|
|
|
|
.chart-tool-btn.active { |
|
|
background: var(--accent-cyan); |
|
|
color: var(--bg-primary); |
|
|
border-color: var(--accent-cyan); |
|
|
} |
|
|
|
|
|
#tradingChart { |
|
|
flex: 1; |
|
|
min-height: 0; |
|
|
} |
|
|
|
|
|
|
|
|
.right-sidebar { |
|
|
background: var(--bg-secondary); |
|
|
overflow-y: auto; |
|
|
padding: 1rem; |
|
|
} |
|
|
|
|
|
.analysis-card { |
|
|
background: var(--bg-tertiary); |
|
|
border: 1px solid var(--border-color); |
|
|
border-radius: 12px; |
|
|
padding: 1rem; |
|
|
margin-bottom: 1rem; |
|
|
} |
|
|
|
|
|
.analysis-card h3 { |
|
|
font-size: 0.875rem; |
|
|
text-transform: uppercase; |
|
|
letter-spacing: 0.05em; |
|
|
color: var(--text-secondary); |
|
|
margin-bottom: 1rem; |
|
|
} |
|
|
|
|
|
.signal-badge { |
|
|
display: inline-flex; |
|
|
align-items: center; |
|
|
gap: 0.5rem; |
|
|
padding: 0.5rem 1rem; |
|
|
border-radius: 8px; |
|
|
font-weight: 600; |
|
|
font-size: 0.875rem; |
|
|
} |
|
|
|
|
|
.signal-badge.buy { |
|
|
background: rgba(34, 197, 94, 0.2); |
|
|
color: var(--accent-green); |
|
|
} |
|
|
|
|
|
.signal-badge.sell { |
|
|
background: rgba(239, 68, 68, 0.2); |
|
|
color: var(--accent-red); |
|
|
} |
|
|
|
|
|
.signal-badge.hold { |
|
|
background: rgba(251, 191, 36, 0.2); |
|
|
color: var(--accent-yellow); |
|
|
} |
|
|
|
|
|
.metric-row { |
|
|
display: flex; |
|
|
justify-content: space-between; |
|
|
align-items: center; |
|
|
padding: 0.75rem 0; |
|
|
border-bottom: 1px solid var(--border-color); |
|
|
} |
|
|
|
|
|
.metric-row:last-child { |
|
|
border-bottom: none; |
|
|
} |
|
|
|
|
|
.metric-label { |
|
|
color: var(--text-secondary); |
|
|
font-size: 0.875rem; |
|
|
} |
|
|
|
|
|
.metric-value { |
|
|
font-weight: 600; |
|
|
font-size: 1rem; |
|
|
} |
|
|
|
|
|
.metric-value.bullish { |
|
|
color: var(--accent-green); |
|
|
} |
|
|
|
|
|
.metric-value.bearish { |
|
|
color: var(--accent-red); |
|
|
} |
|
|
|
|
|
.metric-value.neutral { |
|
|
color: var(--accent-yellow); |
|
|
} |
|
|
|
|
|
|
|
|
.bottom-panel { |
|
|
grid-column: 1 / 4; |
|
|
background: var(--bg-secondary); |
|
|
border-top: 1px solid var(--border-color); |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
} |
|
|
|
|
|
.strategy-tabs { |
|
|
display: flex; |
|
|
border-bottom: 1px solid var(--border-color); |
|
|
background: var(--bg-tertiary); |
|
|
} |
|
|
|
|
|
.strategy-tab { |
|
|
padding: 0.75rem 1.5rem; |
|
|
cursor: pointer; |
|
|
border-bottom: 2px solid transparent; |
|
|
color: var(--text-secondary); |
|
|
transition: all 0.2s; |
|
|
} |
|
|
|
|
|
.strategy-tab:hover { |
|
|
color: var(--text-primary); |
|
|
} |
|
|
|
|
|
.strategy-tab.active { |
|
|
color: var(--accent-cyan); |
|
|
border-bottom-color: var(--accent-cyan); |
|
|
} |
|
|
|
|
|
.strategy-content { |
|
|
flex: 1; |
|
|
padding: 1rem; |
|
|
overflow-y: auto; |
|
|
} |
|
|
|
|
|
.strategy-list { |
|
|
display: grid; |
|
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); |
|
|
gap: 1rem; |
|
|
} |
|
|
|
|
|
.strategy-item { |
|
|
background: var(--bg-tertiary); |
|
|
border: 1px solid var(--border-color); |
|
|
border-radius: 12px; |
|
|
padding: 1rem; |
|
|
cursor: pointer; |
|
|
transition: all 0.2s; |
|
|
} |
|
|
|
|
|
.strategy-item:hover { |
|
|
border-color: var(--accent-cyan); |
|
|
transform: translateY(-2px); |
|
|
} |
|
|
|
|
|
.strategy-item.active { |
|
|
background: rgba(45, 212, 191, 0.1); |
|
|
border-color: var(--accent-cyan); |
|
|
} |
|
|
|
|
|
.strategy-name { |
|
|
font-weight: 600; |
|
|
margin-bottom: 0.5rem; |
|
|
} |
|
|
|
|
|
.strategy-stats { |
|
|
display: flex; |
|
|
gap: 1rem; |
|
|
margin-top: 0.75rem; |
|
|
padding-top: 0.75rem; |
|
|
border-top: 1px solid var(--border-color); |
|
|
} |
|
|
|
|
|
.stat { |
|
|
flex: 1; |
|
|
text-align: center; |
|
|
} |
|
|
|
|
|
.stat-label { |
|
|
font-size: 0.75rem; |
|
|
color: var(--text-secondary); |
|
|
} |
|
|
|
|
|
.stat-value { |
|
|
font-weight: 600; |
|
|
margin-top: 0.25rem; |
|
|
} |
|
|
|
|
|
|
|
|
::-webkit-scrollbar { |
|
|
width: 8px; |
|
|
height: 8px; |
|
|
} |
|
|
|
|
|
::-webkit-scrollbar-track { |
|
|
background: var(--bg-tertiary); |
|
|
} |
|
|
|
|
|
::-webkit-scrollbar-thumb { |
|
|
background: rgba(255, 255, 255, 0.2); |
|
|
border-radius: 4px; |
|
|
} |
|
|
|
|
|
::-webkit-scrollbar-thumb:hover { |
|
|
background: rgba(255, 255, 255, 0.3); |
|
|
} |
|
|
|
|
|
|
|
|
.loading-overlay { |
|
|
position: absolute; |
|
|
inset: 0; |
|
|
background: rgba(10, 14, 39, 0.9); |
|
|
display: flex; |
|
|
align-items: center; |
|
|
justify-content: center; |
|
|
z-index: 1000; |
|
|
} |
|
|
|
|
|
.spinner { |
|
|
width: 48px; |
|
|
height: 48px; |
|
|
border: 4px solid var(--border-color); |
|
|
border-top-color: var(--accent-cyan); |
|
|
border-radius: 50%; |
|
|
animation: spin 1s linear infinite; |
|
|
} |
|
|
|
|
|
@keyframes spin { |
|
|
to { transform: rotate(360deg); } |
|
|
} |
|
|
|
|
|
.hidden { |
|
|
display: none !important; |
|
|
} |
|
|
|
|
|
|
|
|
.price-display { |
|
|
font-size: 1.5rem; |
|
|
font-weight: 700; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
gap: 0.5rem; |
|
|
} |
|
|
|
|
|
.price-change { |
|
|
font-size: 0.875rem; |
|
|
padding: 0.25rem 0.5rem; |
|
|
border-radius: 4px; |
|
|
} |
|
|
|
|
|
.price-change.positive { |
|
|
background: rgba(34, 197, 94, 0.2); |
|
|
color: var(--accent-green); |
|
|
} |
|
|
|
|
|
.price-change.negative { |
|
|
background: rgba(239, 68, 68, 0.2); |
|
|
color: var(--accent-red); |
|
|
} |
|
|
</style> |
|
|
|
|
|
<script src="/static/js/api-config.js"></script> |
|
|
<script> |
|
|
|
|
|
window.apiReady = new Promise((resolve) => { |
|
|
if (window.apiClient) { |
|
|
console.log('✅ API Client ready'); |
|
|
resolve(window.apiClient); |
|
|
} else { |
|
|
console.error('❌ API Client not loaded'); |
|
|
} |
|
|
}); |
|
|
</script> |
|
|
|
|
|
</head> |
|
|
<body> |
|
|
<div class="trading-terminal"> |
|
|
|
|
|
<div class="top-bar"> |
|
|
<div class="symbol-selector"> |
|
|
<input type="text" class="symbol-input" id="symbolInput" value="BTCUSDT" placeholder="Symbol"> |
|
|
<div class="price-display" id="priceDisplay"> |
|
|
<span id="currentPrice">$0.00</span> |
|
|
<span class="price-change positive" id="priceChange">+0.00%</span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="timeframe-buttons"> |
|
|
<button class="timeframe-btn" data-timeframe="1m">1m</button> |
|
|
<button class="timeframe-btn" data-timeframe="5m">5m</button> |
|
|
<button class="timeframe-btn" data-timeframe="15m">15m</button> |
|
|
<button class="timeframe-btn" data-timeframe="1h">1h</button> |
|
|
<button class="timeframe-btn active" data-timeframe="4h">4h</button> |
|
|
<button class="timeframe-btn" data-timeframe="1d">1D</button> |
|
|
<button class="timeframe-btn" data-timeframe="1w">1W</button> |
|
|
</div> |
|
|
|
|
|
<div class="status-indicators"> |
|
|
<div class="status-badge"> |
|
|
<div class="status-dot"></div> |
|
|
<span>Live Data</span> |
|
|
</div> |
|
|
<div class="status-badge"> |
|
|
<span id="lastUpdate">Just now</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="left-sidebar"> |
|
|
<div class="tool-section"> |
|
|
<h3>📐 Drawing Tools</h3> |
|
|
<button class="tool-btn" data-tool="trendline"> |
|
|
<span class="tool-icon">📈</span> |
|
|
<span>Trend Line</span> |
|
|
</button> |
|
|
<button class="tool-btn" data-tool="horizontal"> |
|
|
<span class="tool-icon">➖</span> |
|
|
<span>Horizontal Line</span> |
|
|
</button> |
|
|
<button class="tool-btn" data-tool="fibonacci"> |
|
|
<span class="tool-icon">🎯</span> |
|
|
<span>Fibonacci</span> |
|
|
</button> |
|
|
<button class="tool-btn" data-tool="rectangle"> |
|
|
<span class="tool-icon">⬜</span> |
|
|
<span>Rectangle</span> |
|
|
</button> |
|
|
<button class="tool-btn" data-tool="triangle"> |
|
|
<span class="tool-icon">🔺</span> |
|
|
<span>Triangle</span> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<div class="tool-section"> |
|
|
<h3>📊 Indicators</h3> |
|
|
<div class="indicator-toggle"> |
|
|
<span>RSI (14)</span> |
|
|
<div class="toggle-switch on" data-indicator="rsi"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="indicator-toggle"> |
|
|
<span>MACD</span> |
|
|
<div class="toggle-switch on" data-indicator="macd"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="indicator-toggle"> |
|
|
<span>BB (20, 2)</span> |
|
|
<div class="toggle-switch" data-indicator="bb"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="indicator-toggle"> |
|
|
<span>EMA (20, 50, 200)</span> |
|
|
<div class="toggle-switch on" data-indicator="ema"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="indicator-toggle"> |
|
|
<span>Volume</span> |
|
|
<div class="toggle-switch on" data-indicator="volume"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="indicator-toggle"> |
|
|
<span>Ichimoku Cloud</span> |
|
|
<div class="toggle-switch" data-indicator="ichimoku"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="tool-section"> |
|
|
<h3>🎨 Patterns</h3> |
|
|
<div class="indicator-toggle"> |
|
|
<span>Head & Shoulders</span> |
|
|
<div class="toggle-switch on" data-pattern="hs"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="indicator-toggle"> |
|
|
<span>Double Top/Bottom</span> |
|
|
<div class="toggle-switch on" data-pattern="double"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="indicator-toggle"> |
|
|
<span>Triangles</span> |
|
|
<div class="toggle-switch on" data-pattern="triangle"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="indicator-toggle"> |
|
|
<span>Wedges</span> |
|
|
<div class="toggle-switch" data-pattern="wedge"> |
|
|
<div class="toggle-slider"></div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="chart-container"> |
|
|
<div class="chart-toolbar"> |
|
|
<div class="chart-tools"> |
|
|
<button class="chart-tool-btn" title="Cursor" data-mode="cursor"> |
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> |
|
|
<path d="M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z"/> |
|
|
</svg> |
|
|
</button> |
|
|
<button class="chart-tool-btn" title="Crosshair" data-mode="crosshair"> |
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> |
|
|
<circle cx="12" cy="12" r="10"/> |
|
|
<line x1="22" y1="12" x2="18" y2="12"/> |
|
|
<line x1="6" y1="12" x2="2" y2="12"/> |
|
|
<line x1="12" y1="6" x2="12" y2="2"/> |
|
|
<line x1="12" y1="22" x2="12" y2="18"/> |
|
|
</svg> |
|
|
</button> |
|
|
<button class="chart-tool-btn" title="Zoom In" onclick="window.tradingPro?.zoomIn()"> |
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> |
|
|
<circle cx="11" cy="11" r="8"/> |
|
|
<path d="m21 21-4.35-4.35"/> |
|
|
<line x1="11" y1="8" x2="11" y2="14"/> |
|
|
<line x1="8" y1="11" x2="14" y2="11"/> |
|
|
</svg> |
|
|
</button> |
|
|
<button class="chart-tool-btn" title="Zoom Out" onclick="window.tradingPro?.zoomOut()"> |
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> |
|
|
<circle cx="11" cy="11" r="8"/> |
|
|
<path d="m21 21-4.35-4.35"/> |
|
|
<line x1="8" y1="11" x2="14" y2="11"/> |
|
|
</svg> |
|
|
</button> |
|
|
<button class="chart-tool-btn" title="Screenshot" onclick="window.tradingPro?.takeScreenshot()"> |
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> |
|
|
<path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/> |
|
|
<circle cx="12" cy="13" r="4"/> |
|
|
</svg> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
<div id="tradingChart"></div> |
|
|
<div class="loading-overlay hidden" id="loadingOverlay"> |
|
|
<div class="spinner"></div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="right-sidebar"> |
|
|
<div class="analysis-card"> |
|
|
<h3>📈 Current Signal</h3> |
|
|
<div style="margin: 1rem 0;"> |
|
|
<span class="signal-badge buy" id="currentSignal">STRONG BUY</span> |
|
|
</div> |
|
|
<div style="margin-top: 1rem;"> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">Confidence</span> |
|
|
<span class="metric-value bullish" id="confidence">85%</span> |
|
|
</div> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">Strength</span> |
|
|
<span class="metric-value bullish" id="strength">Strong</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="analysis-card"> |
|
|
<h3>🎯 Key Levels</h3> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">Resistance 1</span> |
|
|
<span class="metric-value bearish" id="r1">$0.00</span> |
|
|
</div> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">Current Price</span> |
|
|
<span class="metric-value" id="cp">$0.00</span> |
|
|
</div> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">Support 1</span> |
|
|
<span class="metric-value bullish" id="s1">$0.00</span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="analysis-card"> |
|
|
<h3>📊 Indicators</h3> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">RSI (14)</span> |
|
|
<span class="metric-value neutral" id="rsiValue">0</span> |
|
|
</div> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">MACD</span> |
|
|
<span class="metric-value bullish" id="macdValue">Bullish</span> |
|
|
</div> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">EMA Trend</span> |
|
|
<span class="metric-value bullish" id="emaValue">Uptrend</span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="analysis-card"> |
|
|
<h3>⚡ Quick Stats</h3> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">24h Volume</span> |
|
|
<span class="metric-value" id="volume24h">$0</span> |
|
|
</div> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">Market Cap</span> |
|
|
<span class="metric-value" id="marketCap">$0</span> |
|
|
</div> |
|
|
<div class="metric-row"> |
|
|
<span class="metric-label">Volatility</span> |
|
|
<span class="metric-value" id="volatility">Low</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="bottom-panel"> |
|
|
<div class="strategy-tabs"> |
|
|
<div class="strategy-tab active" data-tab="strategies">My Strategies</div> |
|
|
<div class="strategy-tab" data-tab="signals">Active Signals</div> |
|
|
<div class="strategy-tab" data-tab="history">Trade History</div> |
|
|
<div class="strategy-tab" data-tab="backtests">Backtest Results</div> |
|
|
</div> |
|
|
<div class="strategy-content"> |
|
|
<div class="strategy-list" id="strategyList"> |
|
|
|
|
|
<div class="strategy-item active"> |
|
|
<div class="strategy-name">🎯 Trend Following + RSI</div> |
|
|
<p style="color: var(--text-secondary); font-size: 0.875rem; margin-top: 0.5rem;"> |
|
|
EMA crossover with RSI confirmation. Buy when EMA(20) crosses EMA(50) upward and RSI > 50 |
|
|
</p> |
|
|
<div class="strategy-stats"> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Win Rate</div> |
|
|
<div class="stat-value" style="color: var(--accent-green)">67%</div> |
|
|
</div> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Profit Factor</div> |
|
|
<div class="stat-value" style="color: var(--accent-green)">2.3</div> |
|
|
</div> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Trades</div> |
|
|
<div class="stat-value">156</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="strategy-item"> |
|
|
<div class="strategy-name">💎 Support/Resistance Breakout</div> |
|
|
<p style="color: var(--text-secondary); font-size: 0.875rem; margin-top: 0.5rem;"> |
|
|
Buy on resistance break with volume confirmation. Sell on support break. |
|
|
</p> |
|
|
<div class="strategy-stats"> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Win Rate</div> |
|
|
<div class="stat-value" style="color: var(--accent-green)">72%</div> |
|
|
</div> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Profit Factor</div> |
|
|
<div class="stat-value" style="color: var(--accent-green)">3.1</div> |
|
|
</div> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Trades</div> |
|
|
<div class="stat-value">89</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="strategy-item"> |
|
|
<div class="strategy-name">🌊 MACD + Bollinger Bands</div> |
|
|
<p style="color: var(--text-secondary); font-size: 0.875rem; margin-top: 0.5rem;"> |
|
|
MACD histogram reversal at BB extremes. Mean reversion strategy. |
|
|
</p> |
|
|
<div class="strategy-stats"> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Win Rate</div> |
|
|
<div class="stat-value" style="color: var(--accent-green)">65%</div> |
|
|
</div> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Profit Factor</div> |
|
|
<div class="stat-value" style="color: var(--accent-green)">1.9</div> |
|
|
</div> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Trades</div> |
|
|
<div class="stat-value">203</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="strategy-item"> |
|
|
<div class="strategy-name">⚡ Scalping - Quick Profits</div> |
|
|
<p style="color: var(--text-secondary); font-size: 0.875rem; margin-top: 0.5rem;"> |
|
|
1-5 minute timeframe. Small profits, high frequency, strict stop-loss. |
|
|
</p> |
|
|
<div class="strategy-stats"> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Win Rate</div> |
|
|
<div class="stat-value" style="color: var(--accent-yellow)">58%</div> |
|
|
</div> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Profit Factor</div> |
|
|
<div class="stat-value" style="color: var(--accent-green)">1.6</div> |
|
|
</div> |
|
|
<div class="stat"> |
|
|
<div class="stat-label">Trades</div> |
|
|
<div class="stat-value">1,247</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<script type="module" src="./trading-pro.js"></script> |
|
|
</body> |
|
|
</html> |
|
|
|
|
|
|