褚宏光 0f8b9d836b Refactor strength scoring system with new parameters and renaming
- Introduced a new "tilt" parameter to the strength scoring system, allowing for the assessment of triangle slope directionality.
- Renamed existing parameters: "拟合贴合度" to "形态规则度" and "边界利用率" to "价格活跃度" for improved clarity.
- Updated normalization methods for all strength components to ensure they remain within the [0, 1] range, facilitating LLM tuning.
- Enhanced documentation to reflect changes in parameter names and scoring logic, including detailed explanations of the new tilt parameter.
- Modified multiple source files and scripts to accommodate the new scoring structure and ensure backward compatibility.

Files modified:
- `src/converging_triangle.py`, `src/converging_triangle_optimized.py`, `src/triangle_detector_api.py`: Updated parameter names and scoring logic.
- `scripts/plot_converging_triangles.py`, `scripts/generate_stock_viewer.py`: Adjusted for new scoring parameters in output.
- New documentation files created to explain the renaming and new scoring system in detail.
2026-01-29 15:55:50 +08:00

3378 lines
101 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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);
}
/* Detail Toggle */
.detail-toggle {
padding: 10px 18px;
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;
}
.detail-toggle:hover {
border-color: var(--accent-primary);
color: var(--accent-primary);
}
.detail-toggle.active {
background: rgba(0, 212, 170, 0.1);
border-color: var(--accent-primary);
color: var(--accent-primary);
}
/* 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>
<script>
// 工具函数需要在页面加载前定义因为HTML元素的onerror会直接调用
function handleModalImageError(img) {
const fallbackSrc = img.dataset.fallbackSrc;
if (fallbackSrc && img.src !== fallbackSrc && img.dataset.fallbackTried !== 'true') {
img.dataset.fallbackTried = 'true';
img.src = fallbackSrc;
}
}
</script>
</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="detail-toggle" id="detailToggle" title="切换详细图">
详细图: 关
</button>
<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()">&times;</button>
<img id="modalImage" src="" alt="股票图表" onerror="handleModalImageError(this)">
</div>
</div>
<script>
// 内嵌数据
const allStocks = [
{
"idx": 28,
"code": "SH603379",
"name": "三美股份",
"strengthUp": 0.26552211680191823,
"strengthDown": 0.10246828722215302,
"direction": "up",
"widthRatio": 0.08922158280365546,
"touchesUpper": 4,
"touchesLower": 4,
"volumeConfirmed": "False",
"activityScore": 0.0918991906342708,
"tiltScore": 0.5118548082524743,
"date": 20260120,
"hasTriangle": true,
"strength": 0.26552211680191823,
"chartPath": "charts/20260120_SH603379_三美股份.png",
"chartPathDetail": "charts/20260120_SH603379_三美股份_detail.png"
},
{
"idx": 13,
"code": "SH600744",
"name": "华银电力",
"strengthUp": 0.1522090509643363,
"strengthDown": 0.06024352434094318,
"direction": "up",
"widthRatio": 0.2867596230842454,
"touchesUpper": 5,
"touchesLower": 2,
"volumeConfirmed": "True",
"activityScore": 0.043431555801019366,
"tiltScore": 0.4941072370149417,
"date": 20260120,
"hasTriangle": true,
"strength": 0.1522090509643363,
"chartPath": "charts/20260120_SH600744_华银电力.png",
"chartPathDetail": "charts/20260120_SH600744_华银电力_detail.png"
},
{
"idx": 95,
"code": "SZ300737",
"name": "科顺股份",
"strengthUp": 0.13400783708484898,
"strengthDown": 0.13400783708484898,
"direction": "none",
"widthRatio": 0.21325532904558048,
"touchesUpper": 6,
"touchesLower": 7,
"volumeConfirmed": "",
"activityScore": 0.10726164130830072,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.13400783708484898,
"chartPath": "charts/20260120_SZ300737_科顺股份.png",
"chartPathDetail": "charts/20260120_SZ300737_科顺股份_detail.png"
},
{
"idx": 20,
"code": "SH601609",
"name": "金田股份",
"strengthUp": 0.12944397068032543,
"strengthDown": 0.09411496667658434,
"direction": "up",
"widthRatio": 0.03896315672868362,
"touchesUpper": 4,
"touchesLower": 6,
"volumeConfirmed": "True",
"activityScore": 0.06788056841717838,
"tiltScore": 0.4980944504664168,
"date": 20260120,
"hasTriangle": true,
"strength": 0.12944397068032543,
"chartPath": "charts/20260120_SH601609_金田股份.png",
"chartPathDetail": "charts/20260120_SH601609_金田股份_detail.png"
},
{
"idx": 91,
"code": "SZ300530",
"name": "领湃科技",
"strengthUp": 0.1208592686961565,
"strengthDown": 0.1208592686961565,
"direction": "none",
"widthRatio": 0.12780633375372022,
"touchesUpper": 3,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.0779332041056322,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.1208592686961565,
"chartPath": "charts/20260120_SZ300530_领湃科技.png",
"chartPathDetail": "charts/20260120_SZ300530_领湃科技_detail.png"
},
{
"idx": 26,
"code": "SH603237",
"name": "五芳斋",
"strengthUp": 0.11693159036032842,
"strengthDown": 0.11693159036032842,
"direction": "none",
"widthRatio": 0.1737453100820701,
"touchesUpper": 5,
"touchesLower": 5,
"volumeConfirmed": "",
"activityScore": 0.11576413387880975,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.11693159036032842,
"chartPath": "charts/20260120_SH603237_五芳斋.png",
"chartPathDetail": "charts/20260120_SH603237_五芳斋_detail.png"
},
{
"idx": 76,
"code": "SZ002802",
"name": "洪汇新材",
"strengthUp": 0.1157886059983914,
"strengthDown": 0.1157886059983914,
"direction": "none",
"widthRatio": 0.23884176697328596,
"touchesUpper": 5,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.11825336342954114,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.1157886059983914,
"chartPath": "charts/20260120_SZ002802_洪汇新材.png",
"chartPathDetail": "charts/20260120_SZ002802_洪汇新材_detail.png"
},
{
"idx": 22,
"code": "SH603005",
"name": "晶方科技",
"strengthUp": 0.11219704543568702,
"strengthDown": 0.11219704543568702,
"direction": "none",
"widthRatio": 0.34612788685827206,
"touchesUpper": 4,
"touchesLower": 6,
"volumeConfirmed": "",
"activityScore": 0.09423792705949945,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.11219704543568702,
"chartPath": "charts/20260120_SH603005_晶方科技.png",
"chartPathDetail": "charts/20260120_SH603005_晶方科技_detail.png"
},
{
"idx": 54,
"code": "SZ000722",
"name": "湖南发展",
"strengthUp": 0.11189572237297984,
"strengthDown": 0.11189572237297984,
"direction": "none",
"widthRatio": 0.16117444007433868,
"touchesUpper": 5,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.08798114509673645,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.11189572237297984,
"chartPath": "charts/20260120_SZ000722_湖南发展.png",
"chartPathDetail": "charts/20260120_SZ000722_湖南发展_detail.png"
},
{
"idx": 79,
"code": "SZ002966",
"name": "苏州银行",
"strengthUp": 0.10487848984668484,
"strengthDown": 0.10487848984668484,
"direction": "none",
"widthRatio": 0.15024073729732276,
"touchesUpper": 3,
"touchesLower": 5,
"volumeConfirmed": "",
"activityScore": 0.1047780210216016,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.10487848984668484,
"chartPath": "charts/20260120_SZ002966_苏州银行.png",
"chartPathDetail": "charts/20260120_SZ002966_苏州银行_detail.png"
},
{
"idx": 63,
"code": "SZ002142",
"name": "宁波银行",
"strengthUp": 0.10477713216177321,
"strengthDown": 0.10477713216177321,
"direction": "none",
"widthRatio": 0.13991351758720233,
"touchesUpper": 4,
"touchesLower": 6,
"volumeConfirmed": "",
"activityScore": 0.11480839114261941,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.10477713216177321,
"chartPath": "charts/20260120_SZ002142_宁波银行.png",
"chartPathDetail": "charts/20260120_SZ002142_宁波银行_detail.png"
},
{
"idx": 98,
"code": "SZ300892",
"name": "品渥食品",
"strengthUp": 0.09790798372541941,
"strengthDown": 0.09790798372541941,
"direction": "none",
"widthRatio": 0.2865112467693385,
"touchesUpper": 4,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.11654210122156917,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.09790798372541941,
"chartPath": "charts/20260120_SZ300892_品渥食品.png",
"chartPathDetail": "charts/20260120_SZ300892_品渥食品_detail.png"
},
{
"idx": 72,
"code": "SZ002594",
"name": "比亚迪",
"strengthUp": 0.09233096068217786,
"strengthDown": 0.09233096068217786,
"direction": "none",
"widthRatio": 0.08603808634243997,
"touchesUpper": 4,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.0920929694726742,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.09233096068217786,
"chartPath": "charts/20260120_SZ002594_比亚迪.png",
"chartPathDetail": "charts/20260120_SZ002594_比亚迪_detail.png"
},
{
"idx": 97,
"code": "SZ300841",
"name": "康华生物",
"strengthUp": 0.08635645424076827,
"strengthDown": 0.08635645424076827,
"direction": "none",
"widthRatio": 0.13074436892117244,
"touchesUpper": 4,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.08992690461040005,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.08635645424076827,
"chartPath": "charts/20260120_SZ300841_康华生物.png",
"chartPathDetail": "charts/20260120_SZ300841_康华生物_detail.png"
},
{
"idx": 34,
"code": "SH603990",
"name": "麦迪科技",
"strengthUp": 0.08462117122189203,
"strengthDown": 0.08462117122189203,
"direction": "none",
"widthRatio": 0.22196961351919475,
"touchesUpper": 6,
"touchesLower": 5,
"volumeConfirmed": "",
"activityScore": 0.10717686255472789,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.08462117122189203,
"chartPath": "charts/20260120_SH603990_麦迪科技.png",
"chartPathDetail": "charts/20260120_SH603990_麦迪科技_detail.png"
},
{
"idx": 21,
"code": "SH601868",
"name": "中国能建",
"strengthUp": 0.08036690423581859,
"strengthDown": 0.08036690423581859,
"direction": "none",
"widthRatio": 0.18980028469994004,
"touchesUpper": 2,
"touchesLower": 10,
"volumeConfirmed": "",
"activityScore": 0.060127412133448764,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.08036690423581859,
"chartPath": "charts/20260120_SH601868_中国能建.png",
"chartPathDetail": "charts/20260120_SH601868_中国能建_detail.png"
},
{
"idx": 29,
"code": "SH603527",
"name": "众源新材",
"strengthUp": 0.07963635816120598,
"strengthDown": 0.07963635816120598,
"direction": "none",
"widthRatio": 0.0950555464327197,
"touchesUpper": 5,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.09129518771035168,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.07963635816120598,
"chartPath": "charts/20260120_SH603527_众源新材.png",
"chartPathDetail": "charts/20260120_SH603527_众源新材_detail.png"
},
{
"idx": 25,
"code": "SH603183",
"name": "建研院",
"strengthUp": 0.07956394843013821,
"strengthDown": 0.07956394843013821,
"direction": "none",
"widthRatio": 0.08924582407848107,
"touchesUpper": 3,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.08633813680920435,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.07956394843013821,
"chartPath": "charts/20260120_SH603183_建研院.png",
"chartPathDetail": "charts/20260120_SH603183_建研院_detail.png"
},
{
"idx": 27,
"code": "SH603315",
"name": "福鞍股份",
"strengthUp": 0.07857406162319625,
"strengthDown": 0.07857406162319625,
"direction": "none",
"widthRatio": 0.22510872342227875,
"touchesUpper": 4,
"touchesLower": 5,
"volumeConfirmed": "",
"activityScore": 0.09940247290262211,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.07857406162319625,
"chartPath": "charts/20260120_SH603315_福鞍股份.png",
"chartPathDetail": "charts/20260120_SH603315_福鞍股份_detail.png"
},
{
"idx": 60,
"code": "SZ001391",
"name": "国货航",
"strengthUp": 0.07791902703625227,
"strengthDown": 0.07791902703625227,
"direction": "none",
"widthRatio": 0.23528860034807667,
"touchesUpper": 6,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.06875238312611007,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.07791902703625227,
"chartPath": "charts/20260120_SZ001391_国货航.png",
"chartPathDetail": "charts/20260120_SZ001391_国货航_detail.png"
},
{
"idx": 5,
"code": "SH600281",
"name": "华阳新材",
"strengthUp": 0.0760262283650135,
"strengthDown": 0.0760262283650135,
"direction": "none",
"widthRatio": 0.07438652259509536,
"touchesUpper": 5,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.08602691428598316,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.0760262283650135,
"chartPath": "charts/20260120_SH600281_华阳新材.png",
"chartPathDetail": "charts/20260120_SH600281_华阳新材_detail.png"
},
{
"idx": 19,
"code": "SH601236",
"name": "红塔证券",
"strengthUp": 0.0749961896581831,
"strengthDown": 0.0749961896581831,
"direction": "none",
"widthRatio": 0.05887454623774115,
"touchesUpper": 3,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.08339839370383481,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.0749961896581831,
"chartPath": "charts/20260120_SH601236_红塔证券.png",
"chartPathDetail": "charts/20260120_SH601236_红塔证券_detail.png"
},
{
"idx": 24,
"code": "SH603118",
"name": "共进股份",
"strengthUp": 0.07410259723680666,
"strengthDown": 0.07410259723680666,
"direction": "none",
"widthRatio": 0.2105774382355951,
"touchesUpper": 5,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.0901561123152923,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.07410259723680666,
"chartPath": "charts/20260120_SH603118_共进股份.png",
"chartPathDetail": "charts/20260120_SH603118_共进股份_detail.png"
},
{
"idx": 87,
"code": "SZ300328",
"name": "宜安科技",
"strengthUp": 0.07389768224455419,
"strengthDown": 0.07389768224455419,
"direction": "none",
"widthRatio": 0.13703331095825805,
"touchesUpper": 2,
"touchesLower": 6,
"volumeConfirmed": "",
"activityScore": 0.08584252992085407,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.07389768224455419,
"chartPath": "charts/20260120_SZ300328_宜安科技.png",
"chartPathDetail": "charts/20260120_SZ300328_宜安科技_detail.png"
},
{
"idx": 57,
"code": "SZ000931",
"name": "中关村",
"strengthUp": 0.0726854614298274,
"strengthDown": 0.0726854614298274,
"direction": "none",
"widthRatio": 0.2691795834744121,
"touchesUpper": 4,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.09683245337124678,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.0726854614298274,
"chartPath": "charts/20260120_SZ000931_中关村.png",
"chartPathDetail": "charts/20260120_SZ000931_中关村_detail.png"
},
{
"idx": 100,
"code": "SZ300998",
"name": "宁波方正",
"strengthUp": 0.06949501124252137,
"strengthDown": 0.06949501124252137,
"direction": "none",
"widthRatio": 0.20127021221897767,
"touchesUpper": 5,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.0845378018842857,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.06949501124252137,
"chartPath": "charts/20260120_SZ300998_宁波方正.png",
"chartPathDetail": "charts/20260120_SZ300998_宁波方正_detail.png"
},
{
"idx": 38,
"code": "SH688089",
"name": "嘉必优",
"strengthUp": 0.06854636011512477,
"strengthDown": 0.06854636011512477,
"direction": "none",
"widthRatio": 0.15997473554088507,
"touchesUpper": 3,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.06899678345140317,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.06854636011512477,
"chartPath": "charts/20260120_SH688089_嘉必优.png",
"chartPathDetail": "charts/20260120_SH688089_嘉必优_detail.png"
},
{
"idx": 67,
"code": "SZ002343",
"name": "慈文传媒",
"strengthUp": 0.06442862184910073,
"strengthDown": 0.06442862184910073,
"direction": "none",
"widthRatio": 0.2873372553832457,
"touchesUpper": 4,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.08862613248315838,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.06442862184910073,
"chartPath": "charts/20260120_SZ002343_慈文传媒.png",
"chartPathDetail": "charts/20260120_SZ002343_慈文传媒_detail.png"
},
{
"idx": 59,
"code": "SZ001287",
"name": "中电港",
"strengthUp": 0.06253433907772157,
"strengthDown": 0.06253433907772157,
"direction": "none",
"widthRatio": 0.12706716054053835,
"touchesUpper": 2,
"touchesLower": 5,
"volumeConfirmed": "",
"activityScore": 0.06085899816450469,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.06253433907772157,
"chartPath": "charts/20260120_SZ001287_中电港.png",
"chartPathDetail": "charts/20260120_SZ001287_中电港_detail.png"
},
{
"idx": 77,
"code": "SZ002857",
"name": "三晖电气",
"strengthUp": 0.061613610621135996,
"strengthDown": 0.061613610621135996,
"direction": "none",
"widthRatio": 0.1347956582800327,
"touchesUpper": 3,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.07424551036438445,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.061613610621135996,
"chartPath": "charts/20260120_SZ002857_三晖电气.png",
"chartPathDetail": "charts/20260120_SZ002857_三晖电气_detail.png"
},
{
"idx": 94,
"code": "SZ300683",
"name": "海特生物",
"strengthUp": 0.052519861525934936,
"strengthDown": 0.06037408819363428,
"direction": "none",
"widthRatio": 0.0440222754787381,
"touchesUpper": 2,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.059218473592453844,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.06037408819363428,
"chartPath": "charts/20260120_SZ300683_海特生物.png",
"chartPathDetail": "charts/20260120_SZ300683_海特生物_detail.png"
},
{
"idx": 107,
"code": "SZ301458",
"name": "钧崴电子",
"strengthUp": 0.05835969611375812,
"strengthDown": 0.05835969611375812,
"direction": "none",
"widthRatio": 0.4366678022030362,
"touchesUpper": 5,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.08774351971765405,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.05835969611375812,
"chartPath": "charts/20260120_SZ301458_钧崴电子.png",
"chartPathDetail": "charts/20260120_SZ301458_钧崴电子_detail.png"
},
{
"idx": 33,
"code": "SH603900",
"name": "莱绅通灵",
"strengthUp": 0.057882464087807915,
"strengthDown": 0.057882464087807915,
"direction": "none",
"widthRatio": 0.13682392471321897,
"touchesUpper": 3,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.07009287703046332,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.057882464087807915,
"chartPath": "charts/20260120_SH603900_莱绅通灵.png",
"chartPathDetail": "charts/20260120_SH603900_莱绅通灵_detail.png"
},
{
"idx": 105,
"code": "SZ301290",
"name": "东星医疗",
"strengthUp": 0.05669665519074302,
"strengthDown": 0.05669665519074302,
"direction": "none",
"widthRatio": 0.23779614697305917,
"touchesUpper": 3,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.07509605911987326,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.05669665519074302,
"chartPath": "charts/20260120_SZ301290_东星医疗.png",
"chartPathDetail": "charts/20260120_SZ301290_东星医疗_detail.png"
},
{
"idx": 31,
"code": "SH603707",
"name": "健友股份",
"strengthUp": 0.05630072651301386,
"strengthDown": 0.05630072651301386,
"direction": "none",
"widthRatio": 0.00781033600291944,
"touchesUpper": 5,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.06061780789665496,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.05630072651301386,
"chartPath": "charts/20260120_SH603707_健友股份.png",
"chartPathDetail": "charts/20260120_SH603707_健友股份_detail.png"
},
{
"idx": 7,
"code": "SH600395",
"name": "盘江股份",
"strengthUp": 0.056187035542285074,
"strengthDown": 0.056187035542285074,
"direction": "none",
"widthRatio": 0.06674904774137999,
"touchesUpper": 3,
"touchesLower": 5,
"volumeConfirmed": "",
"activityScore": 0.06312683295612573,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.056187035542285074,
"chartPath": "charts/20260120_SH600395_盘江股份.png",
"chartPathDetail": "charts/20260120_SH600395_盘江股份_detail.png"
},
{
"idx": 86,
"code": "SZ300278",
"name": "华昌达",
"strengthUp": 0.05589886043710886,
"strengthDown": 0.05589886043710886,
"direction": "none",
"widthRatio": 0.36793662378306974,
"touchesUpper": 4,
"touchesLower": 5,
"volumeConfirmed": "",
"activityScore": 0.08411646140089421,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.05589886043710886,
"chartPath": "charts/20260120_SZ300278_华昌达.png",
"chartPathDetail": "charts/20260120_SZ300278_华昌达_detail.png"
},
{
"idx": 35,
"code": "SH605138",
"name": "盛泰集团",
"strengthUp": 0.055865202210705366,
"strengthDown": 0.055865202210705366,
"direction": "none",
"widthRatio": 0.29759336000089764,
"touchesUpper": 2,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.06901825106543649,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.055865202210705366,
"chartPath": "charts/20260120_SH605138_盛泰集团.png",
"chartPathDetail": "charts/20260120_SH605138_盛泰集团_detail.png"
},
{
"idx": 40,
"code": "SH688202",
"name": "美迪西",
"strengthUp": 0.05567455667261547,
"strengthDown": 0.05567455667261547,
"direction": "none",
"widthRatio": 0.31351008126626717,
"touchesUpper": 2,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.06468849967464027,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.05567455667261547,
"chartPath": "charts/20260120_SH688202_美迪西.png",
"chartPathDetail": "charts/20260120_SH688202_美迪西_detail.png"
},
{
"idx": 42,
"code": "SH688318",
"name": "财富趋势",
"strengthUp": 0.05547353256292839,
"strengthDown": 0.05547353256292839,
"direction": "none",
"widthRatio": 0.27505993688351926,
"touchesUpper": 2,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.07640386590199624,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.05547353256292839,
"chartPath": "charts/20260120_SH688318_财富趋势.png",
"chartPathDetail": "charts/20260120_SH688318_财富趋势_detail.png"
},
{
"idx": 99,
"code": "SZ300946",
"name": "恒而达",
"strengthUp": 0.05471545201814328,
"strengthDown": 0.05471545201814328,
"direction": "none",
"widthRatio": 0.22719307281507875,
"touchesUpper": 3,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.07211795708975773,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.05471545201814328,
"chartPath": "charts/20260120_SZ300946_恒而达.png",
"chartPathDetail": "charts/20260120_SZ300946_恒而达_detail.png"
},
{
"idx": 93,
"code": "SZ300632",
"name": "光莆股份",
"strengthUp": 0.054438520279774166,
"strengthDown": 0.04904245123558025,
"direction": "none",
"widthRatio": 0.02846616403214607,
"touchesUpper": 3,
"touchesLower": 5,
"volumeConfirmed": "",
"activityScore": 0.054809356716155194,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.054438520279774166,
"chartPath": "charts/20260120_SZ300632_光莆股份.png",
"chartPathDetail": "charts/20260120_SZ300632_光莆股份_detail.png"
},
{
"idx": 61,
"code": "SZ002042",
"name": "华孚时尚",
"strengthUp": 0.053820385373766585,
"strengthDown": 0.053820385373766585,
"direction": "none",
"widthRatio": 0.1301004225125526,
"touchesUpper": 4,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.0651213418039477,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.053820385373766585,
"chartPath": "charts/20260120_SZ002042_华孚时尚.png",
"chartPathDetail": "charts/20260120_SZ002042_华孚时尚_detail.png"
},
{
"idx": 96,
"code": "SZ300790",
"name": "宇瞳光学",
"strengthUp": 0.05257179061101287,
"strengthDown": 0.05257179061101287,
"direction": "none",
"widthRatio": 0.3018970777007482,
"touchesUpper": 3,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.0724700244252632,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.05257179061101287,
"chartPath": "charts/20260120_SZ300790_宇瞳光学.png",
"chartPathDetail": "charts/20260120_SZ300790_宇瞳光学_detail.png"
},
{
"idx": 83,
"code": "SZ300128",
"name": "锦富技术",
"strengthUp": 0.05137309586579778,
"strengthDown": 0.05137309586579778,
"direction": "none",
"widthRatio": 0.3612532098770752,
"touchesUpper": 3,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.07755680398152726,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.05137309586579778,
"chartPath": "charts/20260120_SZ300128_锦富技术.png",
"chartPathDetail": "charts/20260120_SZ300128_锦富技术_detail.png"
},
{
"idx": 30,
"code": "SH603618",
"name": "杭电股份",
"strengthUp": 0.0505606736721558,
"strengthDown": 0.0505606736721558,
"direction": "none",
"widthRatio": 0.15144818048774875,
"touchesUpper": 3,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.048952579398915515,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.0505606736721558,
"chartPath": "charts/20260120_SH603618_杭电股份.png",
"chartPathDetail": "charts/20260120_SH603618_杭电股份_detail.png"
},
{
"idx": 75,
"code": "SZ002748",
"name": "世龙实业",
"strengthUp": 0.048085901229749366,
"strengthDown": 0.048085901229749366,
"direction": "none",
"widthRatio": 0.1157279750374011,
"touchesUpper": 3,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.057814545135324975,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.048085901229749366,
"chartPath": "charts/20260120_SZ002748_世龙实业.png",
"chartPathDetail": "charts/20260120_SZ002748_世龙实业_detail.png"
},
{
"idx": 55,
"code": "SZ000796",
"name": "凯撒旅业",
"strengthUp": 0.047962173181559146,
"strengthDown": 0.047962173181559146,
"direction": "none",
"widthRatio": 0.2257372064001412,
"touchesUpper": 3,
"touchesLower": 2,
"volumeConfirmed": "",
"activityScore": 0.06351402000113422,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.047962173181559146,
"chartPath": "charts/20260120_SZ000796_凯撒旅业.png",
"chartPathDetail": "charts/20260120_SZ000796_凯撒旅业_detail.png"
},
{
"idx": 9,
"code": "SH600531",
"name": "豫光金铅",
"strengthUp": 0.04794859347045365,
"strengthDown": 0.04794859347045365,
"direction": "none",
"widthRatio": 0.22872671560227054,
"touchesUpper": 2,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.053857924216099126,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.04794859347045365,
"chartPath": "charts/20260120_SH600531_豫光金铅.png",
"chartPathDetail": "charts/20260120_SH600531_豫光金铅_detail.png"
},
{
"idx": 17,
"code": "SH600984",
"name": "建设机械",
"strengthUp": 0.04773532123833634,
"strengthDown": 0.04773532123833634,
"direction": "none",
"widthRatio": 0.06214193787665361,
"touchesUpper": 2,
"touchesLower": 5,
"volumeConfirmed": "",
"activityScore": 0.051936635225559434,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.04773532123833634,
"chartPath": "charts/20260120_SH600984_建设机械.png",
"chartPathDetail": "charts/20260120_SH600984_建设机械_detail.png"
},
{
"idx": 73,
"code": "SZ002644",
"name": "佛慈制药",
"strengthUp": 0.043384034691262105,
"strengthDown": 0.043384034691262105,
"direction": "none",
"widthRatio": 0.22414110145582697,
"touchesUpper": 2,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.05765117738174981,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.043384034691262105,
"chartPath": "charts/20260120_SZ002644_佛慈制药.png",
"chartPathDetail": "charts/20260120_SZ002644_佛慈制药_detail.png"
},
{
"idx": 14,
"code": "SH600795",
"name": "国电电力",
"strengthUp": 0.038558112155860205,
"strengthDown": 0.020616785035626018,
"direction": "up",
"widthRatio": 0.032561936783290356,
"touchesUpper": 2,
"touchesLower": 3,
"volumeConfirmed": "False",
"activityScore": 0.020274915613298243,
"tiltScore": 0.47671103096995127,
"date": 20260120,
"hasTriangle": true,
"strength": 0.038558112155860205,
"chartPath": "charts/20260120_SH600795_国电电力.png",
"chartPathDetail": "charts/20260120_SH600795_国电电力_detail.png"
},
{
"idx": 65,
"code": "SZ002242",
"name": "九阳股份",
"strengthUp": 0.03807088178982384,
"strengthDown": 0.03807088178982384,
"direction": "none",
"widthRatio": 0.10849554328152096,
"touchesUpper": 2,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.045248660897291,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.03807088178982384,
"chartPath": "charts/20260120_SZ002242_九阳股份.png",
"chartPathDetail": "charts/20260120_SZ002242_九阳股份_detail.png"
},
{
"idx": 15,
"code": "SH600846",
"name": "同济科技",
"strengthUp": 0.035044683673365586,
"strengthDown": 0.035044683673365586,
"direction": "none",
"widthRatio": 0.04230672506104188,
"touchesUpper": 3,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.037934929758741257,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.035044683673365586,
"chartPath": "charts/20260120_SH600846_同济科技.png",
"chartPathDetail": "charts/20260120_SH600846_同济科技_detail.png"
},
{
"idx": 49,
"code": "SZ000039",
"name": "中集集团",
"strengthUp": 0.03282153828304035,
"strengthDown": 0.03282153828304035,
"direction": "none",
"widthRatio": 0.14102846289352128,
"touchesUpper": 2,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.040469628970140684,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.03282153828304035,
"chartPath": "charts/20260120_SZ000039_中集集团.png",
"chartPathDetail": "charts/20260120_SZ000039_中集集团_detail.png"
},
{
"idx": 78,
"code": "SZ002910",
"name": "庄园牧场",
"strengthUp": 0.029462837189994914,
"strengthDown": 0.029462837189994914,
"direction": "none",
"widthRatio": 0.057656261422220724,
"touchesUpper": 2,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.028093910864048357,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.029462837189994914,
"chartPath": "charts/20260120_SZ002910_庄园牧场.png",
"chartPathDetail": "charts/20260120_SZ002910_庄园牧场_detail.png"
},
{
"idx": 64,
"code": "SZ002192",
"name": "融捷股份",
"strengthUp": 0.028213852163709897,
"strengthDown": 0.028213852163709897,
"direction": "none",
"widthRatio": 0.23256546452034127,
"touchesUpper": 2,
"touchesLower": 4,
"volumeConfirmed": "",
"activityScore": 0.03866972407311103,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.028213852163709897,
"chartPath": "charts/20260120_SZ002192_融捷股份.png",
"chartPathDetail": "charts/20260120_SZ002192_融捷股份_detail.png"
},
{
"idx": 44,
"code": "SH688472",
"name": "阿特斯",
"strengthUp": 0.025963265889003457,
"strengthDown": 0.025963265889003457,
"direction": "none",
"widthRatio": 0.22726004705445743,
"touchesUpper": 3,
"touchesLower": 3,
"volumeConfirmed": "",
"activityScore": 0.03170337474083884,
"tiltScore": 0.5,
"date": 20260120,
"hasTriangle": true,
"strength": 0.025963265889003457,
"chartPath": "charts/20260120_SH688472_阿特斯.png",
"chartPathDetail": "charts/20260120_SH688472_阿特斯_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600000_浦发银行.png",
"chartPathDetail": "charts/20260120_SH600000_浦发银行_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600063_皖维高新.png",
"chartPathDetail": "charts/20260120_SH600063_皖维高新_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600113_浙江东日.png",
"chartPathDetail": "charts/20260120_SH600113_浙江东日_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600171_上海贝岭.png",
"chartPathDetail": "charts/20260120_SH600171_上海贝岭_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600226_亨通股份.png",
"chartPathDetail": "charts/20260120_SH600226_亨通股份_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600336_澳柯玛.png",
"chartPathDetail": "charts/20260120_SH600336_澳柯玛_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600475_华光环能.png",
"chartPathDetail": "charts/20260120_SH600475_华光环能_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600588_用友网络.png",
"chartPathDetail": "charts/20260120_SH600588_用友网络_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600640_国脉文化.png",
"chartPathDetail": "charts/20260120_SH600640_国脉文化_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600693_东百集团.png",
"chartPathDetail": "charts/20260120_SH600693_东百集团_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH600898_ST美讯.png",
"chartPathDetail": "charts/20260120_SH600898_ST美讯_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH601096_宏盛华源.png",
"chartPathDetail": "charts/20260120_SH601096_宏盛华源_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH603061_金海通.png",
"chartPathDetail": "charts/20260120_SH603061_金海通_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH603813_ST原尚.png",
"chartPathDetail": "charts/20260120_SH603813_ST原尚_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH605368_蓝天燃气.png",
"chartPathDetail": "charts/20260120_SH605368_蓝天燃气_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH688031_星环科技.png",
"chartPathDetail": "charts/20260120_SH688031_星环科技_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH688147_微导纳米.png",
"chartPathDetail": "charts/20260120_SH688147_微导纳米_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH688262_国芯科技.png",
"chartPathDetail": "charts/20260120_SH688262_国芯科技_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH688377_迪威尔.png",
"chartPathDetail": "charts/20260120_SH688377_迪威尔_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH688550_瑞联新材.png",
"chartPathDetail": "charts/20260120_SH688550_瑞联新材_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH688607_康众医疗.png",
"chartPathDetail": "charts/20260120_SH688607_康众医疗_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH688679_通源环境.png",
"chartPathDetail": "charts/20260120_SH688679_通源环境_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SH688776_国光电气.png",
"chartPathDetail": "charts/20260120_SH688776_国光电气_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ000411_英特集团.png",
"chartPathDetail": "charts/20260120_SZ000411_英特集团_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ000535_ST 猴王.png",
"chartPathDetail": "charts/20260120_SZ000535_ST 猴王_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ000593_德龙汇能.png",
"chartPathDetail": "charts/20260120_SZ000593_德龙汇能_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ000662_天夏退.png",
"chartPathDetail": "charts/20260120_SZ000662_天夏退_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ000866_扬子石化.png",
"chartPathDetail": "charts/20260120_SZ000866_扬子石化_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ000998_隆平高科.png",
"chartPathDetail": "charts/20260120_SZ000998_隆平高科_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ002092_中泰化学.png",
"chartPathDetail": "charts/20260120_SZ002092_中泰化学_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ002293_罗莱生活.png",
"chartPathDetail": "charts/20260120_SZ002293_罗莱生活_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ002393_力生制药.png",
"chartPathDetail": "charts/20260120_SZ002393_力生制药_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ002443_金洲管道.png",
"chartPathDetail": "charts/20260120_SZ002443_金洲管道_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ002493_荣盛石化.png",
"chartPathDetail": "charts/20260120_SZ002493_荣盛石化_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ002544_普天科技.png",
"chartPathDetail": "charts/20260120_SZ002544_普天科技_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ002694_顾地科技.png",
"chartPathDetail": "charts/20260120_SZ002694_顾地科技_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ003019_宸展光电.png",
"chartPathDetail": "charts/20260120_SZ003019_宸展光电_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ300027_华谊兄弟.png",
"chartPathDetail": "charts/20260120_SZ300027_华谊兄弟_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ300078_思创医惠.png",
"chartPathDetail": "charts/20260120_SZ300078_思创医惠_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ300178_腾邦退(退市).png",
"chartPathDetail": "charts/20260120_SZ300178_腾邦退(退市)_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ300228_富瑞特装.png",
"chartPathDetail": "charts/20260120_SZ300228_富瑞特装_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ300379_ST东通.png",
"chartPathDetail": "charts/20260120_SZ300379_ST东通_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ300429_强力新材.png",
"chartPathDetail": "charts/20260120_SZ300429_强力新材_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ300479_神思电子.png",
"chartPathDetail": "charts/20260120_SZ300479_神思电子_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ300582_英飞特.png",
"chartPathDetail": "charts/20260120_SZ300582_英飞特_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ301051_信濠光电.png",
"chartPathDetail": "charts/20260120_SZ301051_信濠光电_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ301107_瑜欣电子.png",
"chartPathDetail": "charts/20260120_SZ301107_瑜欣电子_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ301169_零点有数.png",
"chartPathDetail": "charts/20260120_SZ301169_零点有数_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ301225_恒勃股份.png",
"chartPathDetail": "charts/20260120_SZ301225_恒勃股份_detail.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": "",
"boundaryUtilization": 0.0,
"date": 20260120,
"chartPath": "charts/20260120_SZ301355_南王科技.png",
"chartPathDetail": "charts/20260120_SZ301355_南王科技_detail.png",
"hasTriangle": false
}
];
let currentThreshold = 0;
let showDetailCharts = false;
// 筛选和排序状态
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 detailToggle = document.getElementById('detailToggle');
detailToggle.addEventListener('click', function() {
showDetailCharts = !showDetailCharts;
this.textContent = showDetailCharts ? '详细图: 开' : '详细图: 关';
this.classList.toggle('active', showDetailCharts);
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' ? '✗' : '—';
const chartPath = showDetailCharts ? stock.chartPathDetail : stock.chartPath;
const fallbackPath = showDetailCharts ? stock.chartPath : stock.chartPathDetail;
return `
<div class="stock-card" onclick="openModal('${stock.chartPath}', '${stock.chartPathDetail}')">
<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 class="metric-item">
<span class="metric-label">价格活跃度</span>
<span class="metric-value">${(stock.activityScore || 0).toFixed(2)}</span>
</div>
<div class="metric-item">
<span class="metric-label">倾斜度</span>
<span class="metric-value">${(stock.tiltScore || 0).toFixed(2)}</span>
</div>
</div>
<div class="chart-container">
<img src="${chartPath}"
alt="${stock.name}"
class="stock-chart"
data-fallback-src="${fallbackPath}"
onerror="handleImageError(this)">
</div>
</div>
</div>
`;
}
function handleImageError(img) {
const fallbackSrc = img.dataset.fallbackSrc;
if (fallbackSrc && img.src !== fallbackSrc && img.dataset.fallbackTried !== 'true') {
img.dataset.fallbackTried = 'true';
img.src = fallbackSrc;
return;
}
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(defaultPath, detailPath) {
event.stopPropagation();
const modalImage = document.getElementById('modalImage');
const targetPath = showDetailCharts ? detailPath : defaultPath;
const fallbackPath = showDetailCharts ? defaultPath : detailPath;
modalImage.dataset.fallbackTried = 'false';
modalImage.dataset.fallbackSrc = fallbackPath;
modalImage.src = targetPath;
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>