- Introduced an interactive HTML stock viewer for visualizing strength scores and filtering stocks based on user-defined thresholds. - Added `--all-stocks` parameter to generate charts for all 108 stocks, including those not meeting convergence criteria. - Implemented a new scoring system for breakout strength, incorporating fitting adherence to improve accuracy. - Updated multiple documentation files, including usage instructions and feature overviews, to reflect recent enhancements. - Improved error handling and file naming conventions to ensure compatibility across platforms.
3032 lines
85 KiB
HTML
3032 lines
85 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>收敛三角形强度分选股系统</title>
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&family=Noto+Sans+SC:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||
<style>
|
||
:root {
|
||
--bg-primary: #0a0e27;
|
||
--bg-secondary: #111830;
|
||
--bg-card: #1a2238;
|
||
--bg-card-hover: #242d48;
|
||
--accent-primary: #00d4aa;
|
||
--accent-secondary: #7b68ee;
|
||
--accent-warm: #ff6b6b;
|
||
--accent-cool: #4ecdc4;
|
||
--accent-gold: #ffd93d;
|
||
--text-primary: #e8eaf0;
|
||
--text-secondary: #8b92a8;
|
||
--text-muted: #5a6178;
|
||
--border-subtle: rgba(255, 255, 255, 0.06);
|
||
--border-accent: rgba(0, 212, 170, 0.3);
|
||
--shadow-glow: 0 0 40px rgba(0, 212, 170, 0.15);
|
||
--shadow-card: 0 8px 32px rgba(0, 0, 0, 0.4);
|
||
--transition-fast: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
||
--transition-smooth: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
|
||
* {
|
||
margin: 0;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
body {
|
||
font-family: 'Noto Sans SC', sans-serif;
|
||
background: var(--bg-primary);
|
||
color: var(--text-primary);
|
||
min-height: 100vh;
|
||
line-height: 1.6;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
/* Animated Background */
|
||
body::before {
|
||
content: '';
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background:
|
||
radial-gradient(ellipse at 20% 20%, rgba(123, 104, 238, 0.08) 0%, transparent 50%),
|
||
radial-gradient(ellipse at 80% 80%, rgba(0, 212, 170, 0.06) 0%, transparent 50%),
|
||
radial-gradient(ellipse at 50% 50%, rgba(255, 107, 107, 0.04) 0%, transparent 70%);
|
||
pointer-events: none;
|
||
z-index: 0;
|
||
}
|
||
|
||
/* Noise Texture Overlay */
|
||
body::after {
|
||
content: '';
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
|
||
opacity: 0.03;
|
||
pointer-events: none;
|
||
z-index: 1;
|
||
}
|
||
|
||
.app-container {
|
||
position: relative;
|
||
z-index: 2;
|
||
max-width: 1680px;
|
||
margin: 0 auto;
|
||
padding: 24px;
|
||
}
|
||
|
||
/* Header Section */
|
||
.header {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
padding: 28px 32px;
|
||
margin-bottom: 24px;
|
||
background: linear-gradient(135deg, rgba(26, 34, 56, 0.9) 0%, rgba(17, 24, 48, 0.95) 100%);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: 16px;
|
||
backdrop-filter: blur(20px);
|
||
box-shadow: var(--shadow-card);
|
||
}
|
||
|
||
.header-title {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 6px;
|
||
}
|
||
|
||
.header-title h1 {
|
||
font-size: 26px;
|
||
font-weight: 700;
|
||
background: linear-gradient(135deg, var(--accent-primary) 0%, var(--accent-cool) 100%);
|
||
-webkit-background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
background-clip: text;
|
||
letter-spacing: -0.3px;
|
||
}
|
||
|
||
.header-meta {
|
||
display: flex;
|
||
gap: 20px;
|
||
font-size: 13px;
|
||
color: var(--text-secondary);
|
||
font-family: 'JetBrains Mono', monospace;
|
||
}
|
||
|
||
.header-meta span {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
}
|
||
|
||
.header-meta span::before {
|
||
content: '';
|
||
width: 6px;
|
||
height: 6px;
|
||
border-radius: 50%;
|
||
background: var(--accent-primary);
|
||
box-shadow: 0 0 10px var(--accent-primary);
|
||
animation: pulse 2s infinite;
|
||
}
|
||
|
||
@keyframes pulse {
|
||
0%, 100% { opacity: 1; transform: scale(1); }
|
||
50% { opacity: 0.6; transform: scale(1.2); }
|
||
}
|
||
|
||
/* Control Panel */
|
||
.control-panel {
|
||
background: var(--bg-secondary);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: 16px;
|
||
padding: 24px 32px;
|
||
margin-bottom: 24px;
|
||
box-shadow: var(--shadow-card);
|
||
}
|
||
|
||
.filter-section {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 32px;
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
.filter-label {
|
||
font-size: 14px;
|
||
font-weight: 600;
|
||
color: var(--text-secondary);
|
||
min-width: 100px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.5px;
|
||
}
|
||
|
||
.slider-wrapper {
|
||
flex: 1;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 20px;
|
||
}
|
||
|
||
.slider-track {
|
||
flex: 1;
|
||
height: 6px;
|
||
background: var(--bg-card);
|
||
border-radius: 3px;
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.slider-track::before {
|
||
content: '';
|
||
position: absolute;
|
||
left: 0;
|
||
top: 0;
|
||
height: 100%;
|
||
width: var(--slider-value, 0%);
|
||
background: linear-gradient(90deg, var(--accent-secondary) 0%, var(--accent-primary) 100%);
|
||
border-radius: 3px;
|
||
transition: width 0.1s linear;
|
||
}
|
||
|
||
input[type="range"] {
|
||
-webkit-appearance: none;
|
||
appearance: none;
|
||
width: 100%;
|
||
height: 6px;
|
||
background: transparent;
|
||
cursor: pointer;
|
||
position: relative;
|
||
z-index: 2;
|
||
}
|
||
|
||
input[type="range"]::-webkit-slider-thumb {
|
||
-webkit-appearance: none;
|
||
width: 18px;
|
||
height: 18px;
|
||
border-radius: 50%;
|
||
background: var(--accent-primary);
|
||
cursor: pointer;
|
||
box-shadow: 0 0 20px rgba(0, 212, 170, 0.5);
|
||
border: 3px solid var(--bg-primary);
|
||
transition: transform 0.2s;
|
||
}
|
||
|
||
input[type="range"]::-webkit-slider-thumb:hover {
|
||
transform: scale(1.15);
|
||
}
|
||
|
||
input[type="range"]::-moz-range-thumb {
|
||
width: 18px;
|
||
height: 18px;
|
||
border-radius: 50%;
|
||
background: var(--accent-primary);
|
||
cursor: pointer;
|
||
box-shadow: 0 0 20px rgba(0, 212, 170, 0.5);
|
||
border: 3px solid var(--bg-primary);
|
||
transition: transform 0.2s;
|
||
}
|
||
|
||
input[type="range"]::-moz-range-thumb:hover {
|
||
transform: scale(1.15);
|
||
}
|
||
|
||
.slider-value {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 22px;
|
||
font-weight: 700;
|
||
color: var(--accent-primary);
|
||
min-width: 80px;
|
||
text-align: right;
|
||
}
|
||
|
||
/* Stats Grid */
|
||
.stats-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(3, 1fr);
|
||
gap: 16px;
|
||
padding-top: 20px;
|
||
border-top: 1px solid var(--border-subtle);
|
||
}
|
||
|
||
.stat-card {
|
||
background: var(--bg-card);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: 12px;
|
||
padding: 16px 20px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 16px;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.stat-card:hover {
|
||
border-color: var(--border-accent);
|
||
background: var(--bg-card-hover);
|
||
}
|
||
|
||
.stat-icon {
|
||
width: 44px;
|
||
height: 44px;
|
||
border-radius: 10px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 20px;
|
||
background: rgba(0, 212, 170, 0.1);
|
||
color: var(--accent-primary);
|
||
}
|
||
|
||
.stat-info {
|
||
flex: 1;
|
||
}
|
||
|
||
.stat-label {
|
||
font-size: 12px;
|
||
color: var(--text-secondary);
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.5px;
|
||
margin-bottom: 2px;
|
||
}
|
||
|
||
.stat-value {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 24px;
|
||
font-weight: 700;
|
||
color: var(--text-primary);
|
||
}
|
||
|
||
/* Stocks Grid */
|
||
.stocks-section {
|
||
min-height: 400px;
|
||
}
|
||
|
||
.stocks-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));
|
||
gap: 20px;
|
||
}
|
||
|
||
.stock-card {
|
||
background: var(--bg-card);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: 16px;
|
||
overflow: hidden;
|
||
transition: all var(--transition-smooth);
|
||
cursor: pointer;
|
||
position: relative;
|
||
}
|
||
|
||
.stock-card::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 3px;
|
||
height: 100%;
|
||
background: linear-gradient(180deg, var(--accent-primary) 0%, var(--accent-secondary) 100%);
|
||
opacity: 0;
|
||
transition: opacity var(--transition-fast);
|
||
}
|
||
|
||
.stock-card:hover {
|
||
transform: translateY(-4px);
|
||
border-color: var(--border-accent);
|
||
box-shadow: var(--shadow-glow), var(--shadow-card);
|
||
}
|
||
|
||
.stock-card:hover::before {
|
||
opacity: 1;
|
||
}
|
||
|
||
.card-header {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
padding: 18px 20px;
|
||
background: linear-gradient(135deg, rgba(0, 212, 170, 0.08) 0%, rgba(123, 104, 238, 0.05) 100%);
|
||
border-bottom: 1px solid var(--border-subtle);
|
||
}
|
||
|
||
.stock-identity {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 2px;
|
||
}
|
||
|
||
.stock-name {
|
||
font-size: 18px;
|
||
font-weight: 700;
|
||
color: var(--text-primary);
|
||
}
|
||
|
||
.stock-code {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 12px;
|
||
color: var(--text-secondary);
|
||
background: rgba(0, 212, 170, 0.15);
|
||
padding: 2px 8px;
|
||
border-radius: 4px;
|
||
display: inline-block;
|
||
margin-top: 4px;
|
||
}
|
||
|
||
.strength-badge {
|
||
text-align: right;
|
||
}
|
||
|
||
.strength-value {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 28px;
|
||
font-weight: 700;
|
||
background: linear-gradient(135deg, var(--accent-primary) 0%, var(--accent-cool) 100%);
|
||
-webkit-background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
background-clip: text;
|
||
}
|
||
|
||
.strength-label {
|
||
font-size: 11px;
|
||
color: var(--text-secondary);
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.5px;
|
||
}
|
||
|
||
.card-body {
|
||
padding: 16px 20px;
|
||
}
|
||
|
||
.metrics-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(2, 1fr);
|
||
gap: 12px;
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
.metric-item {
|
||
background: var(--bg-secondary);
|
||
border-radius: 10px;
|
||
padding: 10px 14px;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
}
|
||
|
||
.metric-label {
|
||
font-size: 12px;
|
||
color: var(--text-secondary);
|
||
}
|
||
|
||
.metric-value {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 14px;
|
||
font-weight: 600;
|
||
color: var(--text-primary);
|
||
}
|
||
|
||
.metric-value.direction-up {
|
||
color: var(--accent-primary);
|
||
}
|
||
|
||
.metric-value.direction-down {
|
||
color: var(--accent-warm);
|
||
}
|
||
|
||
.chart-container {
|
||
position: relative;
|
||
border-radius: 12px;
|
||
overflow: hidden;
|
||
background: var(--bg-secondary);
|
||
border: 1px solid var(--border-subtle);
|
||
}
|
||
|
||
.stock-chart {
|
||
width: 100%;
|
||
height: auto;
|
||
display: block;
|
||
transition: transform var(--transition-smooth);
|
||
}
|
||
|
||
.stock-card:hover .stock-chart {
|
||
transform: scale(1.02);
|
||
}
|
||
|
||
.chart-overlay {
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
padding: 8px 12px;
|
||
background: linear-gradient(transparent, rgba(10, 14, 39, 0.9));
|
||
font-size: 11px;
|
||
color: var(--text-secondary);
|
||
display: flex;
|
||
justify-content: space-between;
|
||
}
|
||
|
||
/* Empty State */
|
||
.empty-state {
|
||
text-align: center;
|
||
padding: 80px 20px;
|
||
color: var(--text-secondary);
|
||
}
|
||
|
||
.empty-state-icon {
|
||
font-size: 64px;
|
||
margin-bottom: 16px;
|
||
opacity: 0.5;
|
||
}
|
||
|
||
.empty-state h3 {
|
||
font-size: 20px;
|
||
color: var(--text-primary);
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
/* Modal */
|
||
.modal {
|
||
display: none;
|
||
position: fixed;
|
||
z-index: 1000;
|
||
left: 0;
|
||
top: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background: rgba(10, 14, 39, 0.95);
|
||
backdrop-filter: blur(10px);
|
||
align-items: center;
|
||
justify-content: center;
|
||
padding: 40px;
|
||
}
|
||
|
||
.modal.show {
|
||
display: flex;
|
||
animation: fadeIn 0.2s ease-out;
|
||
}
|
||
|
||
@keyframes fadeIn {
|
||
from { opacity: 0; }
|
||
to { opacity: 1; }
|
||
}
|
||
|
||
.modal-content {
|
||
max-width: 90%;
|
||
max-height: 90%;
|
||
position: relative;
|
||
}
|
||
|
||
.modal-content img {
|
||
max-width: 100%;
|
||
max-height: 85vh;
|
||
border-radius: 16px;
|
||
box-shadow: var(--shadow-glow), var(--shadow-card);
|
||
border: 1px solid var(--border-subtle);
|
||
}
|
||
|
||
.close-modal {
|
||
position: absolute;
|
||
top: -48px;
|
||
right: 0;
|
||
color: var(--text-secondary);
|
||
font-size: 36px;
|
||
font-weight: 300;
|
||
cursor: pointer;
|
||
background: none;
|
||
border: none;
|
||
transition: color var(--transition-fast);
|
||
line-height: 1;
|
||
}
|
||
|
||
.close-modal:hover {
|
||
color: var(--accent-primary);
|
||
}
|
||
|
||
/* Animations */
|
||
@keyframes slideIn {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateY(20px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
}
|
||
|
||
.stock-card {
|
||
animation: slideIn 0.4s ease-out backwards;
|
||
}
|
||
|
||
.stock-card:nth-child(1) { animation-delay: 0.05s; }
|
||
.stock-card:nth-child(2) { animation-delay: 0.1s; }
|
||
.stock-card:nth-child(3) { animation-delay: 0.15s; }
|
||
.stock-card:nth-child(4) { animation-delay: 0.2s; }
|
||
.stock-card:nth-child(5) { animation-delay: 0.25s; }
|
||
.stock-card:nth-child(6) { animation-delay: 0.3s; }
|
||
|
||
/* Responsive */
|
||
@media (max-width: 768px) {
|
||
.app-container {
|
||
padding: 16px;
|
||
}
|
||
|
||
.header {
|
||
flex-direction: column;
|
||
align-items: flex-start;
|
||
gap: 16px;
|
||
padding: 20px;
|
||
}
|
||
|
||
.filter-section {
|
||
flex-direction: column;
|
||
align-items: stretch;
|
||
gap: 16px;
|
||
}
|
||
|
||
.filter-label {
|
||
min-width: auto;
|
||
}
|
||
|
||
.stats-grid {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
|
||
.stocks-grid {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
}
|
||
|
||
/* Filter Row - Top bar with search and sort */
|
||
.filter-row {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 16px;
|
||
margin-bottom: 20px;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
/* Search Box */
|
||
.search-box {
|
||
position: relative;
|
||
flex: 1;
|
||
min-width: 200px;
|
||
}
|
||
|
||
.search-box input {
|
||
width: 100%;
|
||
padding: 12px 16px 12px 44px;
|
||
background: var(--bg-card);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: 10px;
|
||
color: var(--text-primary);
|
||
font-size: 14px;
|
||
font-family: 'Noto Sans SC', sans-serif;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.search-box input:focus {
|
||
outline: none;
|
||
border-color: var(--accent-primary);
|
||
box-shadow: 0 0 0 3px rgba(0, 212, 170, 0.1);
|
||
}
|
||
|
||
.search-box::before {
|
||
content: '🔍';
|
||
position: absolute;
|
||
left: 14px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
font-size: 16px;
|
||
opacity: 0.5;
|
||
}
|
||
|
||
.search-box .clear-search {
|
||
position: absolute;
|
||
right: 12px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
width: 20px;
|
||
height: 20px;
|
||
background: var(--bg-card-hover);
|
||
border: none;
|
||
border-radius: 50%;
|
||
color: var(--text-secondary);
|
||
font-size: 14px;
|
||
cursor: pointer;
|
||
display: none;
|
||
align-items: center;
|
||
justify-content: center;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.search-box .clear-search:hover {
|
||
background: var(--accent-warm);
|
||
color: white;
|
||
}
|
||
|
||
.search-box.has-value .clear-search {
|
||
display: flex;
|
||
}
|
||
|
||
/* Sort Select */
|
||
.sort-wrapper {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 12px;
|
||
}
|
||
|
||
.sort-label {
|
||
font-size: 13px;
|
||
color: var(--text-secondary);
|
||
font-weight: 500;
|
||
}
|
||
|
||
.sort-select {
|
||
padding: 10px 16px;
|
||
background: var(--bg-card);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: 10px;
|
||
color: var(--text-primary);
|
||
font-size: 14px;
|
||
font-family: 'Noto Sans SC', sans-serif;
|
||
cursor: pointer;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.sort-select:hover {
|
||
border-color: var(--border-accent);
|
||
}
|
||
|
||
.sort-select:focus {
|
||
outline: none;
|
||
border-color: var(--accent-primary);
|
||
box-shadow: 0 0 0 3px rgba(0, 212, 170, 0.1);
|
||
}
|
||
|
||
.sort-toggle {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
padding: 10px 14px;
|
||
background: var(--bg-card);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: 10px;
|
||
color: var(--text-secondary);
|
||
font-size: 20px;
|
||
cursor: pointer;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.sort-toggle:hover {
|
||
border-color: var(--border-accent);
|
||
color: var(--text-primary);
|
||
}
|
||
|
||
.sort-toggle.active {
|
||
background: rgba(0, 212, 170, 0.1);
|
||
border-color: var(--accent-primary);
|
||
color: var(--accent-primary);
|
||
}
|
||
|
||
/* Reset Button */
|
||
.reset-btn {
|
||
padding: 10px 20px;
|
||
background: var(--bg-card);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: 10px;
|
||
color: var(--text-secondary);
|
||
font-size: 14px;
|
||
font-family: 'Noto Sans SC', sans-serif;
|
||
cursor: pointer;
|
||
transition: all var(--transition-fast);
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
}
|
||
|
||
.reset-btn:hover {
|
||
border-color: var(--accent-warm);
|
||
color: var(--accent-warm);
|
||
}
|
||
|
||
/* Filter Chips */
|
||
.filter-chips {
|
||
display: flex;
|
||
gap: 10px;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.filter-chip {
|
||
padding: 8px 16px;
|
||
background: var(--bg-card);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: 20px;
|
||
color: var(--text-secondary);
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
cursor: pointer;
|
||
transition: all var(--transition-fast);
|
||
user-select: none;
|
||
}
|
||
|
||
.filter-chip:hover {
|
||
border-color: var(--border-accent);
|
||
color: var(--text-primary);
|
||
}
|
||
|
||
.filter-chip.active {
|
||
background: rgba(0, 212, 170, 0.15);
|
||
border-color: var(--accent-primary);
|
||
color: var(--accent-primary);
|
||
}
|
||
|
||
.filter-chip[data-value="up"].active {
|
||
background: rgba(0, 212, 170, 0.15);
|
||
border-color: var(--accent-primary);
|
||
color: var(--accent-primary);
|
||
}
|
||
|
||
.filter-chip[data-value="down"].active {
|
||
background: rgba(255, 107, 107, 0.15);
|
||
border-color: var(--accent-warm);
|
||
color: var(--accent-warm);
|
||
}
|
||
|
||
/* Dual Slider for Width Ratio */
|
||
.dual-slider-section {
|
||
margin-top: 16px;
|
||
padding-top: 16px;
|
||
border-top: 1px solid var(--border-subtle);
|
||
}
|
||
|
||
.dual-slider-header {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.dual-slider-label {
|
||
font-size: 13px;
|
||
color: var(--text-secondary);
|
||
font-weight: 500;
|
||
}
|
||
|
||
.dual-slider-values {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 14px;
|
||
color: var(--accent-primary);
|
||
}
|
||
|
||
.dual-slider {
|
||
position: relative;
|
||
height: 30px;
|
||
}
|
||
|
||
.dual-slider-track {
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 0;
|
||
right: 0;
|
||
height: 6px;
|
||
transform: translateY(-50%);
|
||
background: var(--bg-card);
|
||
border-radius: 3px;
|
||
}
|
||
|
||
.dual-slider-range {
|
||
position: absolute;
|
||
top: 50%;
|
||
height: 6px;
|
||
transform: translateY(-50%);
|
||
background: linear-gradient(90deg, var(--accent-secondary) 0%, var(--accent-primary) 100%);
|
||
border-radius: 3px;
|
||
}
|
||
|
||
.dual-slider input[type="range"] {
|
||
position: absolute;
|
||
pointer-events: none;
|
||
-webkit-appearance: none;
|
||
appearance: none;
|
||
width: 100%;
|
||
height: 6px;
|
||
background: transparent;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
z-index: 2;
|
||
}
|
||
|
||
.dual-slider input[type="range"]::-webkit-slider-thumb {
|
||
-webkit-appearance: none;
|
||
pointer-events: auto;
|
||
width: 18px;
|
||
height: 18px;
|
||
border-radius: 50%;
|
||
background: var(--accent-primary);
|
||
cursor: pointer;
|
||
box-shadow: 0 0 20px rgba(0, 212, 170, 0.5);
|
||
border: 3px solid var(--bg-primary);
|
||
transition: transform 0.2s;
|
||
}
|
||
|
||
.dual-slider input[type="range"]::-webkit-slider-thumb:hover {
|
||
transform: scale(1.15);
|
||
}
|
||
|
||
.dual-slider input[type="range"]::-moz-range-thumb {
|
||
width: 18px;
|
||
height: 18px;
|
||
border-radius: 50%;
|
||
background: var(--accent-primary);
|
||
cursor: pointer;
|
||
box-shadow: 0 0 20px rgba(0, 212, 170, 0.5);
|
||
border: 3px solid var(--bg-primary);
|
||
transition: transform 0.2s;
|
||
pointer-events: auto;
|
||
}
|
||
|
||
.dual-slider input[type="range"]::-moz-range-thumb:hover {
|
||
transform: scale(1.15);
|
||
}
|
||
|
||
/* Scrollbar */
|
||
::-webkit-scrollbar {
|
||
width: 10px;
|
||
height: 10px;
|
||
}
|
||
|
||
::-webkit-scrollbar-track {
|
||
background: var(--bg-secondary);
|
||
border-radius: 5px;
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb {
|
||
background: var(--accent-primary);
|
||
border-radius: 5px;
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb:hover {
|
||
background: var(--accent-cool);
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="app-container">
|
||
<header class="header">
|
||
<div class="header-title">
|
||
<h1>收敛三角形选股系统</h1>
|
||
<div class="header-meta">
|
||
<span>数据日期: 20260120</span>
|
||
<span>监控股票: 108</span>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
|
||
<section class="control-panel">
|
||
<!-- Top Filter Row: Search, Sort, Reset -->
|
||
<div class="filter-row">
|
||
<div class="search-box">
|
||
<input type="text" id="searchInput" placeholder="搜索股票代码或名称...">
|
||
<button class="clear-search" id="clearSearch">×</button>
|
||
</div>
|
||
<div class="sort-wrapper">
|
||
<span class="sort-label">排序</span>
|
||
<select class="sort-select" id="sortSelect">
|
||
<option value="strength">按强度分</option>
|
||
<option value="widthRatio">按宽度比</option>
|
||
<option value="touches">按触碰次数</option>
|
||
</select>
|
||
<button class="sort-toggle active" id="sortOrder" title="切换排序顺序">↓</button>
|
||
</div>
|
||
<button class="reset-btn" id="resetBtn">
|
||
<span>↺</span> 重置筛选
|
||
</button>
|
||
</div>
|
||
|
||
<!-- Direction Filter -->
|
||
<div class="filter-section">
|
||
<label class="filter-label">突破方向</label>
|
||
<div class="filter-chips" id="directionFilter">
|
||
<div class="filter-chip active" data-value="all">全部</div>
|
||
<div class="filter-chip" data-value="up">↑ 向上</div>
|
||
<div class="filter-chip" data-value="down">↓ 向下</div>
|
||
<div class="filter-chip" data-value="none">— 无</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Volume Filter -->
|
||
<div class="filter-section">
|
||
<label class="filter-label">放量确认</label>
|
||
<div class="filter-chips" id="volumeFilter">
|
||
<div class="filter-chip active" data-value="all">全部</div>
|
||
<div class="filter-chip" data-value="true">✓ 已确认</div>
|
||
<div class="filter-chip" data-value="false">✗ 未确认</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Strength Slider -->
|
||
<div class="filter-section">
|
||
<label class="filter-label">强度阈值</label>
|
||
<div class="slider-wrapper">
|
||
<div class="slider-track" id="sliderTrack"></div>
|
||
<input type="range" id="strengthSlider" min="0" max="1" step="0.01" value="0">
|
||
<div class="slider-value" id="strengthValue">0.00</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="stats-grid">
|
||
<div class="stat-card">
|
||
<div class="stat-icon">📊</div>
|
||
<div class="stat-info">
|
||
<div class="stat-label">Total</div>
|
||
<div class="stat-value" id="totalStocks">0</div>
|
||
</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div class="stat-icon">✨</div>
|
||
<div class="stat-info">
|
||
<div class="stat-label">Showing</div>
|
||
<div class="stat-value" id="displayedStocks">0</div>
|
||
</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div class="stat-icon">⚡</div>
|
||
<div class="stat-info">
|
||
<div class="stat-label">Average</div>
|
||
<div class="stat-value" id="avgStrength">0.00</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stocks-section">
|
||
<div id="stocksGrid" class="stocks-grid"></div>
|
||
<div id="emptyState" class="empty-state" style="display: none;">
|
||
<div class="empty-state-icon">📭</div>
|
||
<h3>没有符合条件的股票</h3>
|
||
<p>请降低强度分阈值以查看更多股票</p>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
|
||
<div id="imageModal" class="modal">
|
||
<div class="modal-content">
|
||
<button class="close-modal" onclick="closeModal()">×</button>
|
||
<img id="modalImage" src="" alt="股票图表">
|
||
</div>
|
||
</div>
|
||
<script>
|
||
// 内嵌数据
|
||
const allStocks = [
|
||
{
|
||
"idx": 13,
|
||
"code": "SH600744",
|
||
"name": "华银电力",
|
||
"strengthUp": 0.8220176757574035,
|
||
"strengthDown": 0.3514661765728476,
|
||
"direction": "up",
|
||
"widthRatio": 0.2867596230842454,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "True",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.8220176757574035,
|
||
"chartPath": "charts/20260120_SH600744_华银电力.png"
|
||
},
|
||
{
|
||
"idx": 28,
|
||
"code": "SH603379",
|
||
"name": "三美股份",
|
||
"strengthUp": 0.6469482282575013,
|
||
"strengthDown": 0.2526663624328139,
|
||
"direction": "up",
|
||
"widthRatio": 0.08922158280365546,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "False",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.6469482282575013,
|
||
"chartPath": "charts/20260120_SH603379_三美股份.png"
|
||
},
|
||
{
|
||
"idx": 20,
|
||
"code": "SH601609",
|
||
"name": "金田股份",
|
||
"strengthUp": 0.45494489273185007,
|
||
"strengthDown": 0.3392874967837289,
|
||
"direction": "up",
|
||
"widthRatio": 0.03896315672868362,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 6,
|
||
"volumeConfirmed": "True",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.45494489273185007,
|
||
"chartPath": "charts/20260120_SH601609_金田股份.png"
|
||
},
|
||
{
|
||
"idx": 14,
|
||
"code": "SH600795",
|
||
"name": "国电电力",
|
||
"strengthUp": 0.4372024128061483,
|
||
"strengthDown": 0.24055737327467763,
|
||
"direction": "up",
|
||
"widthRatio": 0.032561936783290356,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "False",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.4372024128061483,
|
||
"chartPath": "charts/20260120_SH600795_国电电力.png"
|
||
},
|
||
{
|
||
"idx": 91,
|
||
"code": "SZ300530",
|
||
"name": "领湃科技",
|
||
"strengthUp": 0.3884019418807604,
|
||
"strengthDown": 0.3884019418807604,
|
||
"direction": "none",
|
||
"widthRatio": 0.12780633375372022,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.3884019418807604,
|
||
"chartPath": "charts/20260120_SZ300530_领湃科技.png"
|
||
},
|
||
{
|
||
"idx": 21,
|
||
"code": "SH601868",
|
||
"name": "中国能建",
|
||
"strengthUp": 0.3296993588667557,
|
||
"strengthDown": 0.3296993588667557,
|
||
"direction": "none",
|
||
"widthRatio": 0.18980028469994004,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 10,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.3296993588667557,
|
||
"chartPath": "charts/20260120_SH601868_中国能建.png"
|
||
},
|
||
{
|
||
"idx": 54,
|
||
"code": "SZ000722",
|
||
"name": "湖南发展",
|
||
"strengthUp": 0.30327804307549766,
|
||
"strengthDown": 0.30327804307549766,
|
||
"direction": "none",
|
||
"widthRatio": 0.16117444007433868,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.30327804307549766,
|
||
"chartPath": "charts/20260120_SZ000722_湖南发展.png"
|
||
},
|
||
{
|
||
"idx": 95,
|
||
"code": "SZ300737",
|
||
"name": "科顺股份",
|
||
"strengthUp": 0.29350392780997847,
|
||
"strengthDown": 0.29350392780997847,
|
||
"direction": "none",
|
||
"widthRatio": 0.21325532904558048,
|
||
"touchesUpper": 6,
|
||
"touchesLower": 7,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.29350392780997847,
|
||
"chartPath": "charts/20260120_SZ300737_科顺股份.png"
|
||
},
|
||
{
|
||
"idx": 22,
|
||
"code": "SH603005",
|
||
"name": "晶方科技",
|
||
"strengthUp": 0.282121289498128,
|
||
"strengthDown": 0.282121289498128,
|
||
"direction": "none",
|
||
"widthRatio": 0.34612788685827206,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 6,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.282121289498128,
|
||
"chartPath": "charts/20260120_SH603005_晶方科技.png"
|
||
},
|
||
{
|
||
"idx": 60,
|
||
"code": "SZ001391",
|
||
"name": "国货航",
|
||
"strengthUp": 0.2679114430095322,
|
||
"strengthDown": 0.2679114430095322,
|
||
"direction": "none",
|
||
"widthRatio": 0.23528860034807667,
|
||
"touchesUpper": 6,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.2679114430095322,
|
||
"chartPath": "charts/20260120_SZ001391_国货航.png"
|
||
},
|
||
{
|
||
"idx": 78,
|
||
"code": "SZ002910",
|
||
"name": "庄园牧场",
|
||
"strengthUp": 0.24723831605782176,
|
||
"strengthDown": 0.24723831605782176,
|
||
"direction": "none",
|
||
"widthRatio": 0.057656261422220724,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.24723831605782176,
|
||
"chartPath": "charts/20260120_SZ002910_庄园牧场.png"
|
||
},
|
||
{
|
||
"idx": 30,
|
||
"code": "SH603618",
|
||
"name": "杭电股份",
|
||
"strengthUp": 0.2401268866492462,
|
||
"strengthDown": 0.2401268866492462,
|
||
"direction": "none",
|
||
"widthRatio": 0.15144818048774875,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.2401268866492462,
|
||
"chartPath": "charts/20260120_SH603618_杭电股份.png"
|
||
},
|
||
{
|
||
"idx": 59,
|
||
"code": "SZ001287",
|
||
"name": "中电港",
|
||
"strengthUp": 0.23524187546814457,
|
||
"strengthDown": 0.23524187546814457,
|
||
"direction": "none",
|
||
"widthRatio": 0.12706716054053835,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 5,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.23524187546814457,
|
||
"chartPath": "charts/20260120_SZ001287_中电港.png"
|
||
},
|
||
{
|
||
"idx": 38,
|
||
"code": "SH688089",
|
||
"name": "嘉必优",
|
||
"strengthUp": 0.22401663848377104,
|
||
"strengthDown": 0.22401663848377104,
|
||
"direction": "none",
|
||
"widthRatio": 0.15997473554088507,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.22401663848377104,
|
||
"chartPath": "charts/20260120_SH688089_嘉必优.png"
|
||
},
|
||
{
|
||
"idx": 94,
|
||
"code": "SZ300683",
|
||
"name": "海特生物",
|
||
"strengthUp": 0.19134132064752185,
|
||
"strengthDown": 0.220814956120551,
|
||
"direction": "none",
|
||
"widthRatio": 0.0440222754787381,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.220814956120551,
|
||
"chartPath": "charts/20260120_SZ300683_海特生物.png"
|
||
},
|
||
{
|
||
"idx": 72,
|
||
"code": "SZ002594",
|
||
"name": "比亚迪",
|
||
"strengthUp": 0.21970530887457196,
|
||
"strengthDown": 0.21970530887457196,
|
||
"direction": "none",
|
||
"widthRatio": 0.08603808634243997,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.21970530887457196,
|
||
"chartPath": "charts/20260120_SZ002594_比亚迪.png"
|
||
},
|
||
{
|
||
"idx": 26,
|
||
"code": "SH603237",
|
||
"name": "五芳斋",
|
||
"strengthUp": 0.2188221383382953,
|
||
"strengthDown": 0.2188221383382953,
|
||
"direction": "none",
|
||
"widthRatio": 0.1737453100820701,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 5,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.2188221383382953,
|
||
"chartPath": "charts/20260120_SH603237_五芳斋.png"
|
||
},
|
||
{
|
||
"idx": 79,
|
||
"code": "SZ002966",
|
||
"name": "苏州银行",
|
||
"strengthUp": 0.21796862563043798,
|
||
"strengthDown": 0.21796862563043798,
|
||
"direction": "none",
|
||
"widthRatio": 0.15024073729732276,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 5,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.21796862563043798,
|
||
"chartPath": "charts/20260120_SZ002966_苏州银行.png"
|
||
},
|
||
{
|
||
"idx": 93,
|
||
"code": "SZ300632",
|
||
"name": "光莆股份",
|
||
"strengthUp": 0.21619242201099959,
|
||
"strengthDown": 0.1943142879457649,
|
||
"direction": "none",
|
||
"widthRatio": 0.02846616403214607,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 5,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.21619242201099959,
|
||
"chartPath": "charts/20260120_SZ300632_光莆股份.png"
|
||
},
|
||
{
|
||
"idx": 76,
|
||
"code": "SZ002802",
|
||
"name": "洪汇新材",
|
||
"strengthUp": 0.21061113086455135,
|
||
"strengthDown": 0.21061113086455135,
|
||
"direction": "none",
|
||
"widthRatio": 0.23884176697328596,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.21061113086455135,
|
||
"chartPath": "charts/20260120_SZ002802_洪汇新材.png"
|
||
},
|
||
{
|
||
"idx": 97,
|
||
"code": "SZ300841",
|
||
"name": "康华生物",
|
||
"strengthUp": 0.2086238805426092,
|
||
"strengthDown": 0.2086238805426092,
|
||
"direction": "none",
|
||
"widthRatio": 0.13074436892117244,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.2086238805426092,
|
||
"chartPath": "charts/20260120_SZ300841_康华生物.png"
|
||
},
|
||
{
|
||
"idx": 15,
|
||
"code": "SH600846",
|
||
"name": "同济科技",
|
||
"strengthUp": 0.20716543714728097,
|
||
"strengthDown": 0.20716543714728097,
|
||
"direction": "none",
|
||
"widthRatio": 0.04230672506104188,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.20716543714728097,
|
||
"chartPath": "charts/20260120_SH600846_同济科技.png"
|
||
},
|
||
{
|
||
"idx": 17,
|
||
"code": "SH600984",
|
||
"name": "建设机械",
|
||
"strengthUp": 0.203099883837501,
|
||
"strengthDown": 0.203099883837501,
|
||
"direction": "none",
|
||
"widthRatio": 0.06214193787665361,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 5,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.203099883837501,
|
||
"chartPath": "charts/20260120_SH600984_建设机械.png"
|
||
},
|
||
{
|
||
"idx": 31,
|
||
"code": "SH603707",
|
||
"name": "健友股份",
|
||
"strengthUp": 0.20269084003832838,
|
||
"strengthDown": 0.20269084003832838,
|
||
"direction": "none",
|
||
"widthRatio": 0.00781033600291944,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.20269084003832838,
|
||
"chartPath": "charts/20260120_SH603707_健友股份.png"
|
||
},
|
||
{
|
||
"idx": 9,
|
||
"code": "SH600531",
|
||
"name": "豫光金铅",
|
||
"strengthUp": 0.19818391602849467,
|
||
"strengthDown": 0.19818391602849467,
|
||
"direction": "none",
|
||
"widthRatio": 0.22872671560227054,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.19818391602849467,
|
||
"chartPath": "charts/20260120_SH600531_豫光金铅.png"
|
||
},
|
||
{
|
||
"idx": 25,
|
||
"code": "SH603183",
|
||
"name": "建研院",
|
||
"strengthUp": 0.1967667237249141,
|
||
"strengthDown": 0.1967667237249141,
|
||
"direction": "none",
|
||
"widthRatio": 0.08924582407848107,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.1967667237249141,
|
||
"chartPath": "charts/20260120_SH603183_建研院.png"
|
||
},
|
||
{
|
||
"idx": 7,
|
||
"code": "SH600395",
|
||
"name": "盘江股份",
|
||
"strengthUp": 0.1919849309916869,
|
||
"strengthDown": 0.1919849309916869,
|
||
"direction": "none",
|
||
"widthRatio": 0.06674904774137999,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 5,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.1919849309916869,
|
||
"chartPath": "charts/20260120_SH600395_盘江股份.png"
|
||
},
|
||
{
|
||
"idx": 19,
|
||
"code": "SH601236",
|
||
"name": "红塔证券",
|
||
"strengthUp": 0.18998288738753003,
|
||
"strengthDown": 0.18998288738753003,
|
||
"direction": "none",
|
||
"widthRatio": 0.05887454623774115,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.18998288738753003,
|
||
"chartPath": "charts/20260120_SH601236_红塔证券.png"
|
||
},
|
||
{
|
||
"idx": 40,
|
||
"code": "SH688202",
|
||
"name": "美迪西",
|
||
"strengthUp": 0.1889796919942595,
|
||
"strengthDown": 0.1889796919942595,
|
||
"direction": "none",
|
||
"widthRatio": 0.31351008126626717,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.1889796919942595,
|
||
"chartPath": "charts/20260120_SH688202_美迪西.png"
|
||
},
|
||
{
|
||
"idx": 63,
|
||
"code": "SZ002142",
|
||
"name": "宁波银行",
|
||
"strengthUp": 0.18895377446089112,
|
||
"strengthDown": 0.18895377446089112,
|
||
"direction": "none",
|
||
"widthRatio": 0.13991351758720233,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 6,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.18895377446089112,
|
||
"chartPath": "charts/20260120_SZ002142_宁波银行.png"
|
||
},
|
||
{
|
||
"idx": 5,
|
||
"code": "SH600281",
|
||
"name": "华阳新材",
|
||
"strengthUp": 0.18512840810396544,
|
||
"strengthDown": 0.18512840810396544,
|
||
"direction": "none",
|
||
"widthRatio": 0.07438652259509536,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.18512840810396544,
|
||
"chartPath": "charts/20260120_SH600281_华阳新材.png"
|
||
},
|
||
{
|
||
"idx": 65,
|
||
"code": "SZ002242",
|
||
"name": "九阳股份",
|
||
"strengthUp": 0.1824425457661769,
|
||
"strengthDown": 0.1824425457661769,
|
||
"direction": "none",
|
||
"widthRatio": 0.10849554328152096,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.1824425457661769,
|
||
"chartPath": "charts/20260120_SZ002242_九阳股份.png"
|
||
},
|
||
{
|
||
"idx": 44,
|
||
"code": "SH688472",
|
||
"name": "阿特斯",
|
||
"strengthUp": 0.18173122767340782,
|
||
"strengthDown": 0.18173122767340782,
|
||
"direction": "none",
|
||
"widthRatio": 0.22726004705445743,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.18173122767340782,
|
||
"chartPath": "charts/20260120_SH688472_阿特斯.png"
|
||
},
|
||
{
|
||
"idx": 29,
|
||
"code": "SH603527",
|
||
"name": "众源新材",
|
||
"strengthUp": 0.18102354502484558,
|
||
"strengthDown": 0.18102354502484558,
|
||
"direction": "none",
|
||
"widthRatio": 0.0950555464327197,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.18102354502484558,
|
||
"chartPath": "charts/20260120_SH603527_众源新材.png"
|
||
},
|
||
{
|
||
"idx": 87,
|
||
"code": "SZ300328",
|
||
"name": "宜安科技",
|
||
"strengthUp": 0.17986675407549071,
|
||
"strengthDown": 0.17986675407549071,
|
||
"direction": "none",
|
||
"widthRatio": 0.13703331095825805,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 6,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.17986675407549071,
|
||
"chartPath": "charts/20260120_SZ300328_宜安科技.png"
|
||
},
|
||
{
|
||
"idx": 75,
|
||
"code": "SZ002748",
|
||
"name": "世龙实业",
|
||
"strengthUp": 0.17690293875636465,
|
||
"strengthDown": 0.17690293875636465,
|
||
"direction": "none",
|
||
"widthRatio": 0.1157279750374011,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.17690293875636465,
|
||
"chartPath": "charts/20260120_SZ002748_世龙实业.png"
|
||
},
|
||
{
|
||
"idx": 49,
|
||
"code": "SZ000039",
|
||
"name": "中集集团",
|
||
"strengthUp": 0.175225005724119,
|
||
"strengthDown": 0.175225005724119,
|
||
"direction": "none",
|
||
"widthRatio": 0.14102846289352128,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.175225005724119,
|
||
"chartPath": "charts/20260120_SZ000039_中集集团.png"
|
||
},
|
||
{
|
||
"idx": 61,
|
||
"code": "SZ002042",
|
||
"name": "华孚时尚",
|
||
"strengthUp": 0.17403913566397303,
|
||
"strengthDown": 0.17403913566397303,
|
||
"direction": "none",
|
||
"widthRatio": 0.1301004225125526,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.17403913566397303,
|
||
"chartPath": "charts/20260120_SZ002042_华孚时尚.png"
|
||
},
|
||
{
|
||
"idx": 77,
|
||
"code": "SZ002857",
|
||
"name": "三晖电气",
|
||
"strengthUp": 0.17312358659123697,
|
||
"strengthDown": 0.17312358659123697,
|
||
"direction": "none",
|
||
"widthRatio": 0.1347956582800327,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.17312358659123697,
|
||
"chartPath": "charts/20260120_SZ002857_三晖电气.png"
|
||
},
|
||
{
|
||
"idx": 33,
|
||
"code": "SH603900",
|
||
"name": "莱绅通灵",
|
||
"strengthUp": 0.17288870026798384,
|
||
"strengthDown": 0.17288870026798384,
|
||
"direction": "none",
|
||
"widthRatio": 0.13682392471321897,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.17288870026798384,
|
||
"chartPath": "charts/20260120_SH603900_莱绅通灵.png"
|
||
},
|
||
{
|
||
"idx": 35,
|
||
"code": "SH605138",
|
||
"name": "盛泰集团",
|
||
"strengthUp": 0.17223868105148357,
|
||
"strengthDown": 0.17223868105148357,
|
||
"direction": "none",
|
||
"widthRatio": 0.29759336000089764,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.17223868105148357,
|
||
"chartPath": "charts/20260120_SH605138_盛泰集团.png"
|
||
},
|
||
{
|
||
"idx": 98,
|
||
"code": "SZ300892",
|
||
"name": "品渥食品",
|
||
"strengthUp": 0.17047329116027116,
|
||
"strengthDown": 0.17047329116027116,
|
||
"direction": "none",
|
||
"widthRatio": 0.2865112467693385,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.17047329116027116,
|
||
"chartPath": "charts/20260120_SZ300892_品渥食品.png"
|
||
},
|
||
{
|
||
"idx": 100,
|
||
"code": "SZ300998",
|
||
"name": "宁波方正",
|
||
"strengthUp": 0.17012827373543754,
|
||
"strengthDown": 0.17012827373543754,
|
||
"direction": "none",
|
||
"widthRatio": 0.20127021221897767,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.17012827373543754,
|
||
"chartPath": "charts/20260120_SZ300998_宁波方正.png"
|
||
},
|
||
{
|
||
"idx": 24,
|
||
"code": "SH603118",
|
||
"name": "共进股份",
|
||
"strengthUp": 0.16906025345338752,
|
||
"strengthDown": 0.16906025345338752,
|
||
"direction": "none",
|
||
"widthRatio": 0.2105774382355951,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.16906025345338752,
|
||
"chartPath": "charts/20260120_SH603118_共进股份.png"
|
||
},
|
||
{
|
||
"idx": 27,
|
||
"code": "SH603315",
|
||
"name": "福鞍股份",
|
||
"strengthUp": 0.15790131726515544,
|
||
"strengthDown": 0.15790131726515544,
|
||
"direction": "none",
|
||
"widthRatio": 0.22510872342227875,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 5,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.15790131726515544,
|
||
"chartPath": "charts/20260120_SH603315_福鞍股份.png"
|
||
},
|
||
{
|
||
"idx": 73,
|
||
"code": "SZ002644",
|
||
"name": "佛慈制药",
|
||
"strengthUp": 0.15588994157802943,
|
||
"strengthDown": 0.15588994157802943,
|
||
"direction": "none",
|
||
"widthRatio": 0.22414110145582697,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.15588994157802943,
|
||
"chartPath": "charts/20260120_SZ002644_佛慈制药.png"
|
||
},
|
||
{
|
||
"idx": 34,
|
||
"code": "SH603990",
|
||
"name": "麦迪科技",
|
||
"strengthUp": 0.1557985488450507,
|
||
"strengthDown": 0.1557985488450507,
|
||
"direction": "none",
|
||
"widthRatio": 0.22196961351919475,
|
||
"touchesUpper": 6,
|
||
"touchesLower": 5,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.1557985488450507,
|
||
"chartPath": "charts/20260120_SH603990_麦迪科技.png"
|
||
},
|
||
{
|
||
"idx": 55,
|
||
"code": "SZ000796",
|
||
"name": "凯撒旅业",
|
||
"strengthUp": 0.15539570199649727,
|
||
"strengthDown": 0.15539570199649727,
|
||
"direction": "none",
|
||
"widthRatio": 0.2257372064001412,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 2,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.15539570199649727,
|
||
"chartPath": "charts/20260120_SZ000796_凯撒旅业.png"
|
||
},
|
||
{
|
||
"idx": 99,
|
||
"code": "SZ300946",
|
||
"name": "恒而达",
|
||
"strengthUp": 0.15456144771321267,
|
||
"strengthDown": 0.15456144771321267,
|
||
"direction": "none",
|
||
"widthRatio": 0.22719307281507875,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.15456144771321267,
|
||
"chartPath": "charts/20260120_SZ300946_恒而达.png"
|
||
},
|
||
{
|
||
"idx": 64,
|
||
"code": "SZ002192",
|
||
"name": "融捷股份",
|
||
"strengthUp": 0.15349671854120991,
|
||
"strengthDown": 0.15349671854120991,
|
||
"direction": "none",
|
||
"widthRatio": 0.23256546452034127,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.15349671854120991,
|
||
"chartPath": "charts/20260120_SZ002192_融捷股份.png"
|
||
},
|
||
{
|
||
"idx": 105,
|
||
"code": "SZ301290",
|
||
"name": "东星医疗",
|
||
"strengthUp": 0.15304481704191078,
|
||
"strengthDown": 0.15304481704191078,
|
||
"direction": "none",
|
||
"widthRatio": 0.23779614697305917,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.15304481704191078,
|
||
"chartPath": "charts/20260120_SZ301290_东星医疗.png"
|
||
},
|
||
{
|
||
"idx": 57,
|
||
"code": "SZ000931",
|
||
"name": "中关村",
|
||
"strengthUp": 0.1476315499230738,
|
||
"strengthDown": 0.1476315499230738,
|
||
"direction": "none",
|
||
"widthRatio": 0.2691795834744121,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.1476315499230738,
|
||
"chartPath": "charts/20260120_SZ000931_中关村.png"
|
||
},
|
||
{
|
||
"idx": 96,
|
||
"code": "SZ300790",
|
||
"name": "宇瞳光学",
|
||
"strengthUp": 0.14637009517627197,
|
||
"strengthDown": 0.14637009517627197,
|
||
"direction": "none",
|
||
"widthRatio": 0.3018970777007482,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.14637009517627197,
|
||
"chartPath": "charts/20260120_SZ300790_宇瞳光学.png"
|
||
},
|
||
{
|
||
"idx": 42,
|
||
"code": "SH688318",
|
||
"name": "财富趋势",
|
||
"strengthUp": 0.14500261432396305,
|
||
"strengthDown": 0.14500261432396305,
|
||
"direction": "none",
|
||
"widthRatio": 0.27505993688351926,
|
||
"touchesUpper": 2,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.14500261432396305,
|
||
"chartPath": "charts/20260120_SH688318_财富趋势.png"
|
||
},
|
||
{
|
||
"idx": 67,
|
||
"code": "SZ002343",
|
||
"name": "慈文传媒",
|
||
"strengthUp": 0.1428338302221911,
|
||
"strengthDown": 0.1428338302221911,
|
||
"direction": "none",
|
||
"widthRatio": 0.2873372553832457,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.1428338302221911,
|
||
"chartPath": "charts/20260120_SZ002343_慈文传媒.png"
|
||
},
|
||
{
|
||
"idx": 107,
|
||
"code": "SZ301458",
|
||
"name": "钧崴电子",
|
||
"strengthUp": 0.12820946725171983,
|
||
"strengthDown": 0.12820946725171983,
|
||
"direction": "none",
|
||
"widthRatio": 0.4366678022030362,
|
||
"touchesUpper": 5,
|
||
"touchesLower": 3,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.12820946725171983,
|
||
"chartPath": "charts/20260120_SZ301458_钧崴电子.png"
|
||
},
|
||
{
|
||
"idx": 83,
|
||
"code": "SZ300128",
|
||
"name": "锦富技术",
|
||
"strengthUp": 0.12779899501849626,
|
||
"strengthDown": 0.12779899501849626,
|
||
"direction": "none",
|
||
"widthRatio": 0.3612532098770752,
|
||
"touchesUpper": 3,
|
||
"touchesLower": 4,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.12779899501849626,
|
||
"chartPath": "charts/20260120_SZ300128_锦富技术.png"
|
||
},
|
||
{
|
||
"idx": 86,
|
||
"code": "SZ300278",
|
||
"name": "华昌达",
|
||
"strengthUp": 0.12713459402711935,
|
||
"strengthDown": 0.12713459402711935,
|
||
"direction": "none",
|
||
"widthRatio": 0.36793662378306974,
|
||
"touchesUpper": 4,
|
||
"touchesLower": 5,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"hasTriangle": true,
|
||
"strength": 0.12713459402711935,
|
||
"chartPath": "charts/20260120_SZ300278_华昌达.png"
|
||
},
|
||
{
|
||
"idx": 0,
|
||
"code": "SH600000",
|
||
"name": "浦发银行",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600000_浦发银行.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 1,
|
||
"code": "SH600063",
|
||
"name": "皖维高新",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600063_皖维高新.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 2,
|
||
"code": "SH600113",
|
||
"name": "浙江东日",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600113_浙江东日.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 3,
|
||
"code": "SH600171",
|
||
"name": "上海贝岭",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600171_上海贝岭.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 4,
|
||
"code": "SH600226",
|
||
"name": "亨通股份",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600226_亨通股份.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 6,
|
||
"code": "SH600336",
|
||
"name": "澳柯玛",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600336_澳柯玛.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 8,
|
||
"code": "SH600475",
|
||
"name": "华光环能",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600475_华光环能.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 10,
|
||
"code": "SH600588",
|
||
"name": "用友网络",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600588_用友网络.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 11,
|
||
"code": "SH600640",
|
||
"name": "国脉文化",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600640_国脉文化.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 12,
|
||
"code": "SH600693",
|
||
"name": "东百集团",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600693_东百集团.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 16,
|
||
"code": "SH600898",
|
||
"name": "*ST美讯",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH600898_ST美讯.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 18,
|
||
"code": "SH601096",
|
||
"name": "宏盛华源",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH601096_宏盛华源.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 23,
|
||
"code": "SH603061",
|
||
"name": "金海通",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH603061_金海通.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 32,
|
||
"code": "SH603813",
|
||
"name": "*ST原尚",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH603813_ST原尚.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 36,
|
||
"code": "SH605368",
|
||
"name": "蓝天燃气",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH605368_蓝天燃气.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 37,
|
||
"code": "SH688031",
|
||
"name": "星环科技",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH688031_星环科技.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 39,
|
||
"code": "SH688147",
|
||
"name": "微导纳米",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH688147_微导纳米.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 41,
|
||
"code": "SH688262",
|
||
"name": "国芯科技",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH688262_国芯科技.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 43,
|
||
"code": "SH688377",
|
||
"name": "迪威尔",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH688377_迪威尔.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 45,
|
||
"code": "SH688550",
|
||
"name": "瑞联新材",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH688550_瑞联新材.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 46,
|
||
"code": "SH688607",
|
||
"name": "康众医疗",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH688607_康众医疗.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 47,
|
||
"code": "SH688679",
|
||
"name": "通源环境",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH688679_通源环境.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 48,
|
||
"code": "SH688776",
|
||
"name": "国光电气",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SH688776_国光电气.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 50,
|
||
"code": "SZ000411",
|
||
"name": "英特集团",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ000411_英特集团.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 51,
|
||
"code": "SZ000535",
|
||
"name": "*ST 猴王",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ000535_ST 猴王.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 52,
|
||
"code": "SZ000593",
|
||
"name": "德龙汇能",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ000593_德龙汇能.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 53,
|
||
"code": "SZ000662",
|
||
"name": "天夏退",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ000662_天夏退.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 56,
|
||
"code": "SZ000866",
|
||
"name": "扬子石化",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ000866_扬子石化.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 58,
|
||
"code": "SZ000998",
|
||
"name": "隆平高科",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ000998_隆平高科.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 62,
|
||
"code": "SZ002092",
|
||
"name": "中泰化学",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ002092_中泰化学.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 66,
|
||
"code": "SZ002293",
|
||
"name": "罗莱生活",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ002293_罗莱生活.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 68,
|
||
"code": "SZ002393",
|
||
"name": "力生制药",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ002393_力生制药.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 69,
|
||
"code": "SZ002443",
|
||
"name": "金洲管道",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ002443_金洲管道.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 70,
|
||
"code": "SZ002493",
|
||
"name": "荣盛石化",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ002493_荣盛石化.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 71,
|
||
"code": "SZ002544",
|
||
"name": "普天科技",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ002544_普天科技.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 74,
|
||
"code": "SZ002694",
|
||
"name": "顾地科技",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ002694_顾地科技.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 80,
|
||
"code": "SZ003019",
|
||
"name": "宸展光电",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ003019_宸展光电.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 81,
|
||
"code": "SZ300027",
|
||
"name": "华谊兄弟",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ300027_华谊兄弟.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 82,
|
||
"code": "SZ300078",
|
||
"name": "思创医惠",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ300078_思创医惠.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 84,
|
||
"code": "SZ300178",
|
||
"name": "腾邦退(退市)",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ300178_腾邦退(退市).png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 85,
|
||
"code": "SZ300228",
|
||
"name": "富瑞特装",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ300228_富瑞特装.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 88,
|
||
"code": "SZ300379",
|
||
"name": "*ST东通",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ300379_ST东通.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 89,
|
||
"code": "SZ300429",
|
||
"name": "强力新材",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ300429_强力新材.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 90,
|
||
"code": "SZ300479",
|
||
"name": "神思电子",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ300479_神思电子.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 92,
|
||
"code": "SZ300582",
|
||
"name": "英飞特",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ300582_英飞特.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 101,
|
||
"code": "SZ301051",
|
||
"name": "信濠光电",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ301051_信濠光电.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 102,
|
||
"code": "SZ301107",
|
||
"name": "瑜欣电子",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ301107_瑜欣电子.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 103,
|
||
"code": "SZ301169",
|
||
"name": "零点有数",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ301169_零点有数.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 104,
|
||
"code": "SZ301225",
|
||
"name": "恒勃股份",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ301225_恒勃股份.png",
|
||
"hasTriangle": false
|
||
},
|
||
{
|
||
"idx": 106,
|
||
"code": "SZ301355",
|
||
"name": "南王科技",
|
||
"strengthUp": 0.0,
|
||
"strengthDown": 0.0,
|
||
"strength": 0.0,
|
||
"direction": "none",
|
||
"widthRatio": 0.0,
|
||
"touchesUpper": 0,
|
||
"touchesLower": 0,
|
||
"volumeConfirmed": "",
|
||
"date": 20260120,
|
||
"chartPath": "charts/20260120_SZ301355_南王科技.png",
|
||
"hasTriangle": false
|
||
}
|
||
];
|
||
let currentThreshold = 0;
|
||
|
||
// 筛选和排序状态
|
||
let filters = {
|
||
direction: 'all', // 'all', 'up', 'down', 'none'
|
||
volume: 'all' // 'all', 'true', 'false'
|
||
};
|
||
let sortBy = 'strength'; // 'strength', 'widthRatio', 'touches'
|
||
let sortOrder = 'desc'; // 'desc', 'asc'
|
||
let searchQuery = '';
|
||
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
setupEventListeners();
|
||
filterAndDisplayStocks();
|
||
});
|
||
|
||
function setupEventListeners() {
|
||
// 强度滑块
|
||
const slider = document.getElementById('strengthSlider');
|
||
const sliderTrack = document.getElementById('sliderTrack');
|
||
const valueDisplay = document.getElementById('strengthValue');
|
||
|
||
slider.addEventListener('input', function() {
|
||
currentThreshold = parseFloat(this.value);
|
||
valueDisplay.textContent = currentThreshold.toFixed(2);
|
||
sliderTrack.style.setProperty('--slider-value', (currentThreshold * 100) + '%');
|
||
filterAndDisplayStocks();
|
||
});
|
||
|
||
// 搜索框
|
||
const searchInput = document.getElementById('searchInput');
|
||
const searchBox = document.querySelector('.search-box');
|
||
const clearSearch = document.getElementById('clearSearch');
|
||
|
||
searchInput.addEventListener('input', function() {
|
||
searchQuery = this.value;
|
||
if (searchQuery) {
|
||
searchBox.classList.add('has-value');
|
||
} else {
|
||
searchBox.classList.remove('has-value');
|
||
}
|
||
filterAndDisplayStocks();
|
||
});
|
||
|
||
clearSearch.addEventListener('click', function() {
|
||
searchInput.value = '';
|
||
searchQuery = '';
|
||
searchBox.classList.remove('has-value');
|
||
filterAndDisplayStocks();
|
||
});
|
||
|
||
// 排序选择
|
||
const sortSelect = document.getElementById('sortSelect');
|
||
sortSelect.addEventListener('change', function() {
|
||
sortBy = this.value;
|
||
filterAndDisplayStocks();
|
||
});
|
||
|
||
// 排序顺序切换
|
||
const sortOrderBtn = document.getElementById('sortOrder');
|
||
sortOrderBtn.addEventListener('click', function() {
|
||
sortOrder = sortOrder === 'desc' ? 'asc' : 'desc';
|
||
this.textContent = sortOrder === 'desc' ? '↓' : '↑';
|
||
this.classList.toggle('active', sortOrder === 'desc');
|
||
filterAndDisplayStocks();
|
||
});
|
||
|
||
// 方向筛选芯片
|
||
const directionFilter = document.getElementById('directionFilter');
|
||
directionFilter.addEventListener('click', function(e) {
|
||
if (e.target.classList.contains('filter-chip')) {
|
||
directionFilter.querySelectorAll('.filter-chip').forEach(chip => chip.classList.remove('active'));
|
||
e.target.classList.add('active');
|
||
filters.direction = e.target.dataset.value;
|
||
filterAndDisplayStocks();
|
||
}
|
||
});
|
||
|
||
// 放量筛选芯片
|
||
const volumeFilter = document.getElementById('volumeFilter');
|
||
volumeFilter.addEventListener('click', function(e) {
|
||
if (e.target.classList.contains('filter-chip')) {
|
||
volumeFilter.querySelectorAll('.filter-chip').forEach(chip => chip.classList.remove('active'));
|
||
e.target.classList.add('active');
|
||
filters.volume = e.target.dataset.value;
|
||
filterAndDisplayStocks();
|
||
}
|
||
});
|
||
|
||
// 重置按钮
|
||
document.getElementById('resetBtn').addEventListener('click', resetFilters);
|
||
|
||
// 模态框
|
||
document.getElementById('imageModal').addEventListener('click', function(e) {
|
||
if (e.target === this) closeModal();
|
||
});
|
||
}
|
||
|
||
function resetFilters() {
|
||
// 重置所有筛选和排序状态
|
||
currentThreshold = 0;
|
||
filters = { direction: 'all', volume: 'all' };
|
||
sortBy = 'strength';
|
||
sortOrder = 'desc';
|
||
searchQuery = '';
|
||
|
||
// 重置UI
|
||
document.getElementById('strengthSlider').value = 0;
|
||
document.getElementById('strengthValue').textContent = '0.00';
|
||
document.getElementById('sliderTrack').style.setProperty('--slider-value', '0%');
|
||
|
||
document.getElementById('searchInput').value = '';
|
||
document.querySelector('.search-box').classList.remove('has-value');
|
||
|
||
document.getElementById('sortSelect').value = 'strength';
|
||
const sortOrderBtn = document.getElementById('sortOrder');
|
||
sortOrderBtn.textContent = '↓';
|
||
sortOrderBtn.classList.add('active');
|
||
|
||
document.querySelectorAll('#directionFilter .filter-chip').forEach((chip, i) => {
|
||
chip.classList.toggle('active', i === 0);
|
||
});
|
||
filters.direction = 'all';
|
||
|
||
document.querySelectorAll('#volumeFilter .filter-chip').forEach((chip, i) => {
|
||
chip.classList.toggle('active', i === 0);
|
||
});
|
||
filters.volume = 'all';
|
||
|
||
filterAndDisplayStocks();
|
||
}
|
||
|
||
function filterAndDisplayStocks() {
|
||
let result = [...allStocks];
|
||
|
||
// 强度阈值筛选
|
||
result = result.filter(stock => stock.strength >= currentThreshold);
|
||
|
||
// 方向筛选
|
||
if (filters.direction !== 'all') {
|
||
result = result.filter(stock => stock.direction === filters.direction);
|
||
}
|
||
|
||
// 放量确认筛选
|
||
if (filters.volume !== 'all') {
|
||
const value = filters.volume === 'true';
|
||
result = result.filter(stock => stock.volumeConfirmed === (value ? 'True' : 'False'));
|
||
}
|
||
|
||
// 搜索
|
||
if (searchQuery) {
|
||
const q = searchQuery.toLowerCase();
|
||
result = result.filter(stock =>
|
||
stock.code.toLowerCase().includes(q) ||
|
||
stock.name.toLowerCase().includes(q)
|
||
);
|
||
}
|
||
|
||
// 排序
|
||
result.sort((a, b) => {
|
||
let aVal, bVal;
|
||
if (sortBy === 'strength') {
|
||
aVal = a.strength;
|
||
bVal = b.strength;
|
||
} else if (sortBy === 'widthRatio') {
|
||
aVal = a.widthRatio;
|
||
bVal = b.widthRatio;
|
||
} else if (sortBy === 'touches') {
|
||
aVal = a.touchesUpper + a.touchesLower;
|
||
bVal = b.touchesUpper + b.touchesLower;
|
||
}
|
||
return sortOrder === 'desc' ? bVal - aVal : aVal - bVal;
|
||
});
|
||
|
||
renderGrid(result);
|
||
updateStats(result);
|
||
}
|
||
|
||
function renderGrid(stocks) {
|
||
const grid = document.getElementById('stocksGrid');
|
||
const emptyState = document.getElementById('emptyState');
|
||
|
||
if (stocks.length === 0) {
|
||
grid.style.display = 'none';
|
||
emptyState.style.display = 'block';
|
||
} else {
|
||
grid.style.display = 'grid';
|
||
emptyState.style.display = 'none';
|
||
grid.innerHTML = stocks.map(stock => createStockCard(stock)).join('');
|
||
}
|
||
}
|
||
|
||
function updateStats(filteredStocks) {
|
||
document.getElementById('totalStocks').textContent = allStocks.length;
|
||
document.getElementById('displayedStocks').textContent = filteredStocks.length;
|
||
const avgStrength = filteredStocks.length > 0
|
||
? filteredStocks.reduce((sum, s) => sum + s.strength, 0) / filteredStocks.length
|
||
: 0;
|
||
document.getElementById('avgStrength').textContent = avgStrength.toFixed(3);
|
||
}
|
||
|
||
function createStockCard(stock) {
|
||
const directionText = stock.direction === 'up' ? '↑ 向上' :
|
||
stock.direction === 'down' ? '↓ 向下' : '— 无';
|
||
const directionClass = stock.direction === 'up' ? 'direction-up' :
|
||
stock.direction === 'down' ? 'direction-down' : '';
|
||
const volumeText = stock.volumeConfirmed === 'True' ? '✓' :
|
||
stock.volumeConfirmed === 'False' ? '✗' : '—';
|
||
|
||
return `
|
||
<div class="stock-card" onclick="openModal('${stock.chartPath}')">
|
||
<div class="card-header">
|
||
<div class="stock-identity">
|
||
<div class="stock-name">${stock.name}</div>
|
||
<span class="stock-code">${stock.code}</span>
|
||
</div>
|
||
<div class="strength-badge">
|
||
<div class="strength-value">${stock.strength.toFixed(3)}</div>
|
||
<div class="strength-label">强度分</div>
|
||
</div>
|
||
</div>
|
||
<div class="card-body">
|
||
<div class="metrics-grid">
|
||
<div class="metric-item">
|
||
<span class="metric-label">突破方向</span>
|
||
<span class="metric-value ${directionClass}">${directionText}</span>
|
||
</div>
|
||
<div class="metric-item">
|
||
<span class="metric-label">宽度比</span>
|
||
<span class="metric-value">${stock.widthRatio.toFixed(2)}</span>
|
||
</div>
|
||
<div class="metric-item">
|
||
<span class="metric-label">触碰次数</span>
|
||
<span class="metric-value">${stock.touchesUpper}/${stock.touchesLower}</span>
|
||
</div>
|
||
<div class="metric-item">
|
||
<span class="metric-label">放量确认</span>
|
||
<span class="metric-value">${volumeText}</span>
|
||
</div>
|
||
</div>
|
||
<div class="chart-container">
|
||
<img src="${stock.chartPath}"
|
||
alt="${stock.name}"
|
||
class="stock-chart"
|
||
onerror="handleImageError(this)">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
`;
|
||
}
|
||
|
||
function handleImageError(img) {
|
||
if (img.dataset.errorHandled) return;
|
||
img.dataset.errorHandled = 'true';
|
||
img.style.display = 'none';
|
||
const noChart = document.createElement('div');
|
||
noChart.className = 'no-chart';
|
||
noChart.textContent = '图表不可用';
|
||
img.parentElement.appendChild(noChart);
|
||
}
|
||
|
||
function openModal(imagePath) {
|
||
event.stopPropagation();
|
||
document.getElementById('modalImage').src = imagePath;
|
||
document.getElementById('imageModal').classList.add('show');
|
||
}
|
||
|
||
function closeModal() {
|
||
document.getElementById('imageModal').classList.remove('show');
|
||
}
|
||
|
||
document.addEventListener('keydown', function(e) {
|
||
if (e.key === 'Escape') closeModal();
|
||
});
|
||
</script>
|
||
</body>
|
||
</html> |