1188 lines
33 KiB
HTML
1188 lines
33 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ko">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>주식차트 패턴 매칭 검색 - UI 목업</title>
|
|
<style>
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
background: #0a0a0f;
|
|
color: #e4e4e7;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.container {
|
|
display: grid;
|
|
grid-template-columns: 320px 1fr 360px;
|
|
height: 100vh;
|
|
gap: 1px;
|
|
background: #27272a;
|
|
}
|
|
|
|
/* 왼쪽 패널 - 패턴 선택 */
|
|
.left-panel {
|
|
background: #18181b;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.panel-header {
|
|
padding: 16px 20px;
|
|
border-bottom: 1px solid #27272a;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.panel-title {
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
color: #fafafa;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.panel-title .icon {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.search-box {
|
|
padding: 12px 16px;
|
|
border-bottom: 1px solid #27272a;
|
|
}
|
|
|
|
.search-input {
|
|
width: 100%;
|
|
padding: 10px 14px;
|
|
background: #27272a;
|
|
border: 1px solid #3f3f46;
|
|
border-radius: 8px;
|
|
color: #fafafa;
|
|
font-size: 13px;
|
|
outline: none;
|
|
}
|
|
|
|
.search-input:focus {
|
|
border-color: #3b82f6;
|
|
}
|
|
|
|
.search-input::placeholder {
|
|
color: #71717a;
|
|
}
|
|
|
|
/* 패턴 카테고리 */
|
|
.pattern-categories {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding: 12px;
|
|
}
|
|
|
|
.category {
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.category-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 8px 12px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: #a1a1aa;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
}
|
|
|
|
.category-header .badge {
|
|
background: #27272a;
|
|
padding: 2px 8px;
|
|
border-radius: 10px;
|
|
font-size: 10px;
|
|
}
|
|
|
|
.pattern-list {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 8px;
|
|
}
|
|
|
|
.pattern-item {
|
|
background: #1f1f26;
|
|
border: 1px solid #27272a;
|
|
border-radius: 8px;
|
|
padding: 12px;
|
|
cursor: pointer;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.pattern-item:hover {
|
|
border-color: #3b82f6;
|
|
background: #252530;
|
|
}
|
|
|
|
.pattern-item.selected {
|
|
border-color: #22c55e;
|
|
background: rgba(34, 197, 94, 0.1);
|
|
}
|
|
|
|
.pattern-icon {
|
|
width: 100%;
|
|
height: 40px;
|
|
background: #27272a;
|
|
border-radius: 4px;
|
|
margin-bottom: 8px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.pattern-icon svg {
|
|
width: 90%;
|
|
height: 30px;
|
|
}
|
|
|
|
.pattern-name {
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
color: #d4d4d8;
|
|
text-align: center;
|
|
}
|
|
|
|
/* 중앙 패널 - 차트 및 그리기 영역 */
|
|
.center-panel {
|
|
background: #0f0f14;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.toolbar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 12px 20px;
|
|
background: #18181b;
|
|
border-bottom: 1px solid #27272a;
|
|
}
|
|
|
|
.toolbar-left {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
|
|
.toolbar-group {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 4px;
|
|
background: #27272a;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.tool-btn {
|
|
width: 36px;
|
|
height: 36px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: transparent;
|
|
border: none;
|
|
border-radius: 6px;
|
|
color: #a1a1aa;
|
|
cursor: pointer;
|
|
font-size: 16px;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.tool-btn:hover {
|
|
background: #3f3f46;
|
|
color: #fafafa;
|
|
}
|
|
|
|
.tool-btn.active {
|
|
background: #3b82f6;
|
|
color: white;
|
|
}
|
|
|
|
.divider {
|
|
width: 1px;
|
|
height: 24px;
|
|
background: #3f3f46;
|
|
margin: 0 8px;
|
|
}
|
|
|
|
.mode-toggle {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 8px 16px;
|
|
background: #27272a;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.mode-toggle label {
|
|
font-size: 12px;
|
|
color: #a1a1aa;
|
|
}
|
|
|
|
.toggle-switch {
|
|
width: 44px;
|
|
height: 24px;
|
|
background: #3f3f46;
|
|
border-radius: 12px;
|
|
position: relative;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.toggle-switch.active {
|
|
background: #22c55e;
|
|
}
|
|
|
|
.toggle-switch::after {
|
|
content: '';
|
|
position: absolute;
|
|
width: 18px;
|
|
height: 18px;
|
|
background: white;
|
|
border-radius: 50%;
|
|
top: 3px;
|
|
left: 3px;
|
|
transition: left 0.2s;
|
|
}
|
|
|
|
.toggle-switch.active::after {
|
|
left: 23px;
|
|
}
|
|
|
|
.toolbar-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
|
|
.btn {
|
|
padding: 10px 20px;
|
|
border-radius: 8px;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
border: none;
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.btn-primary {
|
|
background: linear-gradient(135deg, #3b82f6, #2563eb);
|
|
color: white;
|
|
}
|
|
|
|
.btn-primary:hover {
|
|
background: linear-gradient(135deg, #60a5fa, #3b82f6);
|
|
transform: translateY(-1px);
|
|
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4);
|
|
}
|
|
|
|
.btn-secondary {
|
|
background: #27272a;
|
|
color: #a1a1aa;
|
|
border: 1px solid #3f3f46;
|
|
}
|
|
|
|
.btn-secondary:hover {
|
|
background: #3f3f46;
|
|
color: #fafafa;
|
|
}
|
|
|
|
/* 차트 영역 */
|
|
.chart-area {
|
|
flex: 1;
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.chart-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 16px 20px;
|
|
}
|
|
|
|
.chart-title {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
|
|
.chart-title h2 {
|
|
font-size: 16px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.chart-title .subtitle {
|
|
font-size: 12px;
|
|
color: #71717a;
|
|
}
|
|
|
|
.chart-tabs {
|
|
display: flex;
|
|
gap: 4px;
|
|
background: #27272a;
|
|
padding: 4px;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.chart-tab {
|
|
padding: 8px 16px;
|
|
font-size: 12px;
|
|
color: #a1a1aa;
|
|
background: transparent;
|
|
border: none;
|
|
border-radius: 6px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.chart-tab.active {
|
|
background: #3f3f46;
|
|
color: #fafafa;
|
|
}
|
|
|
|
.canvas-container {
|
|
flex: 1;
|
|
margin: 0 20px 20px;
|
|
background: #18181b;
|
|
border-radius: 12px;
|
|
border: 2px dashed #3f3f46;
|
|
position: relative;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.canvas-container.drawing-mode {
|
|
border-color: #3b82f6;
|
|
background: rgba(59, 130, 246, 0.05);
|
|
}
|
|
|
|
.canvas-hint {
|
|
text-align: center;
|
|
color: #71717a;
|
|
}
|
|
|
|
.canvas-hint .icon {
|
|
font-size: 48px;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.canvas-hint h3 {
|
|
font-size: 16px;
|
|
margin-bottom: 8px;
|
|
color: #a1a1aa;
|
|
}
|
|
|
|
.canvas-hint p {
|
|
font-size: 13px;
|
|
}
|
|
|
|
/* 샘플 차트 패턴 (SVG) */
|
|
.sample-pattern {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.sample-pattern svg {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
/* 오른쪽 패널 - 검색 결과 */
|
|
.right-panel {
|
|
background: #18181b;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.search-options {
|
|
padding: 16px;
|
|
border-bottom: 1px solid #27272a;
|
|
}
|
|
|
|
.option-group {
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.option-group:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.option-label {
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: #71717a;
|
|
text-transform: uppercase;
|
|
margin-bottom: 8px;
|
|
display: block;
|
|
}
|
|
|
|
.option-select {
|
|
width: 100%;
|
|
padding: 10px 14px;
|
|
background: #27272a;
|
|
border: 1px solid #3f3f46;
|
|
border-radius: 8px;
|
|
color: #fafafa;
|
|
font-size: 13px;
|
|
outline: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.slider-container {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
|
|
.slider {
|
|
flex: 1;
|
|
height: 6px;
|
|
background: #3f3f46;
|
|
border-radius: 3px;
|
|
appearance: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.slider::-webkit-slider-thumb {
|
|
appearance: none;
|
|
width: 16px;
|
|
height: 16px;
|
|
background: #3b82f6;
|
|
border-radius: 50%;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.slider-value {
|
|
font-size: 12px;
|
|
color: #a1a1aa;
|
|
min-width: 40px;
|
|
text-align: right;
|
|
}
|
|
|
|
/* 검색 결과 */
|
|
.results-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 16px;
|
|
border-bottom: 1px solid #27272a;
|
|
}
|
|
|
|
.results-count {
|
|
font-size: 13px;
|
|
color: #a1a1aa;
|
|
}
|
|
|
|
.results-count strong {
|
|
color: #22c55e;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.sort-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 12px;
|
|
background: #27272a;
|
|
border: none;
|
|
border-radius: 6px;
|
|
color: #a1a1aa;
|
|
font-size: 11px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.results-list {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding: 12px;
|
|
}
|
|
|
|
.result-item {
|
|
background: #1f1f26;
|
|
border: 1px solid #27272a;
|
|
border-radius: 12px;
|
|
padding: 16px;
|
|
margin-bottom: 12px;
|
|
cursor: pointer;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.result-item:hover {
|
|
border-color: #3b82f6;
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.result-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.result-symbol {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.symbol-icon {
|
|
width: 36px;
|
|
height: 36px;
|
|
background: linear-gradient(135deg, #f59e0b, #d97706);
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 14px;
|
|
font-weight: 700;
|
|
color: white;
|
|
}
|
|
|
|
.symbol-info h4 {
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
color: #fafafa;
|
|
}
|
|
|
|
.symbol-info span {
|
|
font-size: 11px;
|
|
color: #71717a;
|
|
}
|
|
|
|
.match-score {
|
|
text-align: right;
|
|
}
|
|
|
|
.score-value {
|
|
font-size: 20px;
|
|
font-weight: 700;
|
|
color: #22c55e;
|
|
}
|
|
|
|
.score-label {
|
|
font-size: 10px;
|
|
color: #71717a;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.result-chart {
|
|
height: 80px;
|
|
background: #27272a;
|
|
border-radius: 8px;
|
|
margin-bottom: 12px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.result-chart svg {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.result-details {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 8px;
|
|
}
|
|
|
|
.detail-item {
|
|
text-align: center;
|
|
padding: 8px;
|
|
background: #27272a;
|
|
border-radius: 6px;
|
|
}
|
|
|
|
.detail-value {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: #fafafa;
|
|
}
|
|
|
|
.detail-value.up {
|
|
color: #22c55e;
|
|
}
|
|
|
|
.detail-value.down {
|
|
color: #ef4444;
|
|
}
|
|
|
|
.detail-label {
|
|
font-size: 9px;
|
|
color: #71717a;
|
|
text-transform: uppercase;
|
|
margin-top: 2px;
|
|
}
|
|
|
|
/* 하단 패턴 정보 */
|
|
.pattern-info {
|
|
padding: 16px;
|
|
background: #1f1f26;
|
|
border-top: 1px solid #27272a;
|
|
}
|
|
|
|
.pattern-info-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.pattern-info-header h4 {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.pattern-tag {
|
|
padding: 4px 10px;
|
|
background: #22c55e20;
|
|
color: #22c55e;
|
|
border-radius: 12px;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.pattern-stats {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, 1fr);
|
|
gap: 8px;
|
|
}
|
|
|
|
.stat-item {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
padding: 8px 12px;
|
|
background: #27272a;
|
|
border-radius: 6px;
|
|
}
|
|
|
|
.stat-label {
|
|
font-size: 11px;
|
|
color: #71717a;
|
|
}
|
|
|
|
.stat-value {
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: #fafafa;
|
|
}
|
|
|
|
/* 스크롤바 스타일 */
|
|
::-webkit-scrollbar {
|
|
width: 6px;
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
background: #3f3f46;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb:hover {
|
|
background: #52525b;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<!-- 왼쪽 패널 - 패턴 선택 -->
|
|
<div class="left-panel">
|
|
<div class="panel-header">
|
|
<div class="panel-title">
|
|
<span class="icon">📊</span>
|
|
패턴 라이브러리
|
|
</div>
|
|
</div>
|
|
|
|
<div class="search-box">
|
|
<input type="text" class="search-input" placeholder="패턴 검색...">
|
|
</div>
|
|
|
|
<div class="pattern-categories">
|
|
<!-- 반전 패턴 -->
|
|
<div class="category">
|
|
<div class="category-header">
|
|
🔄 반전 패턴
|
|
<span class="badge">8</span>
|
|
</div>
|
|
<div class="pattern-list">
|
|
<div class="pattern-item selected">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 35 L25 15 L45 25 L65 5 L85 20 L95 10" stroke="#22c55e" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">헤드앤숄더</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 10 L25 30 L45 20 L65 35 L85 15 L95 25" stroke="#ef4444" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">역헤드앤숄더</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 30 L30 10 L55 30 L80 10 L95 30" stroke="#22c55e" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">더블탑</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 10 L30 35 L55 10 L80 35 L95 15" stroke="#ef4444" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">더블바텀</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 30 L20 10 L35 28 L50 8 L65 26 L80 6 L95 20" stroke="#22c55e" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">트리플탑</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 10 L20 32 L35 12 L50 34 L65 14 L80 36 L95 20" stroke="#ef4444" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">트리플바텀</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 지속 패턴 -->
|
|
<div class="category">
|
|
<div class="category-header">
|
|
➡️ 지속 패턴
|
|
<span class="badge">6</span>
|
|
</div>
|
|
<div class="pattern-list">
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 35 L25 20 L45 25 L65 15 L85 18 L95 5" stroke="#22c55e" stroke-width="2" fill="none"/>
|
|
<path d="M20 30 L80 12" stroke="#3b82f6" stroke-width="1" stroke-dasharray="3,3"/>
|
|
<path d="M20 15 L80 8" stroke="#3b82f6" stroke-width="1" stroke-dasharray="3,3"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">상승 플래그</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 5 L25 20 L45 15 L65 25 L85 22 L95 35" stroke="#ef4444" stroke-width="2" fill="none"/>
|
|
<path d="M20 10 L80 28" stroke="#3b82f6" stroke-width="1" stroke-dasharray="3,3"/>
|
|
<path d="M20 25 L80 32" stroke="#3b82f6" stroke-width="1" stroke-dasharray="3,3"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">하락 플래그</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 35 L20 10 L40 25 L55 12 L70 22 L85 15 L95 5" stroke="#22c55e" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">상승 웨지</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 5 L20 30 L40 15 L55 28 L70 18 L85 25 L95 35" stroke="#ef4444" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">하락 웨지</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 20 L30 30 L50 10 L70 28 L95 20" stroke="#f59e0b" stroke-width="2" fill="none"/>
|
|
<path d="M5 20 L95 20" stroke="#3b82f6" stroke-width="1" stroke-dasharray="3,3"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">대칭 삼각형</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<path d="M5 20 L20 10 L35 20 L50 10 L65 20 L80 10 L95 20" stroke="#f59e0b" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">박스권</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 캔들 패턴 -->
|
|
<div class="category">
|
|
<div class="category-header">
|
|
🕯️ 캔들 패턴
|
|
<span class="badge">4</span>
|
|
</div>
|
|
<div class="pattern-list">
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<rect x="45" y="5" width="10" height="30" fill="#22c55e"/>
|
|
<line x1="50" y1="2" x2="50" y2="5" stroke="#22c55e" stroke-width="2"/>
|
|
<line x1="50" y1="35" x2="50" y2="38" stroke="#22c55e" stroke-width="2"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">망치형</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<rect x="30" y="15" width="8" height="15" fill="#ef4444"/>
|
|
<rect x="45" y="5" width="8" height="30" fill="#22c55e"/>
|
|
<rect x="60" y="10" width="8" height="20" fill="#22c55e"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">상승장악형</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<rect x="45" y="18" width="10" height="4" fill="#71717a"/>
|
|
<line x1="50" y1="5" x2="50" y2="35" stroke="#71717a" stroke-width="2"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">도지</div>
|
|
</div>
|
|
<div class="pattern-item">
|
|
<div class="pattern-icon">
|
|
<svg viewBox="0 0 100 40">
|
|
<rect x="25" y="8" width="8" height="24" fill="#22c55e"/>
|
|
<rect x="40" y="12" width="8" height="16" fill="#22c55e"/>
|
|
<rect x="55" y="16" width="8" height="8" fill="#22c55e"/>
|
|
</svg>
|
|
</div>
|
|
<div class="pattern-name">쓰리화이트솔저</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 중앙 패널 - 차트 및 그리기 영역 -->
|
|
<div class="center-panel">
|
|
<div class="toolbar">
|
|
<div class="toolbar-left">
|
|
<div class="toolbar-group">
|
|
<button class="tool-btn" title="선택">🔍</button>
|
|
<button class="tool-btn active" title="그리기">✏️</button>
|
|
<button class="tool-btn" title="지우기">🗑️</button>
|
|
</div>
|
|
|
|
<div class="divider"></div>
|
|
|
|
<div class="toolbar-group">
|
|
<button class="tool-btn" title="직선">📏</button>
|
|
<button class="tool-btn" title="자유 곡선">〰️</button>
|
|
<button class="tool-btn" title="추세선">📈</button>
|
|
</div>
|
|
|
|
<div class="divider"></div>
|
|
|
|
<div class="mode-toggle">
|
|
<label>미러링</label>
|
|
<div class="toggle-switch"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="toolbar-right">
|
|
<button class="btn btn-secondary">
|
|
초기화
|
|
</button>
|
|
<button class="btn btn-primary">
|
|
🔍 패턴 검색
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="chart-area">
|
|
<div class="chart-header">
|
|
<div class="chart-title">
|
|
<h2>패턴 입력</h2>
|
|
<span class="subtitle">원하는 패턴을 그리거나 왼쪽에서 선택하세요</span>
|
|
</div>
|
|
<div class="chart-tabs">
|
|
<button class="chart-tab active">직접 그리기</button>
|
|
<button class="chart-tab">패턴 선택</button>
|
|
<button class="chart-tab">이미지 업로드</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="canvas-container drawing-mode">
|
|
<!-- 샘플 패턴 표시 -->
|
|
<div class="sample-pattern">
|
|
<svg viewBox="0 0 800 400">
|
|
<!-- 그리드 -->
|
|
<defs>
|
|
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
|
|
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#27272a" stroke-width="1"/>
|
|
</pattern>
|
|
</defs>
|
|
<rect width="100%" height="100%" fill="url(#grid)"/>
|
|
|
|
<!-- 헤드앤숄더 패턴 -->
|
|
<path d="M 80 280
|
|
Q 120 280, 160 220
|
|
Q 200 160, 240 200
|
|
Q 280 240, 320 120
|
|
Q 360 40, 400 120
|
|
Q 440 200, 480 160
|
|
Q 520 120, 560 180
|
|
Q 600 240, 640 200
|
|
Q 680 160, 720 240"
|
|
stroke="#22c55e"
|
|
stroke-width="3"
|
|
fill="none"
|
|
stroke-linecap="round"
|
|
stroke-linejoin="round"/>
|
|
|
|
<!-- 넥라인 -->
|
|
<line x1="240" y1="200" x2="560" y2="180"
|
|
stroke="#3b82f6"
|
|
stroke-width="2"
|
|
stroke-dasharray="8,4"/>
|
|
|
|
<!-- 포인트 마커 -->
|
|
<circle cx="240" cy="200" r="6" fill="#3b82f6"/>
|
|
<circle cx="400" cy="120" r="8" fill="#ef4444"/>
|
|
<circle cx="560" cy="180" r="6" fill="#3b82f6"/>
|
|
|
|
<!-- 라벨 -->
|
|
<text x="230" y="225" fill="#a1a1aa" font-size="12">왼쪽 어깨</text>
|
|
<text x="380" y="105" fill="#ef4444" font-size="14" font-weight="bold">헤드</text>
|
|
<text x="540" y="205" fill="#a1a1aa" font-size="12">오른쪽 어깨</text>
|
|
<text x="380" y="210" fill="#3b82f6" font-size="12">넥라인</text>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 오른쪽 패널 - 검색 결과 -->
|
|
<div class="right-panel">
|
|
<div class="panel-header">
|
|
<div class="panel-title">
|
|
<span class="icon">🎯</span>
|
|
검색 결과
|
|
</div>
|
|
</div>
|
|
|
|
<div class="search-options">
|
|
<div class="option-group">
|
|
<label class="option-label">검색 대상</label>
|
|
<select class="option-select">
|
|
<option>전체 시장 (암호화폐)</option>
|
|
<option>BTC 마켓</option>
|
|
<option>USDT 마켓</option>
|
|
<option>관심 종목만</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="option-group">
|
|
<label class="option-label">시간 프레임</label>
|
|
<select class="option-select">
|
|
<option>일봉 (1D)</option>
|
|
<option>4시간 (4H)</option>
|
|
<option>1시간 (1H)</option>
|
|
<option>15분 (15M)</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="option-group">
|
|
<label class="option-label">최소 유사도: 75%</label>
|
|
<div class="slider-container">
|
|
<input type="range" class="slider" min="50" max="100" value="75">
|
|
<span class="slider-value">75%</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="results-header">
|
|
<span class="results-count"><strong>24</strong>개 종목 발견</span>
|
|
<button class="sort-btn">
|
|
유사도순 ▼
|
|
</button>
|
|
</div>
|
|
|
|
<div class="results-list">
|
|
<!-- 결과 아이템 1 -->
|
|
<div class="result-item">
|
|
<div class="result-header">
|
|
<div class="result-symbol">
|
|
<div class="symbol-icon">B</div>
|
|
<div class="symbol-info">
|
|
<h4>BTC/KRW</h4>
|
|
<span>비트코인</span>
|
|
</div>
|
|
</div>
|
|
<div class="match-score">
|
|
<div class="score-value">94%</div>
|
|
<div class="score-label">유사도</div>
|
|
</div>
|
|
</div>
|
|
<div class="result-chart">
|
|
<svg viewBox="0 0 320 80">
|
|
<path d="M 10 60 Q 40 60, 60 45 Q 80 30, 100 38 Q 120 46, 140 25 Q 160 10, 180 25 Q 200 40, 220 32 Q 240 24, 260 35 Q 280 46, 300 40"
|
|
stroke="#22c55e" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="result-details">
|
|
<div class="detail-item">
|
|
<div class="detail-value up">+12.5%</div>
|
|
<div class="detail-label">예상 수익</div>
|
|
</div>
|
|
<div class="detail-item">
|
|
<div class="detail-value">3~5일</div>
|
|
<div class="detail-label">예상 기간</div>
|
|
</div>
|
|
<div class="detail-item">
|
|
<div class="detail-value">78%</div>
|
|
<div class="detail-label">성공률</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 결과 아이템 2 -->
|
|
<div class="result-item">
|
|
<div class="result-header">
|
|
<div class="result-symbol">
|
|
<div class="symbol-icon" style="background: linear-gradient(135deg, #8b5cf6, #6d28d9);">E</div>
|
|
<div class="symbol-info">
|
|
<h4>ETH/KRW</h4>
|
|
<span>이더리움</span>
|
|
</div>
|
|
</div>
|
|
<div class="match-score">
|
|
<div class="score-value">89%</div>
|
|
<div class="score-label">유사도</div>
|
|
</div>
|
|
</div>
|
|
<div class="result-chart">
|
|
<svg viewBox="0 0 320 80">
|
|
<path d="M 10 55 Q 40 55, 60 42 Q 80 28, 100 35 Q 120 42, 140 22 Q 160 8, 180 22 Q 200 36, 220 30 Q 240 24, 260 32 Q 280 40, 300 35"
|
|
stroke="#22c55e" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="result-details">
|
|
<div class="detail-item">
|
|
<div class="detail-value up">+8.3%</div>
|
|
<div class="detail-label">예상 수익</div>
|
|
</div>
|
|
<div class="detail-item">
|
|
<div class="detail-value">2~4일</div>
|
|
<div class="detail-label">예상 기간</div>
|
|
</div>
|
|
<div class="detail-item">
|
|
<div class="detail-value">72%</div>
|
|
<div class="detail-label">성공률</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 결과 아이템 3 -->
|
|
<div class="result-item">
|
|
<div class="result-header">
|
|
<div class="result-symbol">
|
|
<div class="symbol-icon" style="background: linear-gradient(135deg, #06b6d4, #0891b2);">X</div>
|
|
<div class="symbol-info">
|
|
<h4>XRP/KRW</h4>
|
|
<span>리플</span>
|
|
</div>
|
|
</div>
|
|
<div class="match-score">
|
|
<div class="score-value">85%</div>
|
|
<div class="score-label">유사도</div>
|
|
</div>
|
|
</div>
|
|
<div class="result-chart">
|
|
<svg viewBox="0 0 320 80">
|
|
<path d="M 10 50 Q 40 50, 60 40 Q 80 30, 100 36 Q 120 42, 140 28 Q 160 15, 180 28 Q 200 42, 220 35 Q 240 28, 260 34 Q 280 40, 300 32"
|
|
stroke="#22c55e" stroke-width="2" fill="none"/>
|
|
</svg>
|
|
</div>
|
|
<div class="result-details">
|
|
<div class="detail-item">
|
|
<div class="detail-value up">+15.2%</div>
|
|
<div class="detail-label">예상 수익</div>
|
|
</div>
|
|
<div class="detail-item">
|
|
<div class="detail-value">4~7일</div>
|
|
<div class="detail-label">예상 기간</div>
|
|
</div>
|
|
<div class="detail-item">
|
|
<div class="detail-value">65%</div>
|
|
<div class="detail-label">성공률</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 선택한 패턴 정보 -->
|
|
<div class="pattern-info">
|
|
<div class="pattern-info-header">
|
|
<h4>📊 헤드앤숄더 패턴</h4>
|
|
<span class="pattern-tag">하락 반전</span>
|
|
</div>
|
|
<div class="pattern-stats">
|
|
<div class="stat-item">
|
|
<span class="stat-label">평균 수익률</span>
|
|
<span class="stat-value">+11.2%</span>
|
|
</div>
|
|
<div class="stat-item">
|
|
<span class="stat-label">평균 기간</span>
|
|
<span class="stat-value">4.5일</span>
|
|
</div>
|
|
<div class="stat-item">
|
|
<span class="stat-label">성공률</span>
|
|
<span class="stat-value">73%</span>
|
|
</div>
|
|
<div class="stat-item">
|
|
<span class="stat-label">발생 빈도</span>
|
|
<span class="stat-value">중간</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
|