Files
gold_monitor/app/templates/record_detail.html
T
dekun 9f6651da2f Add Chinese side label and click-to-zoom review charts.
Crop thumbnails around entry/exit so short trades are visible; lightbox uses a tighter window.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 20:31:22 +08:00

107 lines
5.3 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.
{% extends "base.html" %}
{% block title %}复盘 #{{ trade.id }} · {{ app_name }}{% endblock %}
{% block content %}
{% set side_cn = '买入(多)' if trade.side == 'buy' else ('卖出(空)' if trade.side == 'sell' else (trade.side or '—')) %}
{% set side_cls = 'green' if trade.side == 'buy' else ('red' if trade.side == 'sell' else 'gray') %}
<p><a href="{{ url_for('records_page') }}">← 返回列表</a></p>
<h2 style="margin:8px 0 14px">
复盘 #{{ trade.id }} · {{ trade.symbol }} ·
<span class="tag {{ side_cls }}" style="font-size:15px;vertical-align:middle">{{ side_cn }}</span>
</h2>
<div class="grid cols-2">
<div class="card">
<h3>成交信息</h3>
<table>
<tr><th>方向</th><td><span class="tag {{ side_cls }}">{{ side_cn }}</span></td></tr>
<tr><th>账户</th><td>{{ trade.account_name or '—' }}</td></tr>
<tr><th>机器</th><td>{{ trade.machine_name or '—' }}</td></tr>
<tr><th>手数</th><td>{{ trade.volume }}</td></tr>
<tr><th>开仓价</th><td>{{ trade.open_price|fmt_price }}</td></tr>
<tr><th>平仓价</th><td>{{ trade.close_price|fmt_price }}</td></tr>
<tr><th>开仓时间</th><td>{{ trade.open_time_fmt }} <span class="muted">北京时间</span></td></tr>
<tr><th>平仓时间</th><td>{{ trade.close_time_fmt }} <span class="muted">北京时间</span></td></tr>
<tr><th>持仓时间</th><td style="font-weight:700;color:var(--accent)">{{ trade.hold_duration }}</td></tr>
<tr><th>盈亏</th><td>{{ trade.profit|fmt_money }}</td></tr>
<tr><th>SL / TP</th><td>{{ trade.sl|fmt_price }} / {{ trade.tp|fmt_price }}</td></tr>
<tr><th>单号</th><td>{{ trade.ticket or '—' }}</td></tr>
</table>
</div>
<div class="card">
<h3>入场形式标注</h3>
<form method="post" action="{{ url_for('record_annotate', tid=trade.id) }}">
<div class="form-row">
<label>入场形式</label>
<select name="entry_style">
<option value="" {% if not trade.entry_style %}selected{% endif %}>(未选)</option>
<optgroup label="顺势">
{% for p in entry_patterns %}
{% set s = '顺势 · ' ~ p %}
<option value="{{ s }}" {% if trade.entry_style==s %}selected{% endif %}>{{ p }}</option>
{% endfor %}
</optgroup>
<optgroup label="反转">
{% for p in entry_patterns %}
{% set s = '反转 · ' ~ p %}
<option value="{{ s }}" {% if trade.entry_style==s %}selected{% endif %}>{{ p }}</option>
{% endfor %}
</optgroup>
<optgroup label="其他">
<option value="其他 · 乱作" {% if trade.entry_style=='其他 · 乱作' %}selected{% endif %}>乱作</option>
</optgroup>
{% if trade.entry_style and trade.entry_style not in entry_styles %}
<optgroup label="历史标注">
<option value="{{ trade.entry_style }}" selected>{{ trade.entry_style }}(旧)</option>
</optgroup>
{% endif %}
</select>
<p class="muted" style="margin:8px 0 0">顺势/反转均含:窄幅区间突破、宽幅区间假突破、波段高低点假突破;对不上的选「乱作」。</p>
</div>
<div class="form-row">
<label>复盘备注</label>
<textarea name="review_note" rows="5" placeholder="位不对 / 形不对 / 出场违纪 …">{{ trade.review_note or '' }}</textarea>
</div>
<button class="btn" type="submit">保存标注</button>
</form>
</div>
</div>
<div class="card" style="margin-top:14px">
<h3>四周期 K 线(M1 / M5 / M15 / H1)</h3>
<p class="muted">
方向 <span class="tag {{ side_cls }}">{{ side_cn }}</span> ·
入/出落在<strong>包含成交时刻</strong>的 K 线 · <strong>点击图可放大</strong>(放大时围绕进出场收紧)。
<span style="color:#4cc2ff">● 入场 {{ trade.open_price|fmt_price }}{% if trade.open_time_fmt %} · {{ trade.open_time_fmt }}{% endif %}</span>
{% if trade.close_price is not none %}
· <span style="color:#f0b429">● 出场 {{ trade.close_price|fmt_price }}{% if trade.close_time_fmt %} · {{ trade.close_time_fmt }}{% endif %}</span>
{% endif %}
</p>
<div class="chart-grid" style="margin-top:10px">
{% for tf in ['M1','M5','M15','H1'] %}
<div class="chart-box">
<h4>{{ tf }} <span class="chart-meta muted" style="font-weight:400"></span>
{% if charts[tf] %}<span class="chart-zoom-hint muted">点击放大</span>{% endif %}
</h4>
{% if charts[tf] %}
<canvas class="chart-canvas" id="chart-{{ tf }}"
title="点击放大"
data-tf="{{ tf }}"
data-bars='{{ charts[tf]|tojson }}'
data-open-ts="{{ trade.open_time or '' }}"
data-close-ts="{{ trade.close_time or '' }}"
data-open-price="{{ trade.open_price if trade.open_price is not none else '' }}"
data-close-price="{{ trade.close_price if trade.close_price is not none else '' }}"
data-side="{{ trade.side or '' }}"></canvas>
{% else %}
<div class="empty-chart">暂无 {{ tf }} K 线(需客户端上报后才有缓存)</div>
{% endif %}
</div>
{% endfor %}
</div>
</div>
{% endblock %}
{% block scripts %}
<script src="{{ url_for('static', filename='js/charts.js') }}"></script>
{% endblock %}