fix(hub): two-column trend plan card; docs for records and hub layout
Left column shows plan metrics, right column DCA table, footer for breakeven and snapshot info; update strategy and exchange usage docs. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
| **实盘下单监控** | 手工填止损/止盈,**以损定仓** 市价开单,挂上条件止盈止损,并在页面跟踪浮盈亏、保本逻辑等。 |
|
| **实盘下单监控** | 手工填止损/止盈,**以损定仓** 市价开单,挂上条件止盈止损,并在页面跟踪浮盈亏、保本逻辑等。 |
|
||||||
| **交易记录 / 复盘** | 平仓结果、盈亏、错过的单等归档与导出;可选 **AI 复盘**(见仓库根 [AI复盘与模型配置说明.md](../AI复盘与模型配置说明.md))。 |
|
| **交易记录 / 复盘** | 平仓结果、盈亏、错过的单等归档与导出;可选 **AI 复盘**(见仓库根 [AI复盘与模型配置说明.md](../AI复盘与模型配置说明.md))。 |
|
||||||
| **策略交易** | 顶栏 `/strategy`:**趋势回调**(左)与 **顺势加仓**(右)左右并列;细则见 [策略交易说明.md](../策略交易说明.md)。 |
|
| **策略交易** | 顶栏 `/strategy`:**趋势回调**(左)与 **顺势加仓**(右)左右并列;细则见 [策略交易说明.md](../策略交易说明.md)。 |
|
||||||
|
| **策略交易记录** | 顶栏 `/strategy/records`:趋势/顺势分两栏、可筛选,库内保留最近 100 条结束快照。 |
|
||||||
|
|
||||||
后台按 **`MONITOR_POLL_SECONDS`**(默认几秒)轮询行情与监控逻辑。**切勿**在未理解规则时同时运行两套程序共用一个实盘账户。
|
后台按 **`MONITOR_POLL_SECONDS`**(默认几秒)轮询行情与监控逻辑。**切勿**在未理解规则时同时运行两套程序共用一个实盘账户。
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@
|
|||||||
2. 启动 Flask 应用(可用 **`ecosystem.config.cjs`** 交给 PM2,或本地 `python app.py` / `flask run`,以你当前脚本为准)。
|
2. 启动 Flask 应用(可用 **`ecosystem.config.cjs`** 交给 PM2,或本地 `python app.py` / `flask run`,以你当前脚本为准)。
|
||||||
3. 浏览器访问站点,打开 **`/login`**,使用 **`.env` 里的 `APP_PASSWORD`** 登录。
|
3. 浏览器访问站点,打开 **`/login`**,使用 **`.env` 里的 `APP_PASSWORD`** 登录。
|
||||||
|
|
||||||
登录后顶栏:**关键位监控** | **实盘下单**(默认首页)| **策略交易**(`/strategy`,趋势回调 + 顺势加仓双栏)| **交易记录与复盘** | **统计分析**。
|
登录后顶栏:**关键位监控** | **实盘下单**(默认首页)| **策略交易**(`/strategy`,趋势回调 + 顺势加仓双栏)| **策略交易记录**(`/strategy/records`,最近 100 条结束快照)| **交易记录与复盘** | **统计分析**。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
2. 启动 Flask 应用(本仓库可用 **`ecosystem.config.cjs`** 交给 PM2,或本地 `python app.py` / `flask run`,以你当前脚本为准)。
|
2. 启动 Flask 应用(本仓库可用 **`ecosystem.config.cjs`** 交给 PM2,或本地 `python app.py` / `flask run`,以你当前脚本为准)。
|
||||||
3. 浏览器访问站点,打开 **`/login`**,使用 **`.env` 里的 `APP_PASSWORD`** 登录。
|
3. 浏览器访问站点,打开 **`/login`**,使用 **`.env` 里的 `APP_PASSWORD`** 登录。
|
||||||
|
|
||||||
登录后顶栏:**关键位监控** | **实盘下单** | **策略交易** | **交易记录与复盘** | **统计分析**。
|
登录后顶栏:**关键位监控** | **实盘下单** | **策略交易**(`/strategy`)| **策略交易记录**(`/strategy/records`)| **交易记录与复盘** | **统计分析**。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
2. 启动 Flask 应用(可用 **`ecosystem.config.cjs`** 交给 PM2,或本地 `python app.py` / `flask run`,以你当前脚本为准)。
|
2. 启动 Flask 应用(可用 **`ecosystem.config.cjs`** 交给 PM2,或本地 `python app.py` / `flask run`,以你当前脚本为准)。
|
||||||
3. 浏览器访问站点,打开 **`/login`**,使用 **`.env` 里的 `APP_PASSWORD`** 登录。
|
3. 浏览器访问站点,打开 **`/login`**,使用 **`.env` 里的 `APP_PASSWORD`** 登录。
|
||||||
|
|
||||||
登录后顶栏:**关键位监控** | **实盘下单**(默认首页)| **策略交易**(`/strategy`,趋势回调 + 顺势加仓双栏)| **交易记录与复盘** | **统计分析**。
|
登录后顶栏:**关键位监控** | **实盘下单**(默认首页)| **策略交易**(`/strategy`,趋势回调 + 顺势加仓双栏)| **策略交易记录**(`/strategy/records`)| **交易记录与复盘** | **统计分析**。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1375,11 +1375,28 @@ body.market-chart-fs-open {
|
|||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hub-trend-plan-body-cols {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
||||||
|
gap: 14px 18px;
|
||||||
|
align-items: start;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
border-bottom: 1px dashed #2a3558;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hub-trend-plan-col-left .plan-card-meta {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hub-trend-plan-col-left .plan-card-grid {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.hub-trend-plan-card .plan-card-grid {
|
.hub-trend-plan-card .plan-card-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
gap: 10px 14px;
|
gap: 10px 14px;
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.hub-trend-plan-card .plan-cell {
|
.hub-trend-plan-card .plan-cell {
|
||||||
@@ -1429,10 +1446,38 @@ body.market-chart-fs-open {
|
|||||||
filter: brightness(1.08);
|
filter: brightness(1.08);
|
||||||
}
|
}
|
||||||
|
|
||||||
.hub-trend-plan-card .plan-dca-block {
|
.hub-trend-plan-card .plan-dca-block--side {
|
||||||
margin-top: 12px;
|
margin-top: 0;
|
||||||
padding-top: 10px;
|
padding-top: 0;
|
||||||
border-top: 1px dashed #2a3558;
|
border-top: none;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hub-trend-plan-col-right {
|
||||||
|
min-width: 0;
|
||||||
|
border-left: 1px solid #243050;
|
||||||
|
padding-left: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hub-dca-empty {
|
||||||
|
font-size: 0.76rem;
|
||||||
|
color: #8892b0;
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hub-trend-plan-foot {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hub-trend-plan-foot .hub-plan-breakeven-row {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hub-trend-plan-foot .hub-plan-account-foot {
|
||||||
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hub-trend-plan-card .plan-dca-title {
|
.hub-trend-plan-card .plan-dca-title {
|
||||||
@@ -1532,6 +1577,19 @@ body.market-chart-fs-open {
|
|||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
.hub-trend-plan-body-cols {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hub-trend-plan-col-right {
|
||||||
|
border-left: none;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-top: 10px;
|
||||||
|
border-top: 1px dashed #2a3558;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 720px) {
|
@media (max-width: 720px) {
|
||||||
.hub-trend-plan-card .plan-card-grid {
|
.hub-trend-plan-card .plan-card-grid {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
|
|||||||
@@ -1607,7 +1607,7 @@
|
|||||||
</tr>`;
|
</tr>`;
|
||||||
})
|
})
|
||||||
.join("");
|
.join("");
|
||||||
return `<div class="plan-dca-block">
|
return `<div class="plan-dca-block plan-dca-block--side">
|
||||||
<div class="plan-dca-title">补仓计划明细</div>
|
<div class="plan-dca-title">补仓计划明细</div>
|
||||||
<table class="plan-dca-table">
|
<table class="plan-dca-table">
|
||||||
<tr><th>档位</th><th>触发价</th><th>张数</th><th>状态</th></tr>
|
<tr><th>档位</th><th>触发价</th><th>张数</th><th>状态</th></tr>
|
||||||
@@ -1669,6 +1669,9 @@
|
|||||||
? `<span class="hub-plan-be-done">已保本 ${esc(String(t.breakeven_applied_at || "").slice(0, 16))}</span>`
|
? `<span class="hub-plan-be-done">已保本 ${esc(String(t.breakeven_applied_at || "").slice(0, 16))}</span>`
|
||||||
: "";
|
: "";
|
||||||
const dcaHtml = renderTrendDcaTable(t, tickMap);
|
const dcaHtml = renderTrendDcaTable(t, tickMap);
|
||||||
|
const dcaCol = dcaHtml
|
||||||
|
? `<div class="hub-trend-plan-col hub-trend-plan-col-right">${dcaHtml}</div>`
|
||||||
|
: `<div class="hub-trend-plan-col hub-trend-plan-col-right"><div class="plan-dca-block plan-dca-block--side plan-dca-block--empty"><div class="plan-dca-title">补仓计划明细</div><div class="hub-dca-empty">暂无补仓档位</div></div></div>`;
|
||||||
return `<div class="plan-position-card hub-trend-plan-card">
|
return `<div class="plan-position-card hub-trend-plan-card">
|
||||||
<div class="plan-card-head">
|
<div class="plan-card-head">
|
||||||
<div class="plan-card-title">
|
<div class="plan-card-title">
|
||||||
@@ -1677,30 +1680,36 @@
|
|||||||
</div>
|
</div>
|
||||||
${endBtn}
|
${endBtn}
|
||||||
</div>
|
</div>
|
||||||
<div class="plan-card-meta">
|
<div class="hub-trend-plan-body-cols">
|
||||||
来源: 趋势回调计划 | 风险: ${riskTxt}
|
<div class="hub-trend-plan-col hub-trend-plan-col-left">
|
||||||
| <span class="accent">${esc(trendAddZoneLabel(t.direction))} ${esc(addZone)}</span>
|
<div class="plan-card-meta">
|
||||||
| 已补仓 <strong>${legsTxt}</strong>
|
来源: 趋势回调计划 | 风险: ${riskTxt}
|
||||||
|
| <span class="accent">${esc(trendAddZoneLabel(t.direction))} ${esc(addZone)}</span>
|
||||||
|
| 已补仓 <strong>${legsTxt}</strong>
|
||||||
|
</div>
|
||||||
|
<div class="plan-card-grid">
|
||||||
|
<div class="plan-cell"><span class="lbl">均价</span><span class="val">${esc(avg)}</span></div>
|
||||||
|
<div class="plan-cell"><span class="lbl">止损</span><span class="val">${esc(sl)}</span></div>
|
||||||
|
<div class="plan-cell"><span class="lbl">止盈</span><span class="val">${esc(tp)}</span></div>
|
||||||
|
<div class="plan-cell"><span class="lbl">盈亏比</span><span class="val">${esc(rrTxt)}</span></div>
|
||||||
|
<div class="plan-cell"><span class="lbl">标记价</span><span class="val">${esc(mark)}</span></div>
|
||||||
|
<div class="plan-cell"><span class="lbl">浮盈亏</span>${pnlVal}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
${dcaCol}
|
||||||
</div>
|
</div>
|
||||||
<div class="plan-card-grid">
|
<div class="hub-trend-plan-foot">
|
||||||
<div class="plan-cell"><span class="lbl">均价</span><span class="val">${esc(avg)}</span></div>
|
<div class="plan-card-meta hub-plan-breakeven-row">
|
||||||
<div class="plan-cell"><span class="lbl">止损</span><span class="val">${esc(sl)}</span></div>
|
<label class="hub-plan-be-label">
|
||||||
<div class="plan-cell"><span class="lbl">止盈</span><span class="val">${esc(tp)}</span></div>
|
保本移交 偏移%
|
||||||
<div class="plan-cell"><span class="lbl">盈亏比</span><span class="val">${esc(rrTxt)}</span></div>
|
<input type="number" disabled value="${bePct}" class="hub-plan-be-input" />
|
||||||
<div class="plan-cell"><span class="lbl">标记价</span><span class="val">${esc(mark)}</span></div>
|
</label>
|
||||||
<div class="plan-cell"><span class="lbl">浮盈亏</span>${pnlVal}</div>
|
${beBtn}
|
||||||
</div>
|
${beApplied}
|
||||||
${dcaHtml}
|
</div>
|
||||||
<div class="plan-card-meta hub-plan-breakeven-row">
|
<div class="plan-card-meta hub-plan-account-foot">
|
||||||
<label class="hub-plan-be-label">
|
快照可用: ${esc(snapTxt)} | 计划保证金${esc(marginTxt)} | 杠杆: ${levTxt}
|
||||||
保本移交 偏移%
|
</div>
|
||||||
<input type="number" disabled value="${bePct}" class="hub-plan-be-input" />
|
|
||||||
</label>
|
|
||||||
${beBtn}
|
|
||||||
${beApplied}
|
|
||||||
</div>
|
|
||||||
<div class="plan-card-meta hub-plan-account-foot">
|
|
||||||
快照可用: ${esc(snapTxt)} | 计划保证金${esc(marginTxt)} | 杠杆: ${levTxt}
|
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'" />
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'" />
|
||||||
<noscript><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" /></noscript>
|
<noscript><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" /></noscript>
|
||||||
<link rel="stylesheet" href="/assets/app.css?v=20260604-hub-trend-instance" />
|
<link rel="stylesheet" href="/assets/app.css?v=20260604-hub-trend-2col" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="app-bg" aria-hidden="true"></div>
|
<div class="app-bg" aria-hidden="true"></div>
|
||||||
@@ -235,6 +235,6 @@
|
|||||||
<div id="toast"></div>
|
<div id="toast"></div>
|
||||||
<script src="https://unpkg.com/lightweight-charts@4.2.0/dist/lightweight-charts.standalone.production.js"></script>
|
<script src="https://unpkg.com/lightweight-charts@4.2.0/dist/lightweight-charts.standalone.production.js"></script>
|
||||||
<script src="/assets/chart.js?v=20260604-hub-trend-plan"></script>
|
<script src="/assets/chart.js?v=20260604-hub-trend-plan"></script>
|
||||||
<script src="/assets/app.js?v=20260604-hub-trend-instance"></script>
|
<script src="/assets/app.js?v=20260604-hub-trend-2col"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ Chrome **桌面快捷方式**图标来自站点 `favicon` / `manifest`(已配
|
|||||||
| 功能 | 说明 |
|
| 功能 | 说明 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| **2×2 主界面** | 四所信息**完整展示**:余额、持仓表、委托/平仓、折叠委托单、下单监控、关键位、趋势/加仓摘要 |
|
| **2×2 主界面** | 四所信息**完整展示**:余额、持仓表、委托/平仓、折叠委托单、下单监控、关键位、趋势/加仓摘要 |
|
||||||
| **全屏放大** | **点击卡片标题栏**(非按钮区)→ 该所**全屏**:每币种一张实盘风格持仓卡(趋势持仓显示**来源: 趋势回调计划**、**风险%**、**程序监控·止盈价**、**盈亏比**,与实例策略页一致);独立卡片:**关键位**、**下单监控**、**趋势回调**(计划卡含均价/止损/止盈/盈亏比/标记价/浮盈亏)、**顺势加仓** |
|
| **全屏放大** | **点击卡片标题栏**(非按钮区)→ 该所**全屏**:每币种一张实盘风格持仓卡(趋势持仓显示**来源: 趋势回调计划**、**风险%**、**程序监控·止盈价**、**盈亏比**,与实例策略页一致);独立卡片:**关键位**、**下单监控**、**趋势回调**(单计划 **两列**:左=币种基本信息与 3×2 指标,右=**补仓计划明细**,底=保本移交 + 快照可用/计划保证金/杠杆;字段与实例 `/strategy` 一致,结束/保本在实例操作)、**顺势加仓** |
|
||||||
| **委托单折叠** | 仅「委托单」区块默认折叠;展开状态存浏览器本地,**5 秒刷新不重置** |
|
| **委托单折叠** | 仅「委托单」区块默认折叠;展开状态存浏览器本地,**5 秒刷新不重置** |
|
||||||
| **条件单 / 委托** | 每个持仓下方展示交易所 **条件单**(默认折叠)与 **普通委托**;数据来自子代理实时拉取(币安含 Algo 通道) |
|
| **条件单 / 委托** | 每个持仓下方展示交易所 **条件单**(默认折叠)与 **普通委托**;数据来自子代理实时拉取(币安含 Algo 通道) |
|
||||||
| **撤单** | 条件单区内单笔「撤单」或「撤销全部」;经中控 `POST /api/orders/{id}/cancel`、`cancel-symbol` |
|
| **撤单** | 条件单区内单笔「撤单」或「撤销全部」;经中控 `POST /api/orders/{id}/cancel`、`cancel-symbol` |
|
||||||
@@ -216,7 +216,7 @@ Chrome **桌面快捷方式**图标来自站点 `favicon` / `manifest`(已配
|
|||||||
|
|
||||||
**可用**:打开 http://127.0.0.1:5100/settings ,修改表格后点 **保存设置** 即写入 `hub_settings.json`;**重新加载** 从磁盘/默认再读(会重新套用 `HUB_DISABLED_IDS`)。保存后监控区立即使用新 URL/启用状态,**无需重启 hub**。
|
**可用**:打开 http://127.0.0.1:5100/settings ,修改表格后点 **保存设置** 即写入 `hub_settings.json`;**重新加载** 从磁盘/默认再读(会重新套用 `HUB_DISABLED_IDS`)。保存后监控区立即使用新 URL/启用状态,**无需重启 hub**。
|
||||||
|
|
||||||
**下单、关键位、策略交易**:请在监控卡片点击 **「实例」**,进入各 `crypto_monitor_*` 网页(`/trade`、`/key_monitor`、`/strategy` 等)。中控 **不** 提供下单区。
|
**下单、关键位、策略交易**:请在监控卡片点击 **「实例」** 或 **「策略交易」**(SSO),进入各 `crypto_monitor_*` 网页(`/trade`、`/key_monitor`、`/strategy`、`/strategy/records` 等)。中控 **不** 提供下单区;**策略交易记录** 仅在实例顶栏查看(见 [策略交易说明.md](../策略交易说明.md) §五)。
|
||||||
|
|
||||||
| 列 | 含义 |
|
| 列 | 含义 |
|
||||||
|----|------|
|
|----|------|
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ strategy_config.py # 各所 app → 统一回调配置(交易所 API
|
|||||||
strategy_register.py # Flask POST:/strategy/roll/preview、/strategy/roll/execute
|
strategy_register.py # Flask POST:/strategy/roll/preview、/strategy/roll/execute
|
||||||
strategy_ui.py # 主站 index 页数据(滚仓组、持仓列表等)
|
strategy_ui.py # 主站 index 页数据(滚仓组、持仓列表等)
|
||||||
strategy_exchange_*.py # 适配器说明(实际下单仍走各所 app 的 ccxt)
|
strategy_exchange_*.py # 适配器说明(实际下单仍走各所 app 的 ccxt)
|
||||||
strategy_templates/ # strategy_trading_page.html(双栏)、trend/roll 面板片段
|
strategy_templates/ # strategy_trading_page.html(双栏)、trend/roll 面板、records 页
|
||||||
|
strategy_snapshot_lib.py # 结束快照表 strategy_trade_snapshots(最近 100 条)
|
||||||
|
strategy_records_register.py # /strategy/records 路由与列表数据
|
||||||
```
|
```
|
||||||
|
|
||||||
| 层级 | 职责 |
|
| 层级 | 职责 |
|
||||||
@@ -29,12 +31,13 @@ strategy_templates/ # strategy_trading_page.html(双栏)、trend/ro
|
|||||||
|
|
||||||
## 二、导航与页面
|
## 二、导航与页面
|
||||||
|
|
||||||
顶栏 **「策略交易」** → `/strategy`:页内 **左右并列** 两张卡片(趋势回调 | 顺势加仓),布局与「实盘下单」双栏一致。旧链接 `/strategy/trend`、`/strategy/roll` 会自动跳转到 `/strategy`。
|
顶栏:**策略交易** → `/strategy`(趋势回调 | 顺势加仓 左右并列);**策略交易记录** → `/strategy/records`(已结束快照)。旧链接 `/strategy/trend`、`/strategy/roll` 会跳转到 `/strategy`。
|
||||||
|
|
||||||
| 区域 | 说明 |
|
| 区域 | 说明 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| 左栏 · 趋势回调 | **四所均可**(预览、执行、自动补仓、程序止盈) |
|
| 左栏 · 趋势回调 | **四所均可**(预览、执行、自动补仓、程序止盈);运行中计划卡含 **补仓计划明细** 表 |
|
||||||
| 右栏 · 顺势加仓 | 须已有同向持仓;滚仓组/历史表在右栏内滚动 |
|
| 右栏 · 顺势加仓 | 须已有同向持仓;滚仓组/历史表在右栏内滚动 |
|
||||||
|
| **策略交易记录** | 趋势回调 / 顺势加仓 **分两栏**;每条约一行摘要,点击展开详情;库内保留最近 **100** 条 |
|
||||||
| `/trade` | 实盘下单 | 首仓、以损定仓、移动保本(不变) |
|
| `/trade` | 实盘下单 | 首仓、以损定仓、移动保本(不变) |
|
||||||
|
|
||||||
各所 `app.py` 注册 `@app.route("/strategy/trend|roll")` → `render_main_page(...)`;`install_strategy_trading` 仅注册滚仓 POST API。
|
各所 `app.py` 注册 `@app.route("/strategy/trend|roll")` → `render_main_page(...)`;`install_strategy_trading` 仅注册滚仓 POST API。
|
||||||
@@ -93,7 +96,35 @@ strategy_templates/ # strategy_trading_page.html(双栏)、trend/ro
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 五、升级与重启
|
## 五、策略交易记录(四所统一)
|
||||||
|
|
||||||
|
- **入口**:顶栏 **策略交易记录** → `/strategy/records`(`strategy_records_register.register_strategy_records`)。
|
||||||
|
- **写入时机**:趋势计划结束(止盈 / 止损 / 手动结束)、**保本移交**、顺势加仓组结案时,写入表 **`strategy_trade_snapshots`**(`strategy_snapshot_lib`)。
|
||||||
|
- **保留条数**:每次写入后自动修剪,仅保留按 **`closed_at` 倒序** 的最近 **100** 条。
|
||||||
|
- **页面布局**:
|
||||||
|
- **左栏卡片**:趋势回调记录;**右栏卡片**:顺势加仓记录。
|
||||||
|
- 每条默认 **一行简略**(品种、方向、结果、盈亏、补仓进度、结束时间);**点击行**展开均价/止损/止盈/补仓档位表或滚仓腿表。
|
||||||
|
- **筛选**:币种、时间排序(最新/最早)、芯片 **盈利 / 亏损 / 未补仓 / 补仓**(前端过滤,数据来自服务端 enrich 字段 `filter_pnl`、`dca_tag`、`dca_done`)。
|
||||||
|
- **共用模板**:`strategy_templates/strategy_records_page.html`(四所 `index.html` include)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、中控全屏 · 趋势回调展示
|
||||||
|
|
||||||
|
各所 Flask 经 `hub_bridge` + `enrich_trend_plan_for_hub` 向中控提供 active 计划(含 `dca_levels`)。在 **manual_trading_hub** 全屏 **趋势回调** 区,单所通常仅 **一仓**,计划卡为 **横向两列**(与实例字段一致,操作在实例完成):
|
||||||
|
|
||||||
|
| 区域 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| 顶栏 | `#ID 品种`、方向徽章、**结束计划**(SSO 打开实例并确认) |
|
||||||
|
| **左列** | 来源/风险/补仓边界/已补仓;均价、止损、止盈、盈亏比、标记价、浮盈亏(% 按 **计划保证金**) |
|
||||||
|
| **右列** | **补仓计划明细** 表(首仓 + 各档;未成交显示 **待补仓**) |
|
||||||
|
| **底栏** | 保本移交(偏移%、跳转实例策略页)、**快照可用 / 计划保证金 / 杠杆** |
|
||||||
|
|
||||||
|
静态资源版本见 `manual_trading_hub/static/index.html` 中 `app.js` / `app.css` 的 `?v=` 参数;改 UI 后请 **强刷** 中控页。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、升级与重启
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/crypto_monitor
|
cd /opt/crypto_monitor
|
||||||
@@ -106,18 +137,18 @@ pm2 restart crypto_binance crypto_gate crypto_gate_bot crypto_okx manual-trading
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 六、相关文档
|
## 八、相关文档
|
||||||
|
|
||||||
| 文档 | 内容 |
|
| 文档 | 内容 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| [crypto_monitor_gate_bot/趋势回调策略说明.md](./crypto_monitor_gate_bot/趋势回调策略说明.md) | 趋势回调细则(与四所共用逻辑一致) |
|
| [crypto_monitor_gate_bot/趋势回调策略说明.md](./crypto_monitor_gate_bot/趋势回调策略说明.md) | 趋势回调细则(与四所共用逻辑一致) |
|
||||||
| [AI复盘与模型配置说明.md](./AI复盘与模型配置说明.md) | 复盘页 AI(与策略无关) |
|
| [AI复盘与模型配置说明.md](./AI复盘与模型配置说明.md) | 复盘页 AI(与策略无关) |
|
||||||
| [manual_trading_hub/使用说明.md](./manual_trading_hub/使用说明.md) | 中控(不含策略交易) |
|
| [manual_trading_hub/使用说明.md](./manual_trading_hub/使用说明.md) | 中控监控、全屏趋势卡两列布局 |
|
||||||
| [fib_key_monitor_lib.py](./fib_key_monitor_lib.py) | 斐波公式共用 |
|
| [fib_key_monitor_lib.py](./fib_key_monitor_lib.py) | 斐波公式共用 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 七、后续可增强(未实现)
|
## 九、后续可增强(未实现)
|
||||||
|
|
||||||
- 滚仓页内嵌预览按钮、限价成交后一键同步止损。
|
- 滚仓页内嵌预览按钮、限价成交后一键同步止损。
|
||||||
- 趋势回调计划逻辑进一步迁入 `strategy_trend_lib` + 各所 adapter 类(当前网格/拆档与四所轮询已共用)。
|
- 策略交易记录按 UTC 时间窗与顶栏「列表筛选」联动。
|
||||||
|
|||||||
Reference in New Issue
Block a user