From 9a83dfe209d9c3ce4431cdd33c3904d41c0800eb Mon Sep 17 00:00:00 2001 From: dekun Date: Sun, 26 Jul 2026 10:03:24 +0800 Subject: [PATCH] Add rightward XMind mind map for playbook v2 and behavior rules. Co-authored-by: Cursor --- docs/交易执行手册与行为准则.xmind | Bin 0 -> 7326 bytes scripts/build_playbook_xmind.py | 332 ++++++++++++++++++++++++++++++ 2 files changed, 332 insertions(+) create mode 100644 docs/交易执行手册与行为准则.xmind create mode 100644 scripts/build_playbook_xmind.py diff --git a/docs/交易执行手册与行为准则.xmind b/docs/交易执行手册与行为准则.xmind new file mode 100644 index 0000000000000000000000000000000000000000..25e8eb04eb66a68e2ab67dc5a80ad128c90400a8 GIT binary patch literal 7326 zcmZ{J1xy@3w=S~y;_mM54ht;q6o)PjWpRpIS==3pEl{L*DPF9&Tk+z>i&LCpulK#Y zynFxT&E(`HGxKH6`I0%wnNLR@89;=9fPjwhPUo+A_zsgp1qA}ad^`dI@ZYM9o2!?d zs}~RSy_@U8TQhBQ6Q7Vm3tgyVDOeDC{>ZFXaG8?Iz^uo~t(ZH}|6R-MNPYe^mO+t` zxCPdSYSVfi%KOu@V_oEa5f!E*eOBJnlyl`>H~>96+7r#~1Ug#e|B=vjR9DW8>~(_K3=PQ-_--L*2O--R}V zKfd(&T12=z@2uM>CkKy#rdNWv`puB0b629xUZ%+AW@qZ{n0d%vkhkRN z$AkFt>eq*x)n-F)hs0Nw#7&`wW_uBj`Yx%gP1o;lDOWxJ@Fs;Ec4J$(waNJ{QAygb zk$G?eosd{&!*SuK^qXdv}nSZ+6eI>PN$;*(ISaM7v)rNGv zrQ~H{y(AQTm{1FJ!3>#j>%YSGGFM!Iw$~yXKa6twZ)*1>A0eLW1psp$*0zm!EEb zz9YWVd#{H4hKz;BA%V~}+iFI21}*T{+0{Z@(4W4)weJUWW^QI;r{MHoIl83^wPlf= zt~lcdujNDDUxz2wuh5?f@#_lMB(^}vhs}ZVXsiab3GDV-<®I2Mic7hevqzaiwR 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 G@V@}}C!BZy literal 0 HcmV?d00001 diff --git a/scripts/build_playbook_xmind.py b/scripts/build_playbook_xmind.py new file mode 100644 index 0000000..f92b557 --- /dev/null +++ b/scripts/build_playbook_xmind.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python3 +"""Generate XMind (Zen/2020+) mind map from playbook + behavior rules.""" +from __future__ import annotations + +import json +import uuid +import zipfile +from pathlib import Path + +OUT = Path(__file__).resolve().parents[1] / "docs" / "交易执行手册与行为准则.xmind" + + +def tid() -> str: + return uuid.uuid4().hex + + +def topic(title: str, children: list | None = None, notes: str | None = None) -> dict: + node: dict = { + "id": tid(), + "class": "topic", + "title": title, + } + if notes: + node["notes"] = {"plain": {"content": notes}} + if children: + node["children"] = {"attached": children} + return node + + +def build_content() -> list: + root = topic( + "交易执行体系\n(手册 v2 + 开单三检)", + [ + topic( + "设计理念", + [ + topic("少而精,珍惜机会,样本干净"), + topic("不保证收益;过程可控,结果随缘"), + topic("过滤比频率重要;日更不是目标"), + topic("看不懂不做;不为开单找理由"), + topic("丢掉对冲:无「有保护就能多做」幻觉"), + topic( + "工具只留期权与合约", + [ + topic("OKX 期权:方向单(虚值等)"), + topic("Gate 合约:结构清楚时的波段"), + topic("同一时段尽量只让一边说话"), + ], + ), + topic( + "文档分工", + [ + topic("行为准则:能不能动手(防火墙)"), + topic("执行手册:怎么做单(玩法/仓位/离场)"), + ], + ), + ], + ), + topic( + "资金要求", + [ + topic("总资金参考:约 800U"), + topic( + "单笔期权", + [ + topic("约 10U 权利金预算"), + topic("一次只持有一个期权仓位"), + topic("按可用打满 = min(余额, 单笔预算)"), + ], + ), + topic( + "Gate 合约", + [ + topic("日内保证金约 50U、约 10 倍"), + topic("止损一般约 5U"), + topic("单笔最大亏损不超过约 10U"), + topic("有单才用保证金,无单为 0"), + ], + ), + topic( + "日损失心理框", + [ + topic("期权+合约都错:合计大约 ≤20U"), + topic("都对:期望可到 40U+(理想,非每日目标)"), + topic("相对 800U:单笔约 1.25%;全错一天约 2.5%"), + ], + ), + topic( + "叠加红线", + [ + topic("同日双开按合计最坏约 20U 接受"), + topic("尽量少同向双开"), + topic("不为「好像有保护」放大仓位"), + ], + ), + ], + ), + topic( + "操盘思路", + [ + topic( + "行为准则(开单三检)", + [ + topic( + "一句话", + [ + topic("信号够不够清晰?"), + topic("流程有没有跑通?"), + topic("情绪是不是在证明自己?"), + topic("三检不过 → 不开"), + ], + ), + topic( + "总循环", + [ + topic("信号判断 → 流程确认 → 情绪自检"), + topic("全部通过 → 开仓"), + topic("等待系统结果(止盈/止损/到期)"), + topic("复盘整环 → 等待下一信号"), + topic("任一步否决 → 空仓离开"), + ], + ), + topic( + "开单前三秒停顿", + [ + topic("核心信号是什么?"), + topic("安全流程跑通了吗?"), + topic("冷静执行,还是怕踏空/回本/证明自己?"), + ], + ), + topic( + "检1·信号判断", + [ + topic("通过:一句话说清唯一核心确认"), + topic("通过:点位/结构本身已够清楚"), + topic("否决:说不清、靠宏观故事自圆"), + topic("否决:「好像有戏」但确认模糊"), + topic("对照主链条:1H→空间→结构→定损盈→工具"), + ], + ), + topic( + "检2·流程确认", + [ + topic("通过:资金与当日额度符合"), + topic("通过:单笔/组合敞口在预算内"), + topic("否决:资金或次数已触限"), + topic("否决:单笔或日最坏超限 → 暂停"), + topic("否决:「先开了再说」跳步"), + ], + ), + topic( + "检3·情绪自检", + [ + topic("通过:符合系统 + 账户没问题 → 开"), + topic("通过:可接受空仓,旁观者视角"), + topic("否决:怕踏空"), + topic("否决:上回亏了要回本"), + topic("否决:必须证明我是对的"), + topic("红灯亮了,信号再好看也不开"), + ], + ), + topic( + "复盘只记什么", + [ + topic("信号:是否做了?核心写了什么?"), + topic("流程:资金/敞口是否过关?有无跳步?"), + topic("情绪:当时是哪一类心态?"), + topic("结果不推翻「三检是否完成」评分"), + ], + ), + ], + ), + topic( + "开仓逻辑", + [ + topic( + "主链条(强制)", + [ + topic("1H 方向:明显 N 字;跟 1H 波段"), + topic("空间:空看支撑、多看阻力;至少约 ≥2%"), + topic("结构:15m/5m;量级约 8h+(约 48×15m)"), + topic("定损盈:外沿/针尖;RR 须接受"), + topic("选工具:期权 或 合约(不对冲)"), + topic("任一步不过 → 空仓等待"), + ], + ), + topic( + "结构形态参考", + [ + topic("收敛"), + topic("两段式回调"), + topic("箱体"), + topic("假突破"), + ], + ), + topic( + "期权入场", + [ + topic("主链条全过;结构突破/假突破成立"), + topic("一天期方向单;空间够优先虚值"), + topic("默认先只开期权,不上合约"), + topic("尽量下午 4 点后开次日到期(完整会话)"), + topic("不做:期期对冲、偏置壳、为开而开"), + ], + ), + topic( + "合约入场(Gate)", + [ + topic("主链条过关;位置极明确"), + topic("想清进场:假突破 / 结构突破"), + topic("止损挂模型位(外沿/针尖)"), + topic("独立假突破:只做合约或空仓"), + topic("勿与「突破期权后再加仓」混仓"), + ], + ), + ], + ), + topic( + "平仓逻辑", + [ + topic( + "期权离场", + [ + topic("只认:系统/规则止盈"), + topic("只认:到期"), + topic("开仓后中间不手动平仓"), + topic("紧急手平 → 标记非策略样本"), + ], + ), + topic( + "合约离场", + [ + topic("结构止盈为准"), + topic("结构止损为准(约 5U 量级)"), + topic("等待系统/挂单结果,不情绪手平"), + ], + ), + topic( + "开仓后盯什么", + [ + topic("程序与纪律是否正常"), + topic("不是浮盈浮亏数字本身"), + topic("无信号空档:空跑三检也是训练"), + ], + ), + ], + ), + ], + ), + topic( + "纪律执行", + [ + topic( + "Gate 日纪律", + [ + topic("只做很明确的位置"), + topic("同一位置最多两次机会(突破/假突破)"), + topic("两次都错 → 当日不再做单"), + topic("离场以结构止盈/止损为准"), + ], + ), + topic( + "期权日纪律", + [ + topic("不手平;等规则止盈或到期"), + topic("一次一仓;约 10U 权利金"), + topic("不对冲;不做每天默认开期权"), + topic("损位跟模型:外沿/针尖"), + ], + ), + topic( + "开仓前自检清单", + [ + topic("今日只动期权/合约?未开对冲?"), + topic("1H 方向清楚(含 N 字)?"), + topic("空间足够?"), + topic("结构出现且量级够?"), + topic("止损/止盈与 RR 定好?"), + topic("工具选期权还是合约?理由写清?"), + topic("期权:止盈与接受到期写清?"), + topic("合约:本位置第几次?今日两次用完?"), + ], + ), + topic( + "一句话版本", + [ + topic("1H→空间→结构→定损盈→期权/合约"), + topic("不对冲;期权不手平"), + topic("一位置两次,错完收工"), + topic("珍惜机会,日更不是目标"), + ], + ), + ], + ), + ], + ) + root["structureClass"] = "org.xmind.ui.logic.right" + + sheet = { + "id": tid(), + "class": "sheet", + "title": "执行手册与行为准则", + "rootTopic": root, + } + return [sheet] + + +def main() -> None: + content = build_content() + metadata = { + "creator": {"name": "crypto_monitor", "version": "1.0"}, + "activeSheetId": content[0]["id"], + } + manifest = { + "file-entries": { + "content.json": {}, + "metadata.json": {}, + "manifest.json": {}, + } + } + OUT.parent.mkdir(parents=True, exist_ok=True) + if OUT.exists(): + OUT.unlink() + with zipfile.ZipFile(OUT, "w", compression=zipfile.ZIP_DEFLATED) as zf: + zf.writestr("content.json", json.dumps(content, ensure_ascii=False, indent=2)) + zf.writestr("metadata.json", json.dumps(metadata, ensure_ascii=False, indent=2)) + zf.writestr("manifest.json", json.dumps(manifest, ensure_ascii=False, indent=2)) + print(f"wrote {OUT}") + + +if __name__ == "__main__": + main()