220 lines
11 KiB
HTML
220 lines
11 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}回踩监控 - A股量化交易系统{% endblock %}
|
|
|
|
{% block content %}
|
|
<!-- 页面标题和筛选 -->
|
|
<div class="row mb-4">
|
|
<div class="col-12">
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
<div>
|
|
<h1 class="h3 mb-1 text-primary fw-bold">
|
|
<i class="fas fa-exclamation-triangle me-2"></i>回踩监控
|
|
</h1>
|
|
<p class="text-muted mb-0">监控K线突破后的价格回踩情况</p>
|
|
</div>
|
|
|
|
<!-- 筛选表单 -->
|
|
<form method="GET" class="d-flex gap-2 align-items-center">
|
|
<select name="days" class="form-select form-select-sm">
|
|
<option value="7" {% if days == 7 %}selected{% endif %}>最近7天</option>
|
|
<option value="15" {% if days == 15 %}selected{% endif %}>最近15天</option>
|
|
<option value="30" {% if days == 30 %}selected{% endif %}>最近30天</option>
|
|
<option value="60" {% if days == 60 %}selected{% endif %}>最近60天</option>
|
|
</select>
|
|
|
|
<button type="submit" class="btn btn-primary btn-sm">
|
|
<i class="fas fa-filter me-1"></i>筛选
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 说明卡片 -->
|
|
<div class="row mb-4">
|
|
<div class="col-12">
|
|
<div class="card fade-in">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-start">
|
|
<div class="text-primary me-3 mt-1">
|
|
<i class="fas fa-info-circle fa-lg"></i>
|
|
</div>
|
|
<div>
|
|
<h6 class="text-primary fw-bold mb-2">回踩监控说明</h6>
|
|
<p class="text-muted mb-0">
|
|
回踩监控功能会自动监控已触发的"两阳+阴+阳"突破信号,当价格回踩到阴线最高点附近时会发送特殊提醒。
|
|
这有助于识别关键支撑位的有效性,为交易决策提供参考。
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 回踩提醒表格 -->
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="card fade-in">
|
|
<div class="card-header">
|
|
<h5 class="mb-0 text-primary fw-bold">
|
|
<i class="fas fa-list-ul me-2"></i>回踩提醒记录
|
|
<span class="badge badge-light-primary ms-2">{{ pullback_alerts|length }} 条记录</span>
|
|
</h5>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
{% if pullback_alerts %}
|
|
<div class="table-container">
|
|
<div class="table-responsive">
|
|
<table class="table table-hover mb-0">
|
|
<thead>
|
|
<tr>
|
|
<th>股票</th>
|
|
<th>周期</th>
|
|
<th>信号日期</th>
|
|
<th>回踩日期</th>
|
|
<th>天数间隔</th>
|
|
<th>突破价格</th>
|
|
<th>阴线高点</th>
|
|
<th>当前价格</th>
|
|
<th>当日最低</th>
|
|
<th>回调幅度</th>
|
|
<th>距离高点</th>
|
|
<th>提醒状态</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for alert in pullback_alerts %}
|
|
<tr>
|
|
<td>
|
|
<div class="d-flex align-items-center">
|
|
<span class="badge badge-light-primary me-2">{{ alert.stock_code }}</span>
|
|
<span class="fw-bold text-truncate" style="max-width: 80px;">{{ alert.stock_name or '未知' }}</span>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<span class="badge bg-{% if alert.timeframe == 'daily' %}primary{% elif alert.timeframe == '1h' %}info{% else %}success{% endif %}">
|
|
{{ 'D' if alert.timeframe == 'daily' else ('1H' if alert.timeframe == '1h' else 'W') }}
|
|
</span>
|
|
</td>
|
|
<td class="text-muted">{{ alert.original_signal_date | datetime_format('%Y-%m-%d') }}</td>
|
|
<td class="fw-bold">{{ alert.pullback_date | datetime_format('%Y-%m-%d') }}</td>
|
|
<td>
|
|
<span class="badge bg-info">{{ alert.days_since_signal }}天</span>
|
|
</td>
|
|
<td class="text-success">{{ alert.original_breakout_price | currency }}元</td>
|
|
<td class="text-warning fw-bold">{{ alert.yin_high | currency }}元</td>
|
|
<td class="text-danger">{{ alert.current_price | currency }}元</td>
|
|
<td class="text-danger">{{ alert.current_low | currency }}元</td>
|
|
<td>
|
|
<span class="badge bg-{% if alert.pullback_pct and alert.pullback_pct < -10 %}danger{% elif alert.pullback_pct and alert.pullback_pct < -5 %}warning{% else %}secondary{% endif %}">
|
|
{{ alert.pullback_pct | percentage }}
|
|
</span>
|
|
</td>
|
|
<td>
|
|
<span class="badge bg-{% if alert.distance_to_yin_high and alert.distance_to_yin_high < -5 %}danger{% elif alert.distance_to_yin_high and alert.distance_to_yin_high < 2 %}warning{% else %}success{% endif %}">
|
|
{{ alert.distance_to_yin_high | percentage }}
|
|
</span>
|
|
</td>
|
|
<td>
|
|
{% if alert.alert_sent %}
|
|
<span class="badge bg-success">
|
|
<i class="fas fa-check me-1"></i>已发送
|
|
</span>
|
|
<div class="text-muted small mt-1">{{ alert.alert_sent_time | datetime_format('%m-%d %H:%M') }}</div>
|
|
{% else %}
|
|
<span class="badge bg-secondary">未发送</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 统计信息 -->
|
|
<div class="row mt-4 px-3 pb-3">
|
|
<div class="col-md-3 mb-3">
|
|
<div class="stats-card text-center hover-lift">
|
|
<div class="stats-value text-danger">{{ pullback_alerts | selectattr('distance_to_yin_high', 'lt', -5) | list | length }}</div>
|
|
<div class="stats-label">跌破阴线高点</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 mb-3">
|
|
<div class="stats-card text-center hover-lift">
|
|
<div class="stats-value text-warning">{{ pullback_alerts | selectattr('distance_to_yin_high', 'ge', -5) | selectattr('distance_to_yin_high', 'lt', 2) | list | length }}</div>
|
|
<div class="stats-label">接近阴线高点</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 mb-3">
|
|
<div class="stats-card text-center hover-lift">
|
|
<div class="stats-value text-success">{{ pullback_alerts | selectattr('distance_to_yin_high', 'ge', 2) | list | length }}</div>
|
|
<div class="stats-label">上方支撑有效</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 mb-3">
|
|
<div class="stats-card text-center hover-lift">
|
|
<div class="stats-value text-info">{{ pullback_alerts | selectattr('alert_sent', 'equalto', true) | list | length }}</div>
|
|
<div class="stats-label">已发送提醒</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{% else %}
|
|
<div class="empty-state">
|
|
<i class="fas fa-shield-alt"></i>
|
|
<h4>暂无回踩提醒</h4>
|
|
<p>最近{{ days }}天内没有检测到价格回踩阴线最高点的情况</p>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 风险提示 -->
|
|
<div class="row mt-4">
|
|
<div class="col-12">
|
|
<div class="card border-danger">
|
|
<div class="card-header bg-danger text-white">
|
|
<h6 class="mb-0 fw-bold">
|
|
<i class="fas fa-exclamation-triangle me-2"></i>风险提示
|
|
</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<ul class="mb-0 text-muted">
|
|
<li>回踩阴线最高点可能表明原有突破信号的有效性受到质疑</li>
|
|
<li>跌破阴线最高点通常需要重新评估形态的技术有效性</li>
|
|
<li>建议结合成交量、其他技术指标和基本面情况综合判断</li>
|
|
<li>本系统仅供参考,投资需谨慎,风险需自担</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block extra_js %}
|
|
<script>
|
|
$(document).ready(function() {
|
|
// 表格行点击高亮
|
|
$('tbody tr').on('click', function() {
|
|
$(this).toggleClass('table-active');
|
|
});
|
|
|
|
// 根据风险等级添加颜色标识
|
|
$('tbody tr').each(function() {
|
|
const distanceCell = $(this).find('td:nth-last-child(2)');
|
|
const distance = parseFloat(distanceCell.text());
|
|
|
|
if (distance < -5) {
|
|
$(this).addClass('table-danger');
|
|
} else if (distance < 2) {
|
|
$(this).addClass('table-warning');
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
{% endblock %} |