Files
crypto_monitor/lib/options/templates/options_review_panel.html
T
dekun 01ca035c2a Add typed options review form presets by source.
Pure options and hedge plans use separate strategy/entry selects, with auto-filled direction and PnL result including breakeven.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 10:27:23 +08:00

183 lines
11 KiB
HTML

{# OKX 期权复盘:读本地记录;复盘上传区字体缩小,截图槽位对齐合约 #}
<div class="options-review-wrap" id="options-review-root" style="grid-column:1/-1">
{% if not options_enabled %}
<div class="flash" style="margin-bottom:12px;font-size:.82rem">期权未启用:请设置 <code>OKX_OPTIONS_ENABLED=true</code> 后重启.</div>
{% endif %}
<style>
.options-review-wrap{font-size:.82rem}
.options-review-wrap h2{font-size:1rem;margin:0 0 8px}
.options-review-wrap h3{font-size:.9rem}
.or-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.or-tab{border:1px solid rgba(127,127,127,.35);background:transparent;color:inherit;padding:5px 10px;border-radius:6px;cursor:pointer;font-size:.78rem}
.or-tab.active{background:rgba(59,130,246,.25);border-color:rgba(59,130,246,.55)}
.or-badge{display:inline-block;padding:1px 6px;border-radius:999px;background:rgba(127,127,127,.2);font-size:.7rem}
.or-stat-card{border:1px solid rgba(127,127,127,.25);border-radius:8px;padding:8px;font-size:.78rem}
.or-trades-table{font-size:.78rem}
.or-trades-table tr.or-row-active{outline:1px solid rgba(59,130,246,.55);background:rgba(59,130,246,.08)}
.or-trades-table tbody tr{cursor:pointer}
.or-journal-card{font-size:.78rem}
.or-journal-card h2{font-size:.92rem}
.or-journal-card input,
.or-journal-card select,
.or-journal-card textarea,
.or-journal-card button{font-size:.76rem}
.or-journal-card .or-form-grid,
.or-journal-card .or-form-grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:6px;margin-bottom:6px}
.or-journal-card .or-mood-grid{display:flex;flex-wrap:wrap;gap:6px 12px;margin:8px 0;font-size:.74rem}
.or-journal-card .muted,
.or-journal-card .sub{font-size:.7rem}
.or-journal-idle .or-journal-body{opacity:.78}
</style>
<div class="card" style="margin-bottom:10px">
<div class="form-row" style="flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px">
<h2 style="margin:0;margin-right:auto">期权复盘</h2>
<span class="muted" id="or-sync-status" style="font-size:.72rem"></span>
<button type="button" class="btn-secondary" id="or-reload-btn" style="font-size:.76rem;padding:4px 10px">刷新</button>
</div>
<div class="or-tabs" role="tablist" aria-label="复盘分类">
<button type="button" class="or-tab active" data-source="option_spot" role="tab">期权交易记录</button>
<button type="button" class="or-tab" data-source="options_options" role="tab">期期对冲记录</button>
<button type="button" class="or-tab" data-source="perp_options" role="tab">永期对冲记录</button>
</div>
<p class="muted" style="margin:0 0 8px;font-size:.72rem">直接读取本地已平期权与已结束对冲计划,无需同步交易所.点下方记录可填入复盘表单.</p>
<div class="form-row" style="flex-wrap:wrap;gap:6px">
<select id="or-filter-uly" style="font-size:.76rem">
<option value="">标的:全部</option>
<option value="ETH">ETH</option>
<option value="BTC">BTC</option>
</select>
<select id="or-filter-opt" style="font-size:.76rem">
<option value="">Call/Put:全部</option>
<option value="C">Call</option>
<option value="P">Put</option>
</select>
<select id="or-filter-reviewed" style="font-size:.76rem">
<option value="">复盘:全部</option>
<option value="0">待复盘</option>
<option value="1">已复盘</option>
</select>
<input type="text" id="or-filter-strategy" placeholder="策略标签" style="max-width:110px;font-size:.76rem">
<input type="datetime-local" id="or-filter-from" title="平仓起" style="font-size:.76rem">
<input type="datetime-local" id="or-filter-to" title="平仓止" style="font-size:.76rem">
<label class="muted" style="display:flex;align-items:center;gap:4px;font-size:.72rem">
<input type="checkbox" id="or-include-hedge-legs"> 含已归属对冲的期权腿
</label>
</div>
</div>
<div class="card journal-card or-journal-card or-journal-idle" id="or-journal-card" style="margin-bottom:10px">
<h2>复盘记录上传(含截图)</h2>
<p class="muted" id="or-journal-summary" style="margin-top:0">点下方列表一笔记录自动填入;截图槽位与合约复盘相同(5m / 15m / 1h / 4h).</p>
<div class="or-journal-body">
<form id="or-journal-form" onsubmit="return false;">
<input type="hidden" id="or-trade-id" value="">
<input type="hidden" id="or-draft-id" value="">
<div class="or-form-grid">
<input type="datetime-local" id="or-f-open" title="开仓时间">
<input type="datetime-local" id="or-f-close" title="平仓时间">
<input type="text" id="or-f-coin" placeholder="标的(如 ETH)">
<input type="text" id="or-f-inst" placeholder="合约/计划">
<input type="text" id="or-f-pnl" placeholder="盈亏(U)">
<input type="text" id="or-f-hold" placeholder="持有时长" readonly>
</div>
<div class="or-form-grid2">
<select id="or-f-strategy" title="策略标签" required>
<option value="">策略标签</option>
</select>
<select id="or-f-direction" title="方向判断">
<option value="">方向判断</option>
</select>
<select id="or-f-exit" title="离场原因">
<option value="">离场原因</option>
<option value="止盈">止盈</option>
<option value="止损">止损</option>
<option value="到期">到期</option>
<option value="目标价">目标价</option>
<option value="手动平仓">手动平仓</option>
<option value="其他">其他</option>
</select>
<select id="or-f-followed" title="是否按计划">
<option value="">是否按计划</option>
<option value="是"></option>
<option value="否"></option>
<option value="部分">部分</option>
</select>
<select id="or-f-result" title="结果标签">
<option value="">结果标签</option>
<option value="盈利">盈利</option>
<option value="亏损">亏损</option>
<option value="持平">持平</option>
</select>
</div>
<select id="or-f-entry" title="入场逻辑" style="width:100%;margin-bottom:6px;box-sizing:border-box">
<option value="">入场逻辑</option>
</select>
<input type="hidden" id="journal-draft-id" value="">
<div class="journal-upload-slots" id="or-upload-slots">
{% for tf in ['5m', '15m', '1h', '4h'] %}
<div class="journal-upload-row" data-tf="{{ tf }}">
<span class="journal-upload-slot-label">{{ tf }}</span>
<input type="file" accept="image/*" class="journal-upload-slot-input or-upload-input" data-tf="{{ tf }}">
<input type="hidden" class="journal-upload-hidden-file or-upload-hidden" data-tf="{{ tf }}" value="">
<span class="journal-upload-status or-upload-status" data-tf="{{ tf }}" aria-live="polite"></span>
</div>
{% endfor %}
</div>
<p class="sub journal-upload-hint">可只传部分周期;选文件后即时上传,保存后详情页四宫格查看</p>
<div class="or-mood-grid mood-grid">
<label><input type="checkbox" class="or-mood" value="怕踏空">怕踏空</label>
<label><input type="checkbox" class="or-mood" value="报复开仓">报复开仓</label>
<label><input type="checkbox" class="or-mood" value="盈利飘了">盈利飘了</label>
<label><input type="checkbox" class="or-mood" value="拿不住单">拿不住单</label>
<label><input type="checkbox" class="or-mood" value="扛单">扛单</label>
<label><input type="checkbox" class="or-mood" value="重仓违规">重仓违规</label>
</div>
<textarea id="or-f-note" rows="2" placeholder="备注" style="width:100%;box-sizing:border-box"></textarea>
<div class="form-row" style="margin-top:8px;gap:6px">
<button type="button" class="btn" id="or-save-btn">保存复盘记录</button>
<button type="button" class="btn-secondary" id="or-clear-btn">清空表单</button>
<button type="button" class="btn-secondary" id="or-del-btn">删除复盘</button>
<span class="muted" id="or-save-status"></span>
</div>
<div id="or-legs-host" style="margin-top:10px;font-size:.74rem"></div>
</form>
</div>
</div>
<div class="card" style="margin-bottom:10px">
<h3 style="margin-top:0">统计</h3>
<div id="or-kpi" class="form-row" style="flex-wrap:wrap;gap:10px"></div>
<div id="or-stats-groups" style="margin-top:10px;display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px"></div>
</div>
<div class="card">
<h3 style="margin-top:0" id="or-list-title">期权交易记录</h3>
<p class="muted" style="margin-top:0;font-size:.72rem">点选一行,上方复盘表单自动填入.</p>
<div class="options-strike-table-wrap">
<table class="options-strike-table or-trades-table" id="or-trades-table">
<thead>
<tr>
<th>类型</th>
<th>标的/合约</th>
<th>盈亏</th>
<th>开/平</th>
<th>持有</th>
<th>策略</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody id="or-trades-tbody">
<tr><td colspan="8" class="muted">加载中…</td></tr>
</tbody>
</table>
</div>
</div>
</div>
<script src="/static/options_review.js?v=7"></script>