Show trading playbook in hub strategy docs.
Add an 执行手册 tab that renders docs/交易执行手册-期权与Gate.md as the default strategy view. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
| 文档 | 实例 | 状态 |
|
| 文档 | 实例 | 状态 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
|
| [交易执行手册-期权与Gate.md](../交易执行手册-期权与Gate.md) | 中控「策略说明」·执行手册 | 个人开单纪律 |
|
||||||
| [binance-alt-trend-long.md](./binance-alt-trend-long.md) | 币安山寨·多头趋势 | v0.4 讨论稿 |
|
| [binance-alt-trend-long.md](./binance-alt-trend-long.md) | 币安山寨·多头趋势 | v0.4 讨论稿 |
|
||||||
| [okx-trend-both.md](./okx-trend-both.md) | OKX·多空趋势 | v0.4 讨论稿 |
|
| [okx-trend-both.md](./okx-trend-both.md) | OKX·多空趋势 | v0.4 讨论稿 |
|
||||||
| [gate-intraday.md](./gate-intraday.md) | Gate·BTC 日内 | v0.2 |
|
| [gate-intraday.md](./gate-intraday.md) | Gate·BTC 日内 | v0.2 |
|
||||||
|
|||||||
@@ -10,9 +10,15 @@ from typing import Any
|
|||||||
|
|
||||||
from lib.paths import REPO_ROOT
|
from lib.paths import REPO_ROOT
|
||||||
|
|
||||||
STRATEGY_EXCHANGES: tuple[str, ...] = ("binance", "okx", "gate")
|
STRATEGY_EXCHANGES: tuple[str, ...] = ("playbook", "binance", "okx", "gate")
|
||||||
|
|
||||||
STRATEGY_META: dict[str, dict[str, str]] = {
|
STRATEGY_META: dict[str, dict[str, str]] = {
|
||||||
|
"playbook": {
|
||||||
|
"label": "执行手册",
|
||||||
|
"title": "交易执行手册(期权为主 · Gate 为辅)",
|
||||||
|
# 相对仓库根;其余条目用 md_file 相对 docs/strategy
|
||||||
|
"md_rel": "docs/交易执行手册-期权与Gate.md",
|
||||||
|
},
|
||||||
"binance": {
|
"binance": {
|
||||||
"label": "币安",
|
"label": "币安",
|
||||||
"title": "币安·山寨多头趋势",
|
"title": "币安·山寨多头趋势",
|
||||||
@@ -43,6 +49,9 @@ def _md_path(exchange_key: str) -> Path:
|
|||||||
meta = STRATEGY_META.get((exchange_key or "").strip().lower())
|
meta = STRATEGY_META.get((exchange_key or "").strip().lower())
|
||||||
if not meta:
|
if not meta:
|
||||||
raise KeyError(exchange_key)
|
raise KeyError(exchange_key)
|
||||||
|
md_rel = (meta.get("md_rel") or "").strip()
|
||||||
|
if md_rel:
|
||||||
|
return REPO_ROOT / md_rel
|
||||||
return _strategy_dir() / meta["md_file"]
|
return _strategy_dir() / meta["md_file"]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
| **资金概况** | 总资金曲线、分户权益、回撤与 24h 变化 |
|
| **资金概况** | 总资金曲线、分户权益、回撤与 24h 变化 |
|
||||||
| **开仓计划** | 事前写下计划、跟踪进行中、统计历史胜率 |
|
| **开仓计划** | 事前写下计划、跟踪进行中、统计历史胜率 |
|
||||||
| **监控区** | **核心操作台**:三所持仓卡片、全平/撤单、关键位与趋势计划摘要 |
|
| **监控区** | **核心操作台**:三所持仓卡片、全平/撤单、关键位与趋势计划摘要 |
|
||||||
| **策略说明** | 三所策略 playbook + 开仓检查清单(非系统操作手册) |
|
| **策略说明** | 执行手册 + 三所策略 playbook + 开仓检查清单(非系统操作手册) |
|
||||||
| **使用说明** | 本页:中控与实例怎么用 |
|
| **使用说明** | 本页:中控与实例怎么用 |
|
||||||
| **行情区** | K 线、指标、画线;可从持仓跳转带币种 |
|
| **行情区** | K 线、指标、画线;可从持仓跳转带币种 |
|
||||||
| **计算器** | 趋势回调 / 滚仓张数与盈亏测算(手动填价) |
|
| **计算器** | 趋势回调 / 滚仓张数与盈亏测算(手动填价) |
|
||||||
|
|||||||
@@ -960,7 +960,7 @@
|
|||||||
<div class="page-head strategy-page-head">
|
<div class="page-head strategy-page-head">
|
||||||
<div>
|
<div>
|
||||||
<h1><span class="head-tag">STR</span> 策略说明</h1>
|
<h1><span class="head-tag">STR</span> 策略说明</h1>
|
||||||
<p class="page-desc">策略正文(带目录) · 执行清单(打印对照) · 三所切换</p>
|
<p class="page-desc">执行手册 · 三所策略正文(带目录) · 执行清单(打印对照)</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="strategy-page-actions no-print">
|
<div class="strategy-page-actions no-print">
|
||||||
<button type="button" id="strategy-btn-download" class="ghost">下载 HTML</button>
|
<button type="button" id="strategy-btn-download" class="ghost">下载 HTML</button>
|
||||||
@@ -1405,7 +1405,7 @@
|
|||||||
<script src="/assets/quotes.js?v=20260717-quotes-feed"></script>
|
<script src="/assets/quotes.js?v=20260717-quotes-feed"></script>
|
||||||
<script src="/assets/funds.js?v=20260717-funds-scroll-fix"></script>
|
<script src="/assets/funds.js?v=20260717-funds-scroll-fix"></script>
|
||||||
<script src="/assets/dashboard.js?v=20260720-dash-sl-tp"></script>
|
<script src="/assets/dashboard.js?v=20260720-dash-sl-tp"></script>
|
||||||
<script src="/assets/strategy.js?v=8"></script>
|
<script src="/assets/strategy.js?v=9"></script>
|
||||||
<script src="/assets/help.js?v=1"></script>
|
<script src="/assets/help.js?v=1"></script>
|
||||||
<script src="/assets/logs.js?v=1"></script>
|
<script src="/assets/logs.js?v=1"></script>
|
||||||
<script src="/assets/ai_review_render.js?v=3"></script>
|
<script src="/assets/ai_review_render.js?v=3"></script>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
const btnPrintChecklistInline = document.getElementById("strategy-btn-print-checklist-inline");
|
const btnPrintChecklistInline = document.getElementById("strategy-btn-print-checklist-inline");
|
||||||
const btnDownload = document.getElementById("strategy-btn-download");
|
const btnDownload = document.getElementById("strategy-btn-download");
|
||||||
|
|
||||||
let activeKey = "binance";
|
let activeKey = "playbook";
|
||||||
let activeView = "doc";
|
let activeView = "doc";
|
||||||
let tabsMeta = [];
|
let tabsMeta = [];
|
||||||
let cache = {};
|
let cache = {};
|
||||||
@@ -128,13 +128,14 @@
|
|||||||
|
|
||||||
function sectionTag(title) {
|
function sectionTag(title) {
|
||||||
const t = String(title || "");
|
const t = String(title || "");
|
||||||
if (/账户|定位/.test(t)) return "账户";
|
if (/总原则|原则/.test(t)) return "原则";
|
||||||
if (/开仓类型|开仓|入场|反转|顺势|波段|假破|结构/.test(t)) return "入场";
|
if (/账户|定位|分工/.test(t)) return "账户";
|
||||||
|
if (/开仓类型|开仓|入场|反转|顺势|波段|假破|结构|对冲|方向单/.test(t)) return "入场";
|
||||||
if (/周期/.test(t)) return "周期";
|
if (/周期/.test(t)) return "周期";
|
||||||
if (/方向/.test(t)) return "方向";
|
if (/方向/.test(t)) return "方向";
|
||||||
if (/纪律|出场|笔数|节奏/.test(t)) return "纪律";
|
if (/纪律|出场|笔数|节奏|止损|次数/.test(t)) return "纪律";
|
||||||
if (/持仓|离场|强平/.test(t)) return "离场";
|
if (/持仓|离场|强平|到期/.test(t)) return "离场";
|
||||||
if (/资金|杠杆|计仓/.test(t)) return "仓位";
|
if (/资金|杠杆|计仓|仓位|预算/.test(t)) return "仓位";
|
||||||
if (/系统|字段|对接/.test(t)) return "系统";
|
if (/系统|字段|对接/.test(t)) return "系统";
|
||||||
if (/修订|记录/.test(t)) return "版本";
|
if (/修订|记录/.test(t)) return "版本";
|
||||||
if (/边界|关系|行情状态/.test(t)) return "边界";
|
if (/边界|关系|行情状态/.test(t)) return "边界";
|
||||||
|
|||||||
@@ -12,10 +12,19 @@ from lib.hub.hub_strategy_lib import (
|
|||||||
|
|
||||||
|
|
||||||
class TestHubStrategyLib(unittest.TestCase):
|
class TestHubStrategyLib(unittest.TestCase):
|
||||||
def test_meta_has_three_exchanges(self):
|
def test_meta_has_playbook_and_exchanges(self):
|
||||||
meta = strategy_meta_payload()
|
meta = strategy_meta_payload()
|
||||||
keys = [x["key"] for x in meta["exchanges"]]
|
keys = [x["key"] for x in meta["exchanges"]]
|
||||||
self.assertEqual(keys, ["binance", "okx", "gate"])
|
self.assertEqual(keys, ["playbook", "binance", "okx", "gate"])
|
||||||
|
|
||||||
|
def test_load_playbook_payload(self):
|
||||||
|
p = load_strategy_payload("playbook")
|
||||||
|
self.assertTrue(p["ok"])
|
||||||
|
self.assertEqual(p["label"], "执行手册")
|
||||||
|
self.assertIn("交易执行手册", p["md_source"])
|
||||||
|
self.assertIn("strategy_html", p)
|
||||||
|
self.assertIn("<h2", p["strategy_html"].lower())
|
||||||
|
self.assertIn("总原则", p["strategy_html"])
|
||||||
|
|
||||||
def test_load_binance_payload(self):
|
def test_load_binance_payload(self):
|
||||||
p = load_strategy_payload("binance")
|
p = load_strategy_payload("binance")
|
||||||
|
|||||||
Reference in New Issue
Block a user