goldenChat base source add
This commit is contained in:
@@ -0,0 +1,265 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=390">
|
||||
<title>Mobile-01 앱 스타일</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: 'Noto Sans KR', sans-serif; background: #0f0f23; color: #fff; width: 390px; min-height: 844px; padding-bottom: 80px; }
|
||||
|
||||
.status-bar { height: 44px; background: #0f0f23; display: flex; justify-content: space-between; align-items: center; padding: 0 20px; font-size: 14px; font-weight: 600; }
|
||||
|
||||
.header { padding: 12px 20px 16px; display: flex; justify-content: space-between; align-items: center; }
|
||||
.header-title { font-size: 22px; font-weight: 700; }
|
||||
.version-badge { background: rgba(139, 92, 246, 0.2); color: #a78bfa; padding: 4px 10px; border-radius: 10px; font-size: 10px; }
|
||||
|
||||
.container { padding: 0 16px; }
|
||||
|
||||
/* 종목 카드 */
|
||||
.symbol-card { background: linear-gradient(135deg, #1e1e3f 0%, #0f0f23 100%); border-radius: 20px; padding: 20px; margin-bottom: 16px; border: 1px solid rgba(255,255,255,0.1); }
|
||||
.symbol-row { display: flex; justify-content: space-between; align-items: center; }
|
||||
.symbol-icon { width: 48px; height: 48px; background: linear-gradient(135deg, #f7931a, #ffab00); border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 22px; font-weight: 700; }
|
||||
.symbol-info { flex: 1; margin-left: 14px; }
|
||||
.symbol-name { font-size: 18px; font-weight: 700; }
|
||||
.symbol-market { font-size: 12px; color: #9ca3af; }
|
||||
.symbol-price { text-align: right; }
|
||||
.price-value { font-size: 18px; font-weight: 700; }
|
||||
.price-change { font-size: 13px; color: #22c55e; }
|
||||
.change-btn { margin-top: 12px; padding: 10px; background: rgba(255,255,255,0.1); border: none; border-radius: 10px; color: #fff; font-size: 13px; width: 100%; cursor: pointer; }
|
||||
|
||||
/* 설정 칩 */
|
||||
.chips-row { display: flex; gap: 8px; margin-bottom: 12px; overflow-x: auto; padding-bottom: 4px; }
|
||||
.chip { flex-shrink: 0; padding: 10px 16px; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 12px; font-size: 13px; color: #9ca3af; }
|
||||
.chip.active { background: rgba(139, 92, 246, 0.2); border-color: #8b5cf6; color: #a78bfa; }
|
||||
|
||||
/* 수익률 카드 */
|
||||
.return-card { background: linear-gradient(135deg, rgba(34, 197, 94, 0.15), rgba(16, 185, 129, 0.05)); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 20px; padding: 24px; margin-bottom: 16px; text-align: center; }
|
||||
.return-label { font-size: 13px; color: #9ca3af; margin-bottom: 8px; }
|
||||
.return-value { font-size: 48px; font-weight: 700; color: #22c55e; }
|
||||
.return-amount { font-size: 14px; color: #22c55e; margin-top: 4px; }
|
||||
|
||||
/* 메트릭 그리드 */
|
||||
.metrics-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }
|
||||
.metric-card { background: rgba(255,255,255,0.05); border-radius: 16px; padding: 16px; text-align: center; }
|
||||
.metric-icon { font-size: 24px; margin-bottom: 8px; }
|
||||
.metric-value { font-size: 22px; font-weight: 700; margin-bottom: 4px; }
|
||||
.metric-value.green { color: #22c55e; }
|
||||
.metric-value.red { color: #ef4444; }
|
||||
.metric-label { font-size: 11px; color: #71717a; }
|
||||
|
||||
/* 미니 차트 */
|
||||
.chart-card { background: rgba(255,255,255,0.05); border-radius: 20px; padding: 16px; margin-bottom: 16px; }
|
||||
.card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
|
||||
.card-title { font-size: 14px; font-weight: 600; }
|
||||
.chart-area { height: 160px; background: rgba(0,0,0,0.2); border-radius: 12px; position: relative; overflow: hidden; }
|
||||
.chart-candles { position: absolute; inset: 16px 12px 30px 12px; display: flex; align-items: flex-end; justify-content: space-around; }
|
||||
.candle { width: 8px; border-radius: 2px; position: relative; }
|
||||
.candle.up { background: #22c55e; }
|
||||
.candle.down { background: #ef4444; }
|
||||
.signal { position: absolute; width: 16px; height: 16px; border-radius: 50%; font-size: 8px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
|
||||
.signal.buy { bottom: -20px; left: 50%; transform: translateX(-50%); background: rgba(34, 197, 94, 0.3); color: #22c55e; border: 1.5px solid #22c55e; }
|
||||
.signal.sell { top: -20px; left: 50%; transform: translateX(-50%); background: rgba(239, 68, 68, 0.3); color: #ef4444; border: 1.5px solid #ef4444; }
|
||||
|
||||
/* 정확도 */
|
||||
.accuracy-card { background: rgba(255,255,255,0.05); border-radius: 20px; padding: 20px; margin-bottom: 16px; }
|
||||
.accuracy-row { display: flex; align-items: center; gap: 16px; }
|
||||
.accuracy-ring { width: 80px; height: 80px; border-radius: 50%; background: conic-gradient(#8b5cf6 0deg 252deg, rgba(255,255,255,0.1) 252deg 360deg); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
|
||||
.accuracy-inner { width: 60px; height: 60px; background: #0f0f23; border-radius: 50%; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.accuracy-pct { font-size: 20px; font-weight: 700; color: #8b5cf6; }
|
||||
.accuracy-text { font-size: 8px; color: #71717a; }
|
||||
.accuracy-bars { flex: 1; }
|
||||
.acc-bar { margin-bottom: 10px; }
|
||||
.acc-bar-header { display: flex; justify-content: space-between; font-size: 11px; margin-bottom: 4px; }
|
||||
.acc-bar-bg { height: 6px; background: rgba(255,255,255,0.1); border-radius: 3px; overflow: hidden; }
|
||||
.acc-bar-fill { height: 100%; border-radius: 3px; }
|
||||
.acc-bar-fill.green { background: #22c55e; }
|
||||
.acc-bar-fill.purple { background: #8b5cf6; }
|
||||
|
||||
/* 거래 */
|
||||
.trades-card { background: rgba(255,255,255,0.05); border-radius: 20px; padding: 16px; margin-bottom: 16px; }
|
||||
.trade-item { display: flex; align-items: center; padding: 12px; background: rgba(255,255,255,0.03); border-radius: 12px; margin-bottom: 8px; }
|
||||
.trade-badge { width: 36px; height: 36px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; margin-right: 12px; }
|
||||
.trade-badge.buy { background: rgba(34, 197, 94, 0.2); color: #22c55e; }
|
||||
.trade-badge.sell { background: rgba(239, 68, 68, 0.2); color: #ef4444; }
|
||||
.trade-info { flex: 1; }
|
||||
.trade-type { font-size: 13px; font-weight: 500; }
|
||||
.trade-time { font-size: 11px; color: #6b7280; }
|
||||
.trade-result { text-align: right; }
|
||||
.trade-price { font-size: 12px; }
|
||||
.trade-pnl { font-size: 12px; font-weight: 600; }
|
||||
.trade-pnl.profit { color: #22c55e; }
|
||||
.trade-pnl.loss { color: #ef4444; }
|
||||
|
||||
/* 실행 버튼 */
|
||||
.run-btn { position: fixed; bottom: 100px; left: 16px; right: 16px; width: calc(100% - 32px); max-width: 358px; padding: 18px; background: linear-gradient(135deg, #8b5cf6, #6366f1); border: none; border-radius: 16px; color: #fff; font-size: 16px; font-weight: 600; cursor: pointer; box-shadow: 0 8px 30px rgba(139, 92, 246, 0.4); }
|
||||
|
||||
/* 바텀 네비게이션 */
|
||||
.bottom-nav { position: fixed; bottom: 0; left: 0; width: 390px; background: rgba(15, 15, 35, 0.95); backdrop-filter: blur(20px); border-top: 1px solid rgba(255,255,255,0.1); display: flex; justify-content: space-around; padding: 10px 0 30px; }
|
||||
.nav-item { display: flex; flex-direction: column; align-items: center; gap: 4px; color: #6b7280; font-size: 10px; }
|
||||
.nav-item.active { color: #8b5cf6; }
|
||||
.nav-icon { font-size: 22px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="status-bar">
|
||||
<span>9:41</span>
|
||||
<span>📶 🔋</span>
|
||||
</div>
|
||||
|
||||
<header class="header">
|
||||
<span class="header-title">백테스트</span>
|
||||
<span class="version-badge">Mobile-01</span>
|
||||
</header>
|
||||
|
||||
<div class="container">
|
||||
<div class="symbol-card">
|
||||
<div class="symbol-row">
|
||||
<div class="symbol-icon">₿</div>
|
||||
<div class="symbol-info">
|
||||
<div class="symbol-name">BTC/KRW</div>
|
||||
<div class="symbol-market">비트코인 · 업비트</div>
|
||||
</div>
|
||||
<div class="symbol-price">
|
||||
<div class="price-value">₩58,450,000</div>
|
||||
<div class="price-change">+2.34%</div>
|
||||
</div>
|
||||
</div>
|
||||
<button class="change-btn">종목 변경 ▼</button>
|
||||
</div>
|
||||
|
||||
<div class="chips-row">
|
||||
<div class="chip active">MACD+RSI</div>
|
||||
<div class="chip">볼린저밴드</div>
|
||||
<div class="chip">이평크로스</div>
|
||||
</div>
|
||||
<div class="chips-row">
|
||||
<div class="chip">15분</div>
|
||||
<div class="chip active">1시간</div>
|
||||
<div class="chip">4시간</div>
|
||||
<div class="chip">일봉</div>
|
||||
</div>
|
||||
|
||||
<div class="return-card">
|
||||
<div class="return-label">💰 총 수익률</div>
|
||||
<div class="return-value">+23.5%</div>
|
||||
<div class="return-amount">₩10,000,000 → ₩12,350,000</div>
|
||||
</div>
|
||||
|
||||
<div class="metrics-grid">
|
||||
<div class="metric-card">
|
||||
<div class="metric-icon">🎯</div>
|
||||
<div class="metric-value green">68%</div>
|
||||
<div class="metric-label">승률</div>
|
||||
</div>
|
||||
<div class="metric-card">
|
||||
<div class="metric-icon">🔄</div>
|
||||
<div class="metric-value">25회</div>
|
||||
<div class="metric-label">총 거래</div>
|
||||
</div>
|
||||
<div class="metric-card">
|
||||
<div class="metric-icon">⚡</div>
|
||||
<div class="metric-value green">+₩94K</div>
|
||||
<div class="metric-label">평균 수익</div>
|
||||
</div>
|
||||
<div class="metric-card">
|
||||
<div class="metric-icon">📉</div>
|
||||
<div class="metric-value red">-8.2%</div>
|
||||
<div class="metric-label">최대 낙폭</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="chart-card">
|
||||
<div class="card-header">
|
||||
<span class="card-title">📈 차트</span>
|
||||
<span style="font-size: 11px; color: #8b5cf6;">전체보기 →</span>
|
||||
</div>
|
||||
<div class="chart-area">
|
||||
<div class="chart-candles">
|
||||
<div class="candle up" style="height: 30px;"></div>
|
||||
<div class="candle up" style="height: 45px;"></div>
|
||||
<div class="candle down" style="height: 25px;"></div>
|
||||
<div class="candle down" style="height: 40px;"><div class="signal buy">B</div></div>
|
||||
<div class="candle up" style="height: 55px;"></div>
|
||||
<div class="candle up" style="height: 70px;"></div>
|
||||
<div class="candle up" style="height: 60px;"></div>
|
||||
<div class="candle down" style="height: 35px;"><div class="signal sell">S</div></div>
|
||||
<div class="candle down" style="height: 50px;"></div>
|
||||
<div class="candle up" style="height: 40px;"></div>
|
||||
<div class="candle down" style="height: 25px;"><div class="signal buy">B</div></div>
|
||||
<div class="candle up" style="height: 45px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accuracy-card">
|
||||
<div class="card-header" style="margin-bottom: 12px;">
|
||||
<span class="card-title">🎯 전략 정확도</span>
|
||||
</div>
|
||||
<div class="accuracy-row">
|
||||
<div class="accuracy-ring">
|
||||
<div class="accuracy-inner">
|
||||
<div class="accuracy-pct">70%</div>
|
||||
<div class="accuracy-text">정확도</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="accuracy-bars">
|
||||
<div class="acc-bar">
|
||||
<div class="acc-bar-header">
|
||||
<span style="color: #9ca3af;">매수</span>
|
||||
<span style="color: #22c55e;">76%</span>
|
||||
</div>
|
||||
<div class="acc-bar-bg"><div class="acc-bar-fill green" style="width: 76%;"></div></div>
|
||||
</div>
|
||||
<div class="acc-bar">
|
||||
<div class="acc-bar-header">
|
||||
<span style="color: #9ca3af;">매도</span>
|
||||
<span style="color: #8b5cf6;">64%</span>
|
||||
</div>
|
||||
<div class="acc-bar-bg"><div class="acc-bar-fill purple" style="width: 64%;"></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="trades-card">
|
||||
<div class="card-header" style="margin-bottom: 12px;">
|
||||
<span class="card-title">📋 최근 거래</span>
|
||||
<span style="font-size: 11px; color: #8b5cf6;">전체보기 →</span>
|
||||
</div>
|
||||
<div class="trade-item">
|
||||
<div class="trade-badge sell">S</div>
|
||||
<div class="trade-info">
|
||||
<div class="trade-type">매도</div>
|
||||
<div class="trade-time">03.15 14:00</div>
|
||||
</div>
|
||||
<div class="trade-result">
|
||||
<div class="trade-price">₩58,450,000</div>
|
||||
<div class="trade-pnl profit">+5.2%</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="trade-item">
|
||||
<div class="trade-badge buy">B</div>
|
||||
<div class="trade-info">
|
||||
<div class="trade-type">매수</div>
|
||||
<div class="trade-time">03.12 09:00</div>
|
||||
</div>
|
||||
<div class="trade-result">
|
||||
<div class="trade-price">₩55,520,000</div>
|
||||
<div class="trade-pnl">-</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="run-btn">▶ 백테스트 실행</button>
|
||||
|
||||
<nav class="bottom-nav">
|
||||
<div class="nav-item"><span class="nav-icon">🏠</span>홈</div>
|
||||
<div class="nav-item active"><span class="nav-icon">📊</span>백테스트</div>
|
||||
<div class="nav-item"><span class="nav-icon">📋</span>거래</div>
|
||||
<div class="nav-item"><span class="nav-icon">⚙️</span>설정</div>
|
||||
</nav>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,261 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=375">
|
||||
<title>Mobile-02 카드 스크롤</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: 'Noto Sans KR', sans-serif; background: #f8fafc; color: #1e293b; width: 375px; min-height: 812px; padding-bottom: 90px; }
|
||||
|
||||
.header { background: #fff; padding: 50px 20px 16px; border-bottom: 1px solid #e2e8f0; }
|
||||
.header-row { display: flex; justify-content: space-between; align-items: center; }
|
||||
.header-title { font-size: 24px; font-weight: 700; }
|
||||
.version-badge { background: #dbeafe; color: #1d4ed8; padding: 4px 10px; border-radius: 10px; font-size: 10px; }
|
||||
|
||||
.container { padding: 16px; }
|
||||
|
||||
/* 카드 */
|
||||
.card { background: #fff; border-radius: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.08); margin-bottom: 16px; overflow: hidden; }
|
||||
.card-header { padding: 18px 20px; border-bottom: 1px solid #f1f5f9; display: flex; justify-content: space-between; align-items: center; }
|
||||
.card-title { font-size: 15px; font-weight: 600; }
|
||||
.card-body { padding: 20px; }
|
||||
|
||||
/* 설정 */
|
||||
.config-row { display: flex; gap: 10px; margin-bottom: 12px; }
|
||||
.config-field { flex: 1; }
|
||||
.config-label { font-size: 11px; color: #64748b; margin-bottom: 4px; }
|
||||
.config-input { width: 100%; padding: 12px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; font-size: 13px; }
|
||||
.run-btn { width: 100%; padding: 16px; background: linear-gradient(135deg, #3b82f6, #2563eb); border: none; border-radius: 12px; color: #fff; font-size: 15px; font-weight: 600; cursor: pointer; margin-top: 8px; }
|
||||
|
||||
/* 결과 헤더 */
|
||||
.result-card { background: linear-gradient(135deg, #3b82f6, #2563eb); color: #fff; }
|
||||
.result-card .card-body { display: flex; justify-content: space-between; align-items: center; }
|
||||
.result-symbol { font-size: 20px; font-weight: 700; }
|
||||
.result-meta { font-size: 12px; opacity: 0.9; margin-top: 4px; }
|
||||
.result-value { font-size: 36px; font-weight: 700; }
|
||||
.result-amount { font-size: 13px; opacity: 0.9; text-align: right; }
|
||||
|
||||
/* 메트릭 스크롤 */
|
||||
.metrics-scroll { display: flex; gap: 12px; overflow-x: auto; padding: 4px 0 12px; }
|
||||
.metric-card { flex-shrink: 0; width: 120px; background: #f8fafc; border-radius: 14px; padding: 16px; text-align: center; }
|
||||
.metric-icon { font-size: 24px; margin-bottom: 8px; }
|
||||
.metric-value { font-size: 20px; font-weight: 700; margin-bottom: 4px; }
|
||||
.metric-value.green { color: #16a34a; }
|
||||
.metric-value.red { color: #dc2626; }
|
||||
.metric-label { font-size: 10px; color: #64748b; }
|
||||
|
||||
/* 차트 */
|
||||
.chart-area { height: 180px; background: #f8fafc; border-radius: 14px; position: relative; overflow: hidden; border: 1px solid #e2e8f0; }
|
||||
.chart-candles { position: absolute; inset: 20px 12px 35px 12px; display: flex; align-items: flex-end; justify-content: space-around; }
|
||||
.candle { width: 10px; border-radius: 2px; position: relative; }
|
||||
.candle.up { background: #16a34a; }
|
||||
.candle.down { background: #dc2626; }
|
||||
.signal { position: absolute; width: 18px; height: 18px; border-radius: 50%; font-size: 9px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
|
||||
.signal.buy { bottom: -22px; left: 50%; transform: translateX(-50%); background: #dcfce7; color: #16a34a; border: 2px solid #16a34a; }
|
||||
.signal.sell { top: -22px; left: 50%; transform: translateX(-50%); background: #fee2e2; color: #dc2626; border: 2px solid #dc2626; }
|
||||
|
||||
/* 정확도 */
|
||||
.accuracy-row { display: flex; align-items: center; gap: 16px; }
|
||||
.accuracy-ring { width: 90px; height: 90px; border-radius: 50%; background: conic-gradient(#16a34a 0deg 252deg, #e2e8f0 252deg 360deg); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
|
||||
.accuracy-inner { width: 70px; height: 70px; background: #fff; border-radius: 50%; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.accuracy-pct { font-size: 22px; font-weight: 700; color: #16a34a; }
|
||||
.accuracy-text { font-size: 9px; color: #64748b; }
|
||||
.accuracy-bars { flex: 1; }
|
||||
.acc-bar { margin-bottom: 10px; }
|
||||
.acc-bar-header { display: flex; justify-content: space-between; font-size: 11px; margin-bottom: 4px; }
|
||||
.acc-bar-bg { height: 8px; background: #e2e8f0; border-radius: 4px; overflow: hidden; }
|
||||
.acc-bar-fill { height: 100%; border-radius: 4px; }
|
||||
.acc-bar-fill.green { background: linear-gradient(90deg, #16a34a, #22c55e); }
|
||||
.acc-bar-fill.orange { background: linear-gradient(90deg, #ea580c, #f97316); }
|
||||
|
||||
/* 거래 */
|
||||
.trade-item { display: flex; align-items: center; padding: 14px; background: #f8fafc; border-radius: 14px; margin-bottom: 10px; }
|
||||
.trade-badge { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 700; margin-right: 14px; }
|
||||
.trade-badge.buy { background: #dcfce7; color: #16a34a; }
|
||||
.trade-badge.sell { background: #fee2e2; color: #dc2626; }
|
||||
.trade-info { flex: 1; }
|
||||
.trade-type { font-size: 14px; font-weight: 500; }
|
||||
.trade-time { font-size: 12px; color: #94a3b8; }
|
||||
.trade-result { text-align: right; }
|
||||
.trade-price { font-size: 13px; font-weight: 500; }
|
||||
.trade-pnl { font-size: 13px; font-weight: 600; }
|
||||
.trade-pnl.profit { color: #16a34a; }
|
||||
.trade-pnl.loss { color: #dc2626; }
|
||||
|
||||
/* 바텀 네비게이션 */
|
||||
.bottom-nav { position: fixed; bottom: 0; left: 0; width: 375px; background: #fff; border-top: 1px solid #e2e8f0; display: flex; justify-content: space-around; padding: 10px 0 28px; }
|
||||
.nav-item { display: flex; flex-direction: column; align-items: center; gap: 4px; color: #94a3b8; font-size: 10px; }
|
||||
.nav-item.active { color: #3b82f6; }
|
||||
.nav-icon { font-size: 22px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="header">
|
||||
<div class="header-row">
|
||||
<span class="header-title">백테스트</span>
|
||||
<span class="version-badge">Mobile-02</span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="container">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span class="card-title">⚙️ 설정</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="config-row">
|
||||
<div class="config-field">
|
||||
<div class="config-label">종목</div>
|
||||
<select class="config-input"><option>BTC/KRW</option></select>
|
||||
</div>
|
||||
<div class="config-field">
|
||||
<div class="config-label">전략</div>
|
||||
<select class="config-input"><option>MACD+RSI</option></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="config-row">
|
||||
<div class="config-field">
|
||||
<div class="config-label">시간봉</div>
|
||||
<select class="config-input"><option>1시간</option></select>
|
||||
</div>
|
||||
<div class="config-field">
|
||||
<div class="config-label">기간</div>
|
||||
<select class="config-input"><option>3개월</option></select>
|
||||
</div>
|
||||
</div>
|
||||
<button class="run-btn">▶ 백테스트 실행</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card result-card">
|
||||
<div class="card-body">
|
||||
<div>
|
||||
<div class="result-symbol">BTC/KRW</div>
|
||||
<div class="result-meta">MACD+RSI · 1시간</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="result-value">+23.5%</div>
|
||||
<div class="result-amount">₩2,350,000</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="metrics-scroll">
|
||||
<div class="metric-card">
|
||||
<div class="metric-icon">💰</div>
|
||||
<div class="metric-value">₩12.35M</div>
|
||||
<div class="metric-label">최종 자산</div>
|
||||
</div>
|
||||
<div class="metric-card">
|
||||
<div class="metric-icon">🎯</div>
|
||||
<div class="metric-value green">68%</div>
|
||||
<div class="metric-label">승률</div>
|
||||
</div>
|
||||
<div class="metric-card">
|
||||
<div class="metric-icon">🔄</div>
|
||||
<div class="metric-value">25회</div>
|
||||
<div class="metric-label">총 거래</div>
|
||||
</div>
|
||||
<div class="metric-card">
|
||||
<div class="metric-icon">📉</div>
|
||||
<div class="metric-value red">-8.2%</div>
|
||||
<div class="metric-label">MDD</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span class="card-title">📈 가격 차트</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="chart-area">
|
||||
<div class="chart-candles">
|
||||
<div class="candle up" style="height: 35px;"></div>
|
||||
<div class="candle up" style="height: 50px;"></div>
|
||||
<div class="candle down" style="height: 30px;"></div>
|
||||
<div class="candle down" style="height: 45px;"><div class="signal buy">B</div></div>
|
||||
<div class="candle up" style="height: 60px;"></div>
|
||||
<div class="candle up" style="height: 75px;"></div>
|
||||
<div class="candle up" style="height: 65px;"></div>
|
||||
<div class="candle down" style="height: 40px;"><div class="signal sell">S</div></div>
|
||||
<div class="candle down" style="height: 55px;"></div>
|
||||
<div class="candle up" style="height: 45px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span class="card-title">🎯 정확도</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="accuracy-row">
|
||||
<div class="accuracy-ring">
|
||||
<div class="accuracy-inner">
|
||||
<div class="accuracy-pct">70%</div>
|
||||
<div class="accuracy-text">정확도</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="accuracy-bars">
|
||||
<div class="acc-bar">
|
||||
<div class="acc-bar-header">
|
||||
<span style="color: #64748b;">매수</span>
|
||||
<span style="color: #16a34a; font-weight: 600;">76%</span>
|
||||
</div>
|
||||
<div class="acc-bar-bg"><div class="acc-bar-fill green" style="width: 76%;"></div></div>
|
||||
</div>
|
||||
<div class="acc-bar">
|
||||
<div class="acc-bar-header">
|
||||
<span style="color: #64748b;">매도</span>
|
||||
<span style="color: #ea580c; font-weight: 600;">64%</span>
|
||||
</div>
|
||||
<div class="acc-bar-bg"><div class="acc-bar-fill orange" style="width: 64%;"></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span class="card-title">📋 거래 내역</span>
|
||||
<span style="font-size: 12px; color: #3b82f6;">전체 →</span>
|
||||
</div>
|
||||
<div class="card-body" style="padding-top: 12px;">
|
||||
<div class="trade-item">
|
||||
<div class="trade-badge sell">S</div>
|
||||
<div class="trade-info">
|
||||
<div class="trade-type">매도</div>
|
||||
<div class="trade-time">03.15 14:00</div>
|
||||
</div>
|
||||
<div class="trade-result">
|
||||
<div class="trade-price">₩58,450,000</div>
|
||||
<div class="trade-pnl profit">+5.2%</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="trade-item">
|
||||
<div class="trade-badge buy">B</div>
|
||||
<div class="trade-info">
|
||||
<div class="trade-type">매수</div>
|
||||
<div class="trade-time">03.12 09:00</div>
|
||||
</div>
|
||||
<div class="trade-result">
|
||||
<div class="trade-price">₩55,520,000</div>
|
||||
<div class="trade-pnl">-</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="bottom-nav">
|
||||
<div class="nav-item"><span class="nav-icon">🏠</span>홈</div>
|
||||
<div class="nav-item active"><span class="nav-icon">📊</span>백테스트</div>
|
||||
<div class="nav-item"><span class="nav-icon">📋</span>거래</div>
|
||||
<div class="nav-item"><span class="nav-icon">⚙️</span>설정</div>
|
||||
</nav>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,200 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=414">
|
||||
<title>Mobile-03 풀스크린 차트</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: 'Noto Sans KR', sans-serif; background: #000; color: #fff; width: 414px; height: 896px; overflow: hidden; }
|
||||
|
||||
/* 상단 오버레이 */
|
||||
.top-overlay { position: absolute; top: 0; left: 0; right: 0; z-index: 10; background: linear-gradient(180deg, rgba(0,0,0,0.9) 0%, transparent 100%); padding: 50px 20px 30px; }
|
||||
.header-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
|
||||
.back-btn { background: none; border: none; color: #fff; font-size: 24px; cursor: pointer; }
|
||||
.header-title { font-size: 18px; font-weight: 600; }
|
||||
.version-badge { background: rgba(34, 197, 94, 0.2); color: #22c55e; padding: 4px 10px; border-radius: 10px; font-size: 10px; }
|
||||
|
||||
/* 심볼 정보 */
|
||||
.symbol-info { display: flex; justify-content: space-between; align-items: flex-end; }
|
||||
.symbol-left h2 { font-size: 24px; font-weight: 700; }
|
||||
.symbol-left p { font-size: 12px; color: #9ca3af; margin-top: 2px; }
|
||||
.symbol-right { text-align: right; }
|
||||
.price { font-size: 28px; font-weight: 700; color: #22c55e; }
|
||||
.change { font-size: 14px; color: #22c55e; }
|
||||
|
||||
/* 전체 화면 차트 */
|
||||
.fullscreen-chart { position: absolute; inset: 0; background: #000; }
|
||||
.chart-grid { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(39, 39, 42, 0.2) 1px, transparent 1px), linear-gradient(rgba(39, 39, 42, 0.2) 1px, transparent 1px); background-size: 40px 35px; }
|
||||
.chart-candles { position: absolute; top: 180px; bottom: 320px; left: 12px; right: 12px; display: flex; align-items: flex-end; justify-content: space-around; }
|
||||
.candle { width: 10px; border-radius: 2px; position: relative; }
|
||||
.candle.up { background: #22c55e; }
|
||||
.candle.down { background: #ef4444; }
|
||||
.signal { position: absolute; width: 22px; height: 22px; border-radius: 50%; font-size: 10px; font-weight: 700; display: flex; align-items: center; justify-content: center; box-shadow: 0 0 10px; }
|
||||
.signal.buy { bottom: -28px; left: 50%; transform: translateX(-50%); background: rgba(34, 197, 94, 0.3); color: #22c55e; border: 2px solid #22c55e; box-shadow: 0 0 15px rgba(34, 197, 94, 0.5); }
|
||||
.signal.sell { top: -28px; left: 50%; transform: translateX(-50%); background: rgba(239, 68, 68, 0.3); color: #ef4444; border: 2px solid #ef4444; box-shadow: 0 0 15px rgba(239, 68, 68, 0.5); }
|
||||
|
||||
/* 하단 오버레이 */
|
||||
.bottom-overlay { position: absolute; bottom: 0; left: 0; right: 0; z-index: 10; background: linear-gradient(0deg, rgba(0,0,0,0.95) 0%, transparent 100%); padding: 40px 20px 40px; }
|
||||
|
||||
/* 수익률 */
|
||||
.return-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }
|
||||
.return-box { background: rgba(34, 197, 94, 0.15); border: 1px solid rgba(34, 197, 94, 0.3); border-radius: 14px; padding: 16px 20px; flex: 1; margin-right: 12px; }
|
||||
.return-label { font-size: 11px; color: #9ca3af; margin-bottom: 4px; }
|
||||
.return-value { font-size: 32px; font-weight: 700; color: #22c55e; }
|
||||
.accuracy-box { background: rgba(139, 92, 246, 0.15); border: 1px solid rgba(139, 92, 246, 0.3); border-radius: 14px; padding: 16px 20px; text-align: center; width: 100px; }
|
||||
.accuracy-value { font-size: 28px; font-weight: 700; color: #8b5cf6; }
|
||||
.accuracy-label { font-size: 10px; color: #9ca3af; }
|
||||
|
||||
/* 메트릭 스크롤 */
|
||||
.metrics-scroll { display: flex; gap: 10px; overflow-x: auto; margin-bottom: 20px; padding-bottom: 4px; }
|
||||
.metric-pill { flex-shrink: 0; background: rgba(255,255,255,0.1); border-radius: 12px; padding: 12px 16px; display: flex; align-items: center; gap: 10px; }
|
||||
.metric-pill-icon { font-size: 18px; }
|
||||
.metric-pill-value { font-size: 16px; font-weight: 600; }
|
||||
.metric-pill-value.green { color: #22c55e; }
|
||||
.metric-pill-value.red { color: #ef4444; }
|
||||
.metric-pill-label { font-size: 10px; color: #71717a; }
|
||||
|
||||
/* 거래 내역 슬라이드 */
|
||||
.trades-section { }
|
||||
.section-header { display: flex; justify-content: space-between; margin-bottom: 12px; }
|
||||
.section-title { font-size: 13px; font-weight: 600; }
|
||||
.section-link { font-size: 11px; color: #8b5cf6; }
|
||||
.trades-scroll { display: flex; gap: 10px; overflow-x: auto; }
|
||||
.trade-card { flex-shrink: 0; background: rgba(255,255,255,0.08); border-radius: 14px; padding: 14px; width: 160px; }
|
||||
.trade-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
|
||||
.trade-badge { padding: 4px 10px; border-radius: 6px; font-size: 10px; font-weight: 700; }
|
||||
.trade-badge.buy { background: rgba(34, 197, 94, 0.2); color: #22c55e; }
|
||||
.trade-badge.sell { background: rgba(239, 68, 68, 0.2); color: #ef4444; }
|
||||
.trade-pnl { font-size: 12px; font-weight: 600; }
|
||||
.trade-pnl.profit { color: #22c55e; }
|
||||
.trade-pnl.loss { color: #ef4444; }
|
||||
.trade-price { font-size: 14px; font-weight: 600; margin-bottom: 4px; }
|
||||
.trade-time { font-size: 10px; color: #6b7280; }
|
||||
|
||||
/* 설정 버튼 */
|
||||
.settings-btn { position: absolute; top: 50px; right: 20px; width: 40px; height: 40px; background: rgba(255,255,255,0.1); border: none; border-radius: 12px; color: #fff; font-size: 18px; cursor: pointer; z-index: 20; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="fullscreen-chart">
|
||||
<div class="chart-grid"></div>
|
||||
<div class="chart-candles">
|
||||
<div class="candle up" style="height: 40px;"></div>
|
||||
<div class="candle up" style="height: 55px;"></div>
|
||||
<div class="candle down" style="height: 35px;"></div>
|
||||
<div class="candle down" style="height: 50px;"><div class="signal buy">B</div></div>
|
||||
<div class="candle up" style="height: 65px;"></div>
|
||||
<div class="candle up" style="height: 85px;"></div>
|
||||
<div class="candle up" style="height: 75px;"></div>
|
||||
<div class="candle down" style="height: 45px;"><div class="signal sell">S</div></div>
|
||||
<div class="candle down" style="height: 60px;"></div>
|
||||
<div class="candle up" style="height: 50px;"></div>
|
||||
<div class="candle down" style="height: 35px;"><div class="signal buy">B</div></div>
|
||||
<div class="candle up" style="height: 55px;"></div>
|
||||
<div class="candle up" style="height: 70px;"></div>
|
||||
<div class="candle up" style="height: 80px;"></div>
|
||||
<div class="candle down" style="height: 40px;"></div>
|
||||
<div class="candle up" style="height: 60px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="top-overlay">
|
||||
<div class="header-row">
|
||||
<button class="back-btn">←</button>
|
||||
<span class="header-title">백테스트</span>
|
||||
<span class="version-badge">Mobile-03</span>
|
||||
</div>
|
||||
<div class="symbol-info">
|
||||
<div class="symbol-left">
|
||||
<h2>BTC/KRW</h2>
|
||||
<p>MACD+RSI · 1H · 3개월</p>
|
||||
</div>
|
||||
<div class="symbol-right">
|
||||
<div class="price">₩58,450,000</div>
|
||||
<div class="change">+2.34%</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="settings-btn">⚙️</button>
|
||||
|
||||
<div class="bottom-overlay">
|
||||
<div class="return-row">
|
||||
<div class="return-box">
|
||||
<div class="return-label">💰 총 수익률</div>
|
||||
<div class="return-value">+23.5%</div>
|
||||
</div>
|
||||
<div class="accuracy-box">
|
||||
<div class="accuracy-value">70%</div>
|
||||
<div class="accuracy-label">🎯 정확도</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="metrics-scroll">
|
||||
<div class="metric-pill">
|
||||
<span class="metric-pill-icon">💰</span>
|
||||
<div>
|
||||
<div class="metric-pill-value">₩12.35M</div>
|
||||
<div class="metric-pill-label">최종 자산</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="metric-pill">
|
||||
<span class="metric-pill-icon">🎯</span>
|
||||
<div>
|
||||
<div class="metric-pill-value green">68%</div>
|
||||
<div class="metric-pill-label">승률</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="metric-pill">
|
||||
<span class="metric-pill-icon">🔄</span>
|
||||
<div>
|
||||
<div class="metric-pill-value">25회</div>
|
||||
<div class="metric-pill-label">총 거래</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="metric-pill">
|
||||
<span class="metric-pill-icon">📉</span>
|
||||
<div>
|
||||
<div class="metric-pill-value red">-8.2%</div>
|
||||
<div class="metric-pill-label">MDD</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="trades-section">
|
||||
<div class="section-header">
|
||||
<span class="section-title">📋 최근 거래</span>
|
||||
<span class="section-link">전체보기 →</span>
|
||||
</div>
|
||||
<div class="trades-scroll">
|
||||
<div class="trade-card">
|
||||
<div class="trade-header">
|
||||
<span class="trade-badge sell">SELL</span>
|
||||
<span class="trade-pnl profit">+5.2%</span>
|
||||
</div>
|
||||
<div class="trade-price">₩58,450,000</div>
|
||||
<div class="trade-time">03.15 14:00</div>
|
||||
</div>
|
||||
<div class="trade-card">
|
||||
<div class="trade-header">
|
||||
<span class="trade-badge buy">BUY</span>
|
||||
<span class="trade-pnl">-</span>
|
||||
</div>
|
||||
<div class="trade-price">₩55,520,000</div>
|
||||
<div class="trade-time">03.12 09:00</div>
|
||||
</div>
|
||||
<div class="trade-card">
|
||||
<div class="trade-header">
|
||||
<span class="trade-badge sell">SELL</span>
|
||||
<span class="trade-pnl loss">-2.1%</span>
|
||||
</div>
|
||||
<div class="trade-price">₩54,200,000</div>
|
||||
<div class="trade-time">03.08 16:00</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,160 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=390">
|
||||
<title>Mobile-04 바텀시트</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: 'Noto Sans KR', sans-serif; background: #18181b; color: #fafafa; width: 390px; height: 844px; overflow: hidden; position: relative; }
|
||||
|
||||
/* 메인 화면 */
|
||||
.main-screen { height: 100%; display: flex; flex-direction: column; }
|
||||
|
||||
/* 헤더 */
|
||||
.header { padding: 50px 20px 16px; background: #18181b; }
|
||||
.header-row { display: flex; justify-content: space-between; align-items: center; }
|
||||
.header-title { font-size: 22px; font-weight: 700; }
|
||||
.version-badge { background: rgba(59, 130, 246, 0.2); color: #60a5fa; padding: 4px 10px; border-radius: 10px; font-size: 10px; }
|
||||
|
||||
/* 종목 선택 */
|
||||
.symbol-selector { padding: 0 20px 16px; }
|
||||
.symbol-card { background: linear-gradient(135deg, #1e3a5f 0%, #18181b 100%); border-radius: 18px; padding: 18px; display: flex; align-items: center; border: 1px solid rgba(59, 130, 246, 0.3); }
|
||||
.symbol-icon { width: 48px; height: 48px; background: linear-gradient(135deg, #f7931a, #ffab00); border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 22px; font-weight: 700; margin-right: 14px; }
|
||||
.symbol-info { flex: 1; }
|
||||
.symbol-name { font-size: 18px; font-weight: 700; }
|
||||
.symbol-meta { font-size: 12px; color: #9ca3af; }
|
||||
.symbol-price { text-align: right; }
|
||||
.price-value { font-size: 18px; font-weight: 700; }
|
||||
.price-change { font-size: 13px; color: #22c55e; }
|
||||
|
||||
/* 차트 영역 */
|
||||
.chart-area { flex: 1; position: relative; background: linear-gradient(90deg, rgba(39, 39, 42, 0.15) 1px, transparent 1px), linear-gradient(rgba(39, 39, 42, 0.15) 1px, transparent 1px); background-size: 35px 30px; margin: 0 12px; border-radius: 16px; overflow: hidden; }
|
||||
.chart-candles { position: absolute; inset: 30px 12px 40px 12px; display: flex; align-items: flex-end; justify-content: space-around; }
|
||||
.candle { width: 8px; border-radius: 2px; position: relative; }
|
||||
.candle.up { background: #22c55e; }
|
||||
.candle.down { background: #ef4444; }
|
||||
.signal { position: absolute; width: 18px; height: 18px; border-radius: 50%; font-size: 9px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
|
||||
.signal.buy { bottom: -22px; left: 50%; transform: translateX(-50%); background: rgba(34, 197, 94, 0.3); color: #22c55e; border: 2px solid #22c55e; }
|
||||
.signal.sell { top: -22px; left: 50%; transform: translateX(-50%); background: rgba(239, 68, 68, 0.3); color: #ef4444; border: 2px solid #ef4444; }
|
||||
.chart-timeframes { position: absolute; top: 10px; right: 10px; display: flex; gap: 4px; }
|
||||
.tf-btn { padding: 6px 10px; background: rgba(255,255,255,0.1); border: none; border-radius: 6px; color: #71717a; font-size: 10px; }
|
||||
.tf-btn.active { background: #3b82f6; color: #fff; }
|
||||
|
||||
/* 바텀시트 */
|
||||
.bottom-sheet { position: absolute; bottom: 0; left: 0; right: 0; background: #27272a; border-radius: 24px 24px 0 0; padding: 12px 20px 40px; box-shadow: 0 -10px 40px rgba(0,0,0,0.5); }
|
||||
.sheet-handle { width: 40px; height: 4px; background: #52525b; border-radius: 2px; margin: 0 auto 16px; }
|
||||
|
||||
/* 수익률 */
|
||||
.return-row { display: flex; gap: 12px; margin-bottom: 20px; }
|
||||
.return-card { flex: 1; background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.2); border-radius: 14px; padding: 16px; text-align: center; }
|
||||
.return-value { font-size: 32px; font-weight: 700; color: #22c55e; }
|
||||
.return-label { font-size: 11px; color: #9ca3af; margin-top: 4px; }
|
||||
.accuracy-card { width: 100px; background: rgba(59, 130, 246, 0.1); border: 1px solid rgba(59, 130, 246, 0.2); border-radius: 14px; padding: 16px; text-align: center; }
|
||||
.accuracy-value { font-size: 26px; font-weight: 700; color: #3b82f6; }
|
||||
.accuracy-label { font-size: 10px; color: #9ca3af; margin-top: 4px; }
|
||||
|
||||
/* 메트릭 그리드 */
|
||||
.metrics-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 20px; }
|
||||
.metric-item { background: rgba(255,255,255,0.05); border-radius: 12px; padding: 14px; text-align: center; }
|
||||
.metric-value { font-size: 18px; font-weight: 700; margin-bottom: 4px; }
|
||||
.metric-value.green { color: #22c55e; }
|
||||
.metric-value.red { color: #ef4444; }
|
||||
.metric-label { font-size: 9px; color: #71717a; }
|
||||
|
||||
/* 실행 버튼 */
|
||||
.action-row { display: flex; gap: 10px; }
|
||||
.settings-btn { flex: 1; padding: 16px; background: rgba(255,255,255,0.1); border: none; border-radius: 14px; color: #fff; font-size: 14px; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 8px; }
|
||||
.run-btn { flex: 2; padding: 16px; background: linear-gradient(135deg, #3b82f6, #2563eb); border: none; border-radius: 14px; color: #fff; font-size: 15px; font-weight: 600; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 8px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="main-screen">
|
||||
<header class="header">
|
||||
<div class="header-row">
|
||||
<span class="header-title">백테스트</span>
|
||||
<span class="version-badge">Mobile-04</span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="symbol-selector">
|
||||
<div class="symbol-card">
|
||||
<div class="symbol-icon">₿</div>
|
||||
<div class="symbol-info">
|
||||
<div class="symbol-name">BTC/KRW</div>
|
||||
<div class="symbol-meta">비트코인 · MACD+RSI</div>
|
||||
</div>
|
||||
<div class="symbol-price">
|
||||
<div class="price-value">₩58.45M</div>
|
||||
<div class="price-change">+2.34%</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="chart-area">
|
||||
<div class="chart-timeframes">
|
||||
<button class="tf-btn">15m</button>
|
||||
<button class="tf-btn active">1H</button>
|
||||
<button class="tf-btn">4H</button>
|
||||
<button class="tf-btn">1D</button>
|
||||
</div>
|
||||
<div class="chart-candles">
|
||||
<div class="candle up" style="height: 35px;"></div>
|
||||
<div class="candle up" style="height: 50px;"></div>
|
||||
<div class="candle down" style="height: 30px;"></div>
|
||||
<div class="candle down" style="height: 45px;"><div class="signal buy">B</div></div>
|
||||
<div class="candle up" style="height: 60px;"></div>
|
||||
<div class="candle up" style="height: 80px;"></div>
|
||||
<div class="candle up" style="height: 70px;"></div>
|
||||
<div class="candle down" style="height: 40px;"><div class="signal sell">S</div></div>
|
||||
<div class="candle down" style="height: 55px;"></div>
|
||||
<div class="candle up" style="height: 45px;"></div>
|
||||
<div class="candle down" style="height: 30px;"><div class="signal buy">B</div></div>
|
||||
<div class="candle up" style="height: 50px;"></div>
|
||||
<div class="candle up" style="height: 65px;"></div>
|
||||
<div class="candle up" style="height: 75px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bottom-sheet">
|
||||
<div class="sheet-handle"></div>
|
||||
|
||||
<div class="return-row">
|
||||
<div class="return-card">
|
||||
<div class="return-value">+23.5%</div>
|
||||
<div class="return-label">💰 총 수익률</div>
|
||||
</div>
|
||||
<div class="accuracy-card">
|
||||
<div class="accuracy-value">70%</div>
|
||||
<div class="accuracy-label">🎯 정확도</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="metrics-grid">
|
||||
<div class="metric-item">
|
||||
<div class="metric-value">₩12.3M</div>
|
||||
<div class="metric-label">최종 자산</div>
|
||||
</div>
|
||||
<div class="metric-item">
|
||||
<div class="metric-value green">68%</div>
|
||||
<div class="metric-label">승률</div>
|
||||
</div>
|
||||
<div class="metric-item">
|
||||
<div class="metric-value">25</div>
|
||||
<div class="metric-label">거래</div>
|
||||
</div>
|
||||
<div class="metric-item">
|
||||
<div class="metric-value red">-8.2%</div>
|
||||
<div class="metric-label">MDD</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="action-row">
|
||||
<button class="settings-btn">⚙️ 설정</button>
|
||||
<button class="run-btn">▶ 백테스트 실행</button>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,201 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=375">
|
||||
<title>Mobile-05 미니멀 다크</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: 'Inter', sans-serif; background: #09090b; color: #fafafa; width: 375px; min-height: 812px; padding-bottom: 100px; }
|
||||
|
||||
.header { padding: 54px 20px 20px; }
|
||||
.header-row { display: flex; justify-content: space-between; align-items: center; }
|
||||
.header-title { font-size: 28px; font-weight: 700; letter-spacing: -0.5px; }
|
||||
.version-badge { background: #27272a; color: #71717a; padding: 6px 12px; border-radius: 8px; font-size: 10px; }
|
||||
|
||||
.container { padding: 0 20px; }
|
||||
|
||||
/* 심볼 */
|
||||
.symbol-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 32px; }
|
||||
.symbol-name { font-size: 16px; color: #a1a1aa; }
|
||||
.symbol-price { font-size: 16px; font-weight: 600; color: #22c55e; }
|
||||
|
||||
/* 대형 수익률 */
|
||||
.big-return { text-align: center; margin-bottom: 40px; }
|
||||
.big-return-value { font-size: 72px; font-weight: 700; color: #22c55e; letter-spacing: -2px; }
|
||||
.big-return-label { font-size: 14px; color: #52525b; margin-top: 8px; }
|
||||
|
||||
/* 메트릭 리스트 */
|
||||
.metrics-list { margin-bottom: 32px; }
|
||||
.metric-row { display: flex; justify-content: space-between; align-items: center; padding: 18px 0; border-bottom: 1px solid #27272a; }
|
||||
.metric-row:last-child { border: none; }
|
||||
.metric-label { font-size: 14px; color: #71717a; }
|
||||
.metric-value { font-size: 16px; font-weight: 600; }
|
||||
.metric-value.green { color: #22c55e; }
|
||||
.metric-value.red { color: #ef4444; }
|
||||
|
||||
/* 정확도 바 */
|
||||
.accuracy-section { margin-bottom: 32px; }
|
||||
.accuracy-header { display: flex; justify-content: space-between; margin-bottom: 16px; }
|
||||
.accuracy-title { font-size: 14px; color: #71717a; }
|
||||
.accuracy-value { font-size: 16px; font-weight: 600; }
|
||||
.accuracy-bars { }
|
||||
.acc-bar { margin-bottom: 16px; }
|
||||
.acc-bar-header { display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 8px; }
|
||||
.acc-bar-label { color: #71717a; }
|
||||
.acc-bar-pct { font-weight: 600; }
|
||||
.acc-bar-pct.green { color: #22c55e; }
|
||||
.acc-bar-pct.orange { color: #f97316; }
|
||||
.acc-bar-bg { height: 8px; background: #27272a; border-radius: 4px; overflow: hidden; }
|
||||
.acc-bar-fill { height: 100%; border-radius: 4px; }
|
||||
.acc-bar-fill.green { background: linear-gradient(90deg, #22c55e, #4ade80); }
|
||||
.acc-bar-fill.orange { background: linear-gradient(90deg, #f97316, #fb923c); }
|
||||
|
||||
/* 미니 차트 */
|
||||
.mini-chart { background: #18181b; border-radius: 16px; padding: 20px; margin-bottom: 32px; }
|
||||
.chart-header { display: flex; justify-content: space-between; margin-bottom: 16px; }
|
||||
.chart-title { font-size: 12px; color: #71717a; }
|
||||
.chart-area { height: 120px; display: flex; align-items: flex-end; justify-content: space-around; gap: 4px; }
|
||||
.bar { width: 8px; border-radius: 2px; position: relative; }
|
||||
.bar.up { background: #22c55e; }
|
||||
.bar.down { background: #ef4444; }
|
||||
.dot { position: absolute; width: 14px; height: 14px; border-radius: 50%; font-size: 7px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
|
||||
.dot.buy { bottom: -18px; left: 50%; transform: translateX(-50%); background: #22c55e; color: #000; }
|
||||
.dot.sell { top: -18px; left: 50%; transform: translateX(-50%); background: #ef4444; color: #fff; }
|
||||
|
||||
/* 거래 */
|
||||
.trades-section { }
|
||||
.section-header { display: flex; justify-content: space-between; margin-bottom: 16px; }
|
||||
.section-title { font-size: 14px; font-weight: 600; }
|
||||
.section-link { font-size: 12px; color: #3b82f6; }
|
||||
.trade-item { display: flex; align-items: center; padding: 16px; background: #18181b; border-radius: 14px; margin-bottom: 10px; }
|
||||
.trade-type { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 700; margin-right: 14px; }
|
||||
.trade-type.buy { background: rgba(34, 197, 94, 0.15); color: #22c55e; }
|
||||
.trade-type.sell { background: rgba(239, 68, 68, 0.15); color: #ef4444; }
|
||||
.trade-info { flex: 1; }
|
||||
.trade-action { font-size: 14px; font-weight: 500; }
|
||||
.trade-time { font-size: 11px; color: #52525b; margin-top: 2px; }
|
||||
.trade-result { text-align: right; }
|
||||
.trade-price { font-size: 14px; font-weight: 500; }
|
||||
.trade-pnl { font-size: 12px; font-weight: 600; margin-top: 2px; }
|
||||
.trade-pnl.profit { color: #22c55e; }
|
||||
.trade-pnl.loss { color: #ef4444; }
|
||||
|
||||
/* 실행 버튼 */
|
||||
.run-btn { position: fixed; bottom: 36px; left: 20px; right: 20px; width: calc(100% - 40px); max-width: 335px; padding: 18px; background: #fafafa; border: none; border-radius: 14px; color: #09090b; font-size: 16px; font-weight: 600; cursor: pointer; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="header">
|
||||
<div class="header-row">
|
||||
<span class="header-title">백테스트</span>
|
||||
<span class="version-badge">Mobile-05</span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="container">
|
||||
<div class="symbol-row">
|
||||
<span class="symbol-name">BTC/KRW · 1H · MACD+RSI</span>
|
||||
<span class="symbol-price">+2.34%</span>
|
||||
</div>
|
||||
|
||||
<div class="big-return">
|
||||
<div class="big-return-value">+23.5%</div>
|
||||
<div class="big-return-label">₩10,000,000 → ₩12,350,000</div>
|
||||
</div>
|
||||
|
||||
<div class="metrics-list">
|
||||
<div class="metric-row">
|
||||
<span class="metric-label">최종 자산</span>
|
||||
<span class="metric-value">₩12,350,000</span>
|
||||
</div>
|
||||
<div class="metric-row">
|
||||
<span class="metric-label">승률</span>
|
||||
<span class="metric-value green">68% (17/25)</span>
|
||||
</div>
|
||||
<div class="metric-row">
|
||||
<span class="metric-label">최대 낙폭</span>
|
||||
<span class="metric-value red">-8.2%</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accuracy-section">
|
||||
<div class="accuracy-header">
|
||||
<span class="accuracy-title">전략 정확도</span>
|
||||
<span class="accuracy-value">70%</span>
|
||||
</div>
|
||||
<div class="accuracy-bars">
|
||||
<div class="acc-bar">
|
||||
<div class="acc-bar-header">
|
||||
<span class="acc-bar-label">매수</span>
|
||||
<span class="acc-bar-pct green">76%</span>
|
||||
</div>
|
||||
<div class="acc-bar-bg"><div class="acc-bar-fill green" style="width: 76%;"></div></div>
|
||||
</div>
|
||||
<div class="acc-bar">
|
||||
<div class="acc-bar-header">
|
||||
<span class="acc-bar-label">매도</span>
|
||||
<span class="acc-bar-pct orange">64%</span>
|
||||
</div>
|
||||
<div class="acc-bar-bg"><div class="acc-bar-fill orange" style="width: 64%;"></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mini-chart">
|
||||
<div class="chart-header">
|
||||
<span class="chart-title">가격 차트</span>
|
||||
<span class="chart-title">3개월</span>
|
||||
</div>
|
||||
<div class="chart-area">
|
||||
<div class="bar up" style="height: 30px;"></div>
|
||||
<div class="bar up" style="height: 45px;"></div>
|
||||
<div class="bar down" style="height: 25px;"></div>
|
||||
<div class="bar down" style="height: 40px;"><div class="dot buy">B</div></div>
|
||||
<div class="bar up" style="height: 55px;"></div>
|
||||
<div class="bar up" style="height: 70px;"></div>
|
||||
<div class="bar up" style="height: 60px;"></div>
|
||||
<div class="bar down" style="height: 35px;"><div class="dot sell">S</div></div>
|
||||
<div class="bar down" style="height: 50px;"></div>
|
||||
<div class="bar up" style="height: 40px;"></div>
|
||||
<div class="bar down" style="height: 25px;"><div class="dot buy">B</div></div>
|
||||
<div class="bar up" style="height: 45px;"></div>
|
||||
<div class="bar up" style="height: 55px;"></div>
|
||||
<div class="bar up" style="height: 65px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="trades-section">
|
||||
<div class="section-header">
|
||||
<span class="section-title">최근 거래</span>
|
||||
<span class="section-link">전체보기 →</span>
|
||||
</div>
|
||||
<div class="trade-item">
|
||||
<div class="trade-type sell">S</div>
|
||||
<div class="trade-info">
|
||||
<div class="trade-action">매도</div>
|
||||
<div class="trade-time">03.15 14:00</div>
|
||||
</div>
|
||||
<div class="trade-result">
|
||||
<div class="trade-price">₩58,450,000</div>
|
||||
<div class="trade-pnl profit">+5.2%</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="trade-item">
|
||||
<div class="trade-type buy">B</div>
|
||||
<div class="trade-info">
|
||||
<div class="trade-action">매수</div>
|
||||
<div class="trade-time">03.12 09:00</div>
|
||||
</div>
|
||||
<div class="trade-result">
|
||||
<div class="trade-price">₩55,520,000</div>
|
||||
<div class="trade-pnl">-</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="run-btn">백테스트 실행</button>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user