通用自动化交易框架 v1

面向开发者 / 产品经理 · 与具体交易方法论无关的底层运行时 · 2026-05-15

模块插槽接口 短路流水线 共享数据层 统一风控 多系统并行 三条并行轨道
一
框架定位
通用自动化合约交易运行时,本身不持有任何具体交易方法论

框架提供什么

  • 模块插槽:每个插槽规定输入/输出契约,具体实现由"系统"来填
  • 短路流水线:行情数据进入后逐级筛选,任意一步不达标立即停止
  • 共享数据层:多套系统并行时,相同行情/趋势/关键位结果只算一次
  • 统一风控:账户级熔断、复仇配额、当日强平等硬纪律
  • 多系统运行器:多套系统共享一个账户,并行运行互不干扰

使用方式

具体"交易系统"只需向框架提交一份配置清单,声明选用哪些模块实现、哪种方法、哪些参数,框架即可自动驱动其运行。第一个具体系统实例:《日内交易三步曲》。

二
三层可插拔架构
从粗到细三个粒度,覆盖模块、方法、参数

① 模块级可插拔

每个模块插槽可整体替换为不同的实现类,只要新实现遵守输入/输出契约,框架不关心内部如何工作。

  • TrendModule → 均线实现 / 裸K实现 / 形态实现 / 趋势线实现
  • KeyLevelModule → 多周期扫描实现 / 单周期实现 / 人工标注实现
  • SignalModule → Pinbar实现 / 突破实现 / 量能实现 / 自定义复合实现

② 方法级可插拔

同一模块实现内部,多种算法/策略可作为子选项被选择或组合。

  • TrendModule 内可声明主方法 + 多个辅助方法,每种独立判断后融合
  • SignalModule 内可同时启用多种信号类型,各自独立打分后按置信度融合
  • PlanModule 内可在多套止盈策略间切换

③ 参数级可插拔

同一方法的具体数值由系统配置传入,运行时不写死。

  • 均线周期、K线窗口长度、最小盈亏比阈值
  • 置信度门槛、撤单超时、关键位区间宽度
  • 仓位调节系数、复仇配额、单笔风险比例
三
模块插槽接口契约
每个模块是带契约的黑盒,调用方只看输入/输出字段
模块 0
SystemConfig · 系统定义 Schema
在系统运行前固化所有配置;下游模块从中读取参数与门槛
字段总览

"传入模块"列标注该字段被哪些下游模块读取。

字段名 中文名称 必填 可选项 / 格式 传入模块
系统元数据
system_id 系统标识 必填 唯一字符串,如 sanbuqu_v1 5C 复盘 多系统运行器
description 系统简述 必填 任意文字 5C 复盘
exchange 交易所 必填 Binance · OKX · Bybit · Bitget 5A 下单 5B 持仓
symbols 交易品种列表 必填 ["BTC/USDT", "ETH/USDT"] 1 趋势 2 关键位 3 信号 多系统运行器
周期配置
trend_timeframe 趋势参考周期 必填 5M · 15M · 1H · 4H · 1D 1 趋势
main_timeframe 主交易周期 必填 1M · 5M · 15M · 1H · 4H 2 关键位 3 信号
kline_window K线滚动窗口 必填 正整数,默认 240(根);当前同一值控制三处:① 模块1拉取K线根数,② 模块1趋势分析窗口,③ 模块2关键位EXPIRED判断窗口
三者最优值可能不同,后续可拆分为独立参数;暂用同一值保持简单
1 趋势 2 关键位
数据馈入 DataFeed
datafeed_lib 行情数据获取库 必填 ccxt(统一多交易所接口)· websocket(原生推送)· rest(自行实现 REST 拉取) 运行时
datafeed_exchange_id 行情来源交易所 必填 ccxt 标准 ID,如 okx · binanceusdm · bybit;可与 exchange(下单交易所)不同 运行时
datafeed_symbol 行情品种标识 必填 遵循所选 datafeed_lib 的符号格式,如 ccxt 永续写法 BTC/USDT:USDT 1 趋势 2 关键位 3 信号
refresh_mode K 线刷新触发模式 必填 on_kline_close(每根 K 线收盘后触发,推荐)· fixed_interval(按固定秒数轮询)
on_kline_close:运行时根据 main_timeframe 自动计算下一收盘时间并等待;fixed_interval 退化为定时 cron
运行时
refresh_delay_seconds 收盘后延迟取数秒数 必填 正整数,默认 5;K 线收盘时刻到交易所数据稳定之间的保守等待时间 运行时
趋势方法
trend_method_main 趋势判断主方法 必填 EMA均线 · 裸K分析 · 形态分析 · 趋势线123 1 趋势
trend_methods_aux 趋势判断辅方法 选填 列表,可空 [];与主方法相同枚举值 1 趋势
信号方法
signal_method_main 信号识别主策略 必填 Pinbar · 金K形态 · 突破 · 量能 3 信号
signal_methods_aux 信号识别辅策略 选填 列表,可空 [];与主策略相同枚举值 3 信号
交易策略
trade_direction_policy 做单类型 必填 顺势单 · 逆势单 3 信号 4 计划
entry_style 入场方式 必填 左侧 · 右侧 3 信号 4 计划 ★可覆盖
min_risk_reward 最小盈亏比 必填 ≥ 1 的数字,如 1.5 2 关键位 3 信号 4 计划
take_profit_strategy_default 止盈策略类型 必填 关键位止盈 · 跟踪均线止盈 · 等距止盈 4 计划 ★可覆盖 5B 持仓
仓位与杠杆
risk_mode 风险计量模式 必填 fixed_amount(固定金额)· equity_percent(账户净值百分比) 4 计划 ★可覆盖
risk_value 每笔风险额度 必填 risk_mode=fixed_amount 时为 U 金额(如 10);equity_percent 时为小数比例(如 0.01=1%)
以损定仓分子 = fixed_amount 直接使用;equity_percent 时 = risk_value × account_equity(由框架实时查询)
4 计划 ★可覆盖
margin_mode 保证金模式 必填 逐仓(当前版本仅支持逐仓) 5A 下单 5B 持仓
leverage 杠杆倍数 必填 正整数,如 5 · 10 · 50 4 计划 5A 下单
异常保护
protection_check_delay_seconds 保护单确认延迟 必填 正整数,默认 15(秒);开仓后多少秒 REST 确认止损单存在(5秒过短:限价单撮合1~3秒 + REST往返1~2秒 + 重试窗口,15秒可覆盖一次完整重试) 5B 持仓
websocket_failsafe_seconds 断线熔断时限 必填 正整数,默认 30(秒);WebSocket 断连超时后触发本地止损 5B 持仓
order_cancel_timeout_hours 挂单超时时限 必填 正整数,默认 4(小时);限价单挂出后超时未成交则自动撤单 5A 下单
cancel_price_buffer_bps 撤单价格容差 必填 正整数,默认 50(bps = 0.5%);限价单挂出后若市场价偏离超过此阈值(做多:低于 entry−buffer;做空:高于 entry+buffer),自动撤单 5A 下单
▶ 暂隐藏字段:置信度门槛 · 风控参数 · 扩展字段(待后续设计,见 product_design.md)
字段名 中文名称 必填 可选项 / 格式 传入模块
置信度门槛(方法置信度机制待设计)
confidence_threshold_trend 趋势置信度门槛 必填 0~1,默认 0.6 1 趋势
confidence_threshold_signal 信号置信度门槛 必填 0~1,默认 0.65;逆势单自动 +0.1 3 信号
风控参数 (v1 暂缓,配置可填可空,框架运行时不强校验)
revenge_quota 复仇配额 暂缓 { per_event: 1, per_day: 2 } 复仇控制器 多系统运行器
daily_loss_limit_per_symbol 单对每日最大亏损 暂缓 正数,单位与投入金额一致 多系统运行器
daily_loss_limit_global 全局每日最大亏损 暂缓 正数,单位与投入金额一致 多系统运行器
扩展字段(系统自定义)
metadata.* 系统自定义扩展 选填 如 kline_visible_max、fib_levels 由系统声明决定
计划层可覆盖的字段

以下字段允许在计划层(PlanModule)按单覆盖,其他字段一律不可在运行时修改:

  • take_profit_strategy_default → 止盈策略类型
  • entry_style → 入场方式(左侧/右侧);覆盖后在 M4 与 entry_timing.side 比对(见模块4)

position_classification(短线/中线)由模块4根据趋势阶段自动评分得出,不源自 SystemConfig,不在覆盖范围内。

模块 1
TrendModule · 趋势判断
输入多周期K线数据 + SystemConfig趋势配置;输出方向与趋势状态
输入数据
来源 字段名 中文名称 必/选 用途
行情数据 K线序列
trend_timeframe 周期 · kline_window 根
K线序列 必选 供 trend_method_main 分析,输出 direction / stage / extreme_price / pullback_depth
SystemConfig symbols 交易品种列表 必选 决定拉取哪条行情数据
SystemConfig trend_timeframe 趋势参考周期 必选 决定K线数据周期
SystemConfig kline_window K线滚动窗口 必选 决定拉取多少根K线(如240根)
SystemConfig trend_method_main 趋势判断主方法 必选 主逻辑算法,计算 direction / stage / extreme_price
SystemConfig trend_methods_aux 趋势判断辅方法 可选 辅助方法,生成 favorable_factors / unfavorable_factors
输出字段
字段名 中文名称 必须 格式 / 可选项 传给下游
核心判断
direction 趋势方向 必须 涨势 · 跌势 · 震荡 2 关键位 3 信号 4 计划
趋势结构细节
stage 趋势阶段 可选 初期 · 中期 · 末期 · unknown 4 计划(短/中线评分)
trend_origin_price 趋势起点价格 可选 数字 2 关键位 3 信号(段数测距)
extreme_price 极值价格 可选 涨势取最高点,跌势取最低点 2 关键位 3 信号(回调深度计算)
pullback_depth 当前回调深度 可选 0~1 小数;做多(上升趋势回调):(extreme_price − current_price) ÷ (extreme_price − trend_origin_price);做空(下降趋势反弹):(current_price − extreme_price) ÷ (trend_origin_price − extreme_price) 3 信号(61.8% 红线过滤)
辅方法输出
favorable_factors 有利因素清单 可选 字符串列表,与主判断方向一致的辅助依据 4 计划(理由收集)
unfavorable_factors 不利因素清单 可选 字符串列表,与主判断方向相反的辅助依据 4 计划(理由收集)
▶ 暂隐藏字段:趋势置信度 · 扩展字段(待后续设计)
字段名 中文名称 必须 格式 / 可选项 传给下游
confidence 趋势置信度 可选 0~1 小数 1 自身(与门槛对比,决定是否输出"震荡")
metadata 扩展字段 可选 对象,如段数、Vegas 隧道位置 由系统声明决定
输出示例(BTC 多头趋势,回调至支撑位附近)
{
  direction:           "涨势",
  stage:               "中期",
  trend_origin_price:  58000,
  extreme_price:       72000,
  pullback_depth:      0.26,        // (72000-68400)÷(72000-58000)
  favorable_factors:   ["EMA多头排列", "高点高低点结构完整", "H4收于隧道上轨"],
  unfavorable_factors: ["RSI接近超买70区间"]
}
短路条件

direction == 震荡 → 整条流水线立即停止。
震荡时无明确趋势方向,顺势/逆势均无法判断做单方向,直接短路。

模块 2
KeyLevelModule · 关键位管理
输入趋势结果 + 多周期K线 + 关键位配置;输出活跃关键位区间列表
输入数据
来源 字段名 中文名称 必/选 用途
模块1 trend_origin_price 趋势起点价格 可选 计算隐藏字段 relative_position;未传入则该字段为空,不影响关键位识别
模块1 extreme_price 极值价格 可选 计算隐藏字段 relative_position;未传入则该字段为空,不影响关键位识别
行情数据 K线序列
主周期 + 1H + 4H · kline_window 根
多周期K线序列 必选 扫描价格结构,识别 price_zone / role / timeframes / reasons / strength
SystemConfig main_timeframe 主交易周期 必选 扫描频率基准
SystemConfig kline_window K线滚动窗口 必选 决定关键位 EXPIRED 判断窗口
SystemConfig min_risk_reward 最小盈亏比 必选 estimated_rr 粗筛门槛,低于此值的关键位不传入模块3

输出是一个列表,不是单个关键位。系统同时维护多个活跃关键位,每个关键位独立判断,信号模块对列表中每一个 ACTIVE 关键位逐一检测信号。关键位越多(例如多个支撑位叠加),信号模块触发的机会也越多,各自独立走流水线。

输出字段(每个 key_level 对象的字段)
字段名 中文名称 必须 格式 / 可选项 传给下游
列表容器
key_levels 关键位列表 必须 list<key_level>,可含多个元素 3 信号 4 计划
位置与标识
level_id 关键位唯一ID 必须 UUID 字符串;首次识别时生成,reconcile() 合并时继承旧ID,生命周期内不变 3 信号 4 计划(跨图关联)
price_low 区间下沿 必须 数字;关键位是区间不是单线 3 信号(价格是否进入区间判断)
price_high 区间上沿 必须 数字 3 信号
role 支撑/压力 必须 支撑 · 压力 3 信号(决定做多/空方向)
label 关键位标签 必须 S1 · S2(支撑,由近到远)· T1 · T2(压力,由近到远);按距当前价格距离排序 3 信号 4 计划
生命周期
status 生命周期状态 必须 ACTIVE(监控中)· HIDDEN(休眠,>3×ATR)· EXPIRED(超出 kline_window);M2 仅将 ACTIVE 关键位传下游,HIDDEN/EXPIRED 在 M2 内部过滤 3 信号
质量与筛选
estimated_rr 预估盈亏比 可选 数字;悲观估算公式(以区间边沿为基准,不依赖形态价格):
支撑位(做多):entry≈price_high,stop≈price_low,t1≈最近压力位 price_low → (t1−entry)÷(entry−stop)
压力位(做空):entry≈price_low,stop≈price_high,t1≈最近支撑位 price_high → (entry−t1)÷(stop−entry)
粗筛用,数值会比模块4的 risk_reward 偏低(悲观),只用于提前过滤明显不满足条件的关键位
3 信号
成因
reasons 关键位成因 必须 字符串列表,如 ["前期高点", "H1支撑压力互换", "整数关口"];记录该区间被判定为关键位的理由 4 计划(纳入交易理由)
共振信息
timeframes 共振周期列表 必须 字符串列表,如 ["M15","H1","H4"];多周期扫描到同一区间时合并 3 信号 5C 复盘(派生 key_level_tier)
key_level_tier 关键位级别 必须 由 timeframes 长度派生:1→单周期;2→双周期共振;3→三周期共振 5C 复盘(统计不同级别关键位胜率)
▶ 暂隐藏字段:价格相对位置 · 扩展字段
字段名 中文名称 必须 格式 / 可选项 传给下游
relative_position 价格相对位置 可选 接近出发地 · 半道 · 接近目的地
依赖模块1的 trend_origin_price 和 extreme_price;两者未输出时此字段为空
3 信号
metadata 扩展字段 可选 对象,如出发地价格、颜色标注 由系统声明决定
输出示例(BTC 多头趋势,当前有两个活跃支撑位)
key_levels: [
  {
    level_id:   "a3f2c1d0-...",   // 首次识别时生成,跨图关联用
    price_low:  68200,            // 区间下沿(支撑底部)
    price_high: 68500,            // 区间上沿(支撑顶部)
    role:       "支撑",
    timeframes: ["M15","H1","H4"],// 三周期共振
    reasons:    ["前期低点密集区", "H1支撑压力互换", "整数关口68000附近"],
    estimated_rr: 5.7,
    status:     "ACTIVE"
  },
  {
    level_id:   "b7e9a2f1-...",   // 不同ID,不同关键位
    price_low:  65800,            // 第二个支撑区间,价格更低
    price_high: 66100,
    role:       "支撑",
    timeframes: ["M15"],          // 仅主周期识别
    reasons:    ["M15前低反弹点"],
    estimated_rr: 8.2,
    status:     "ACTIVE"
  }
  // 信号模块对以上两个关键位分别独立检测,各自走完整流水线
]
框架级规则
1
区间而非单线:每个关键位用 [price_low, price_high] 表示,宽度由系统配置或动态计算(如 BTC 默认 200 点)
2
三周期独立扫描+融合:主周期/1H/4H 分别扫描;重叠区间(±0.4%)合并为多周期共振位,timeframes 列表相应扩展;周期越多,关键位成因(reasons)越充分
3
生命周期自动切换:价格走远 >3×ATR → HIDDEN(休眠不删);超出 kline_window → EXPIRED(清除)
4
盈亏比粗筛:estimated_rr 使用区间边沿做悲观估算(支撑:entry=price_high;压力:entry=price_low),不依赖形态价格,比模块4的精算值偏低。estimated_rr < min_risk_reward 的关键位提前过滤;精确盈亏比(含两步试算后的实际入场价)在模块4计算并作为唯一最终门槛。若 estimated_rr 为空(无法找到对侧关键位),该关键位跳过粗筛,由模块4精算兜底
短路条件

所有关键位过滤后列表为空 → 流水线停止。有多个关键位时,各自独立进入信号检测,任一产出合格信号即可继续。

模块 3
SignalModule · 入场信号识别
输入活跃关键位列表 + 当前K线序列 + 信号配置;识别合格入场信号
输入数据
来源 字段名 中文名称 必/选 用途
模块2 key_levels
仅 ACTIVE 状态
活跃关键位列表 必选 位置校验(信号须在区间内才有效)
模块2 key_levels[].role 支撑/压力 必选 结合做单方向决定 trade_direction 输出
模块1透传 direction 趋势方向 必选 × trade_direction_policy → 决定做单方向,进而决定搜索哪类形态
模块1透传 pullback_depth 当前回调深度 可选 61.8% 红线过滤(回调过深则跳过本次信号检测);缺失时跳过此过滤,记录日志"pullback_depth 不可用,跳过深度过滤"
行情数据 K线序列
main_timeframe 周期,当前及近期
当前K线序列 必选 识别 signal_type / signal_subtype / pattern_candle_count / pattern_prices / entry_timing
SystemConfig signal_method_main 信号识别主策略 必选 定义形态识别算法,计算所有信号输出字段
SystemConfig signal_methods_aux 信号识别辅策略 可选 辅助验证信号质量
SystemConfig trade_direction_policy 做单类型 必选 顺势/逆势,与 direction 共同决定做单方向及形态搜索类型

做单方向推导:模块1 direction × SystemConfig trade_direction_policy  →  涨势+顺势=做多 · 跌势+顺势=做空 · 涨势+逆势=做空 · 跌势+逆势=做多
做单方向确定后只搜索对应方向形态:做多→看涨形态(启明星、看涨吞没、看涨Pinbar等);做空→看跌形态

输出字段
字段名 中文名称 必须 格式 / 可选项 传给下游
信号识别结果
signal_type 信号形态大类 必须 Pinbar · 吞没 · 金K形态 · 突破 · 量能(由系统枚举) 5C 复盘(统计各形态胜率)
signal_subtype 信号方向形态 必须 做多:启明星 · 看涨Pinbar · 看涨吞没 · 看涨金K 等
做空:黄昏星 · 看跌Pinbar · 看跌吞没 · 看跌金K 等
4 计划(纳入 reasons)
trade_direction 信号做单方向 必须 做多 · 做空;由输入侧做单方向决定,signal_subtype 与之一致 4 计划 5A 下单
形态细节
pattern_candle_count 形态K线数 必须 整数;Pinbar=1,吞没=2,启明星/黄昏星=3 4 计划 5C 复盘
pattern_start_time 形态起始K时间 必须 ISO 时间字符串;单K形态与 pattern_end_time 相同 5C 复盘
pattern_end_time 形态末K收盘时间 必须 ISO 时间字符串;信号确认时刻 5C 复盘
pattern_prices 形态关键价格 必须 对象:low(形态最低价)· high(形态最高价)· close(末K收盘价,信号确认价)
Pinbar:low=影线低点,close=收盘价;启明星:low=中间K最低点,close=第3根K收盘价
4 计划(计算入场/止损参考价)
entry_timing 入场时机 必须 对象;side: 左侧|右侧(入场策略类型,左侧=收盘即进,右侧=等待突破确认后进);attempt: 本关键位第几次触发信号(两者正交,左侧也可能有多次 attempt);prev_times: 之前每次信号的 ISO 时间列表 4 计划 5A 下单
▶ 暂隐藏字段:信号置信度 · 顺势/逆势 · 扩展字段
字段名 中文名称 必须 格式 / 可选项 传给下游
confidence 信号置信度 必须 0~1 小数;逆势单门槛自动 +0.1 4 计划(理由质量评估)
trade_direction_relative 顺势/逆势 必须 顺势 · 逆势 4 计划(逆势自动减仓40%)
metadata 扩展字段 可选 如 Pinbar 影线倍数、数K线状态 由系统声明决定
输出示例(Pinbar 看涨信号,顺势做多)
// 看涨Pinbar(单K,左侧)
{
  signal_type:          "Pinbar",
  signal_subtype:       "看涨Pinbar",
  trade_direction:      "做多",
  pattern_candle_count: 1,
  pattern_start_time:   "2024-05-15T06:15:00Z",
  pattern_end_time:     "2024-05-15T06:15:00Z",
  pattern_prices:       { low: 67820, high: 68650, close: 68350 },
  entry_timing:         { side: "左侧", attempt: 1, prev_times: [] }
}

// 启明星(3K,右侧)
{
  signal_type:          "启明星",
  signal_subtype:       "启明星",
  trade_direction:      "做多",
  pattern_candle_count: 3,
  pattern_start_time:   "2024-05-15T05:45:00Z",  // 第1根阴K
  pattern_end_time:     "2024-05-15T06:15:00Z",  // 第3根阳K收盘
  pattern_prices:       { low: 67750, high: 68620, close: 68400 },
  entry_timing: {
    side: "右侧", attempt: 2,
    prev_times: ["2024-05-15T04:15:00Z"]          // 第1次信号时间
  }
}
框架级规则
1
方向驱动搜索:做单方向确定后,只检测对应方向的形态——做多只找看涨形态(启明星、看涨吞没、看涨Pinbar等),做空只找看跌形态,避免无效扫描
2
位置校验:信号必须发生在某个 ACTIVE 关键位区间内,否则忽略
3
铁丝网过滤:前 N 根 K 线高度重叠 > 阈值(由系统配置)→ 跳过 (⚠️ 铁丝网阈值字段暂未加入 SystemConfig,当前版本跳过此过滤,待后续设计补充)
4
逆势单要求更严:做单方向为逆势时,对信号形态的质量要求自动提高(具体阈值由系统配置;置信度字段待后续设计启用)
5
左侧/右侧判定:在同一关键位上,信号首次出现→ 左侧;第二次及以上出现→ 右侧。判定条件:两次信号之间不能有其他入场信号介入,否则计数重置,下次出现仍视为左侧。
短路条件

未识别到合格信号 → 流水线停止。

注:入场时机校验(entry_timing.side vs entry_style)已下沉至模块4,在计划层覆盖 entry_style 后执行,避免 M3 提前短路掉计划层本会接受的信号。

模块 4
PlanModule · 交易计划生成
输入信号结果 + 关键位结果 + SystemConfig;生成完整交易计划
输入数据
来源 字段名 中文名称 必/选 用途
模块3 signal_type
signal_subtype
信号形态大类
信号方向形态
必选 纳入 reasons(如"看涨Pinbar(左侧入场)")
模块3 trade_direction 信号做单方向 必选 透传给模块5A,决定下单买/卖方向
模块3 entry_timing 入场时机 必选 透传给模块5A,辅助决策挂单时机
模块3 pattern_prices 形态关键价格 必选 结合 entry_style 计算 entry_price(市价取 close,限价取形态关键点)
模块2透传 key_levels[].price_low/high 触发信号的关键位区间 必选 止损锚点参考:做多→ price_low(区间下沿);做空→ price_high(区间上沿);实际止损取 pattern_prices.low/high(形态极值),见规则2
模块2透传 key_levels(反向) 反向关键位 可选 计算 t1_price(关键位止盈策略时需要;无反向位则降级为等距止盈)
模块2透传 key_levels[].reasons 关键位成因 必选 纳入 reasons(如"三周期共振支撑区间 [68200, 68500]")
模块1透传 stage 趋势阶段 可选 纳入 reasons(如"涨势中期");缺失时 position_classification 默认"短线",reasons 省略趋势阶段描述
模块1透传 favorable_factors
unfavorable_factors
有利/不利因素 可选 汇总纳入 reasons;缺失时 reasons 不追加辅方法理由,但 ≥2 条门槛仍须达成
SystemConfig take_profit_strategy_default 止盈策略类型 必选 决定 take_profit_strategy 输出值
SystemConfig entry_style 入场方式 必选 接收计划层覆盖后的最终值;与模块3输出的 entry_timing.side 比对:不一致则流水线停止,记录原因 "信号时机不匹配:系统限定[{entry_style}],当前信号为[{entry_timing.side}]"
SystemConfig risk_mode
risk_value
风险计量模式
每笔风险额度
必选 以损定仓分子:fixed_amount→直接用 risk_value;equity_percent→risk_value × 当前账户净值;结果除以 |entry−stop| 得 position_size
SystemConfig min_risk_reward 最小盈亏比 必选 risk_reward 门槛校验,不达标则流水线停止
SystemConfig leverage 杠杆倍数 必选 position_size 约束(最大仓位上限)
输出字段(传入模块 5A / 5B / 5C)
字段名中文名称必须/可选格式/可选项传给下游
方向与入场
trade_direction交易方向必须做多 · 做空5A 下单
entry_price入场价必须两步试算(按方向分支):① 取 pattern_prices.close → 市价单;② 若①RR不足 → 做多:low+(close−low)×50%;做空:high−(high−close)×50% → 限价单;两步均不足则短路5A 下单
order_type订单类型必须市价单 · 限价单;由入场价两步试算结果决定:步骤①→市价单,步骤②→限价单5A 下单
entry_mode建仓方式必须一次性 · 分批5A 下单
entry_orders分批挂单规格可选列表,分批模式时有值5A 下单
止损止盈
stop_loss_price止损价必须数字;做多→ pattern_prices.low(形态最低价);做空→ pattern_prices.high(形态最高价);两步试算中均不变5B 持仓
take_profit_strategy止盈策略必须关键位止盈 · 跟踪均线止盈 · 等距止盈;由 SystemConfig.take_profit_strategy_default 决定5B 持仓
t1_price第一止盈价必须数字;由 take_profit_strategy 决定:关键位止盈→最近反向关键位近端;等距止盈→entry + N×|entry−stop|;跟踪均线止盈→首个目标价5B 持仓
t2_price第二止盈价可选数字,中线单时存在5B 持仓
take_profit_legs各档止盈比例必须列表,各值之和=1;index 0 对应 t1_price,index 1 对应 t2_price;单档:[1.0],双档:[0.5, 0.5];5B 按 (price, ratio) 配对监控各档止盈5B 持仓
盈亏与仓位
risk_reward精算盈亏比必须数字;做多:(t1 − entry) ÷ (entry − stop);做空:(entry − t1) ÷ (stop − entry);必须 ≥ min_risk_reward5C 复盘
position_size仓位大小必须数字(以损定仓后的最终值)5A 下单
is_batch_entry是否分批建仓必须布尔值;由 entry_mode 派生:entry_mode=="分批" → true5C 复盘(统计分批 vs 一次性效果)
max_entry_slippage_bps最大可容忍滑点可选数字(基点);默认 20bps(0.2%);5A 成交后若 entry_slippage_bps 超出此值,触发告警5A 下单(滑点校验)
交易理由
reasons交易理由清单必须字符串列表,框架默认 ≥2 条(去重后计数)5C 复盘
▶ 暂隐藏字段:持仓分类 · 后手次数 · 扩展字段
字段名中文名称必须/可选格式/可选项传给下游
position_classification持仓分类必须短线 · 中线(自动评分)5B 持仓
revenge_count后手次数必须整数,初始为 0复仇控制器
metadata扩展字段可选对象,由系统声明由系统声明决定
输出示例(以损定仓,关键位止盈)
// 步骤①:市价试算
// entry=68350(close), stop=67820(low), RR=(71200-68350)÷(68350-67820)=5.4 ≥ 2.0 ✓ 通过,无需降级
{
  trade_direction:      "做多",
  take_profit_strategy: "关键位止盈",  // 先确定策略
  entry_price:          68350,         // ①市价入场:pattern_prices.close
  stop_loss_price:      67820,         // pattern_prices.low(形态最低价)
  t1_price:             71200,         // 关键位止盈→最近压力位近端
  risk_reward:          5.4,           // (71200-68350)÷(68350-67820)=5.4
  position_size:        0.15,          // 愿亏 80 USDT ÷ 530 点/BTC
  entry_mode:           "一次性",
  reasons: [
    "涨势中期,EMA多头排列",
    "三周期共振支撑区间 [68200, 68500]",
    "看涨Pinbar(左侧入场)"
  ]
}

// 步骤②示例(做多,假设t1=69200,步骤①RR不足时降级限价)
// entry=67820+(68350-67820)×50%=68085, stop=67820, RR=(69200-68085)÷(68085-67820)=4.2 ≥ 2.0 ✓
// entry_price=68085, order_type="限价单"

// 做空示例:pattern {high:68650, close:68200, low:67900}
// 步骤①:entry=68200(close), stop=68650(high), RR=(68200-65500)÷(68650-68200)=6.0 ≥ 2.0 ✓
// stop_loss_price=68650(形态最高价), order_type="市价单"
框架级核心规则
1
入场价两步试算(方向分支):
① 默认取 pattern_prices.close(市价单)·止损见规则2 → 计算 RR
② 若 RR < min_risk_reward,降级为限价单:
  做多:entry = pattern_prices.low + (close − low) × 50%(区间中点,挂低一些)
  做空:entry = pattern_prices.high − (high − close) × 50%(区间中点,挂高一些)
  stop 不变 → 重新计算 RR
③ 仍不足 → 流水线停止
2
止损价固定规则(方向分支):两步试算中均不变
  做多:stop_loss_price = pattern_prices.low(形态最低价)
  做空:stop_loss_price = pattern_prices.high(形态最高价)
3
盈亏比门槛(方向分支):
  做多:risk_reward = (t1 − entry) ÷ (entry − stop)
  做空:risk_reward = (entry − t1) ÷ (stop − entry)
t1_price 由 take_profit_strategy 决定(关键位止盈→最近反向关键位近端;等距止盈→entry ± N×|entry−stop|,N 为等距止盈算法内部参数,由算法实现定义;跟踪均线→首个目标价)
⚠️ 等距止盈参数 N 的具体定义待算法实现层补充(当前框架层不直接约束)
4
以损定仓(核心):仓位大小 = 风险额度 ÷ |entry - stop_loss|;风险额度由 risk_mode 决定:fixed_amount→直接用 risk_value;equity_percent→risk_value × 当前账户净值(框架实时查询)
5
理由门槛:len(unique(reasons)) < 配置阈值 → 不生成计划,流水线停止;去重后计数,重复条目不累计
6
止盈策略可插拔:内置「关键位止盈 / 跟踪均线止盈 / 等距止盈」三种基础策略,系统可注册自定义策略
7
部分成交处理:止盈/止损价格按原计划,数量跟随实际成交量
短路条件

两步入场价试算后盈亏比仍不足 / 理由不足 → 流水线停止。

entry_timing.side ≠ entry_style → 流水线停止,原因:信号时机不匹配(如系统限定右侧,但本次信号为左侧)。

模块 5A
OrderManager · 下单管理
管理"已挂出但未完全成交"的订单;输入 PlanModule 的交易计划
输入数据
来源 字段名 中文名称 必/选 用途
模块4 trade_direction 交易方向 必选 向交易所提交买/卖指令
模块4 order_type 订单类型 必选 决定向交易所下市价单还是限价单
模块4 entry_price 入场价 必选 市价单时为参考价,限价单时为挂单价格
模块4 entry_mode 建仓方式 必选 决定一次性下单还是分批挂单
模块4 entry_orders 分批挂单规格 可选 分批模式下的各档挂单参数
模块4 position_size 仓位大小 必选 向交易所提交的下单数量
模块4 stop_loss_price 止损价 必选 同步挂止损单;透传给模块5B
模块4 t1_price 第一止盈价 必选 同步挂止盈单;透传给模块5B
模块4 max_entry_slippage_bps 最大可容忍滑点 可选 默认 20bps;成交后校验 entry_slippage_bps:超出则触发告警并写入5C,不阻塞下单流程
SystemConfig exchange 交易所 必选 决定调用哪个交易所 API
SystemConfig margin_mode 保证金模式 必选 逐仓,影响下单接口参数(当前版本仅支持逐仓)
SystemConfig leverage 杠杆倍数 必选 设置交易所杠杆倍数
执行参数由5A直接读取,不经过模块4
下单前置校验
1
杠杆确认:下单前通过 REST API 查询账户当前杠杆倍数,确认与 SystemConfig.leverage 一致;若不一致则先调用交易所设置杠杆接口更正,再执行下单
关键输出字段(成交后传入模块 5B)
字段名中文名称必须/可选格式/可选项传给下游
成交信息
order_id订单编号必须字符串(交易所返回)5B 持仓
order_type订单类型必须市价单 · 限价单;透传自模块45C 复盘(统计市价/限价胜率)
status订单状态必须PENDING · FILLED · PARTIAL · CANCELLED · EXPIRED · REJECTED5B 持仓 5C 复盘
filled_size实际成交量必须数字(FILLED / PARTIAL 时有值)5B 持仓
filled_price实际成交价必须数字(FILLED / PARTIAL 时有值)5B 持仓
entry_fee入场手续费可选数字(U计价);交易所返回的本次成交手续费;FILLED/PARTIAL 时有值;pnl 为税前值,手续费单独记录,不计入 pnl 计算5C 复盘(汇总全程手续费)
滑点校验
entry_slippage_bps实际入场滑点可选数字;(filled_price − plan_entry_price) ÷ plan_entry_price × 10000 × sign,sign=做多+1/做空−1;正值=不利滑点,负值=有利滑点;FILLED/PARTIAL 时计算;超限判定:entry_slippage_bps > max_entry_slippage_bps(只对正值即不利方向告警)5B 持仓(滑点超限时触发告警)5C 复盘
actual_rr_at_fill成交时实际RR可选数字;用 filled_price 代替 entry_price 重新计算 risk_reward;低于 min_risk_reward×0.8 时触发告警5B 持仓 5C 复盘
撤单与异常
cancel_reason撤单原因可选字符串(CANCELLED / EXPIRED 时有值)5C 复盘
partial_protection_order_id部分成交保护单ID可选字符串;PARTIAL 时有值,指向为 filled_size 创建的 reduce-only 止损单5B 持仓
reject_reason拒单原因可选字符串(REJECTED 时有值)5C 复盘
failed_leg失败委托类型可选入场单 · 止损单 · 止盈单(REJECTED 时指明哪类委托被拒)5C 复盘
emergency_flatten_triggered是否触发应急平仓可选布尔值;保护单重试仍失败且已有持仓时 = true5C 复盘
输出示例(限价单完全成交)
{
  order_id:     "OKX-BTC-20240515-0042",
  order_type:   "市价单",              // 步骤①通过,市价成交
  status:       "FILLED",
  filled_size:  0.15,
  filled_price: 68350,
  cancel_reason: null
}
订单状态机

PENDING(已挂单未成交)
  ├─ FILLED(完全成交) → 用 filled_price 重校 RR;移交 PositionMonitor
  ├─ PARTIAL(部分成交)→ 立即为已成交数量(filled_size)挂 reduce-only 止损保护单;剩余继续等待;记录 partial_protection_order_id
  ├─ CANCELLED(撤单) → 记录原因,结束
  ├─ EXPIRED(超时) → 超出 order_cancel_timeout_hours(默认 4 小时)未成交,自动撤
  └─ REJECTED(交易所拒绝) → ① 重试一次(原参数);② 仍失败 → 触发告警;若已有持仓则立即市价 reduce-only 平仓(emergency_flatten);记录 reject_reason、failed_leg

框架级自动撤单触发条件(任一即撤)
1
市场价偏离限价单入场价超过 cancel_price_buffer_bps(做多:市价跌破 entry_price − buffer;做空:市价涨破 entry_price + buffer),视为价格走远,自动撤单
2
挂单超时(超出 order_cancel_timeout_hours,默认 4 小时),自动撤单

注:"关键位被有效突破"原为第2条撤单规则,已移除。原因:"有效突破"需要定义收盘确认根数、超出区间 bps 等参数,精确定义复杂且易误撤;当前由 cancel_price_buffer_bps 和超时机制兜底,后续如需重新引入可在算法层实现。

模块 5B
PositionMonitor · 持仓监控
管理已成交、正在持有的仓位的全生命周期
输入数据
来源 字段名 中文名称 必/选 用途
模块5A order_id 订单编号 必选 初始化持仓追踪,生成 position_id
模块5A filled_size 实际成交量 必选 初始化持仓数量
模块5A filled_price 实际成交价 必选 初始化持仓成本价
模块5A status 订单状态 必选 FILLED/PARTIAL → 激活持仓监控
模块4透传 stop_loss_price 止损价 必选 价格触及时触发止损平仓
模块4透传 t1_price 第一止盈价 必选 价格触及时触发第一止盈
模块4透传 t2_price 第二止盈价 可选 中线单时存在;价格触及时触发第二止盈
模块4透传 take_profit_legs 各档止盈比例 必选 与 (t1_price, t2_price) 按 index 配对监控各档分批止盈,比例之和=1
模块4透传 take_profit_strategy 止盈策略 必选 决定持仓动态监控逻辑(关键位/跟踪均线/等距)
SystemConfig exchange 交易所 必选 执行平仓指令的账户参数
SystemConfig margin_mode 保证金模式 必选 执行平仓指令的账户参数
SystemConfig take_profit_strategy_default 止盈策略类型 可选 兜底策略(模块4未指定 take_profit_strategy 时使用)
关键输出字段(平仓后传入模块 5C)
字段名中文名称必须/可选格式/可选项传给下游
持仓标识
position_id持仓编号必须字符串5C 复盘
status持仓状态必须OPEN · PARTIAL_CLOSED · CLOSED5C 复盘
平仓结果
close_price平仓价格必须数字(平仓后有值)5C 复盘
close_reason平仓原因必须止盈 · 止损 · 当日强平 · 手动 · 断线熔断 · 交易所强平(爆仓) · ADL(自动减仓) · API故障5C 复盘
盈亏统计
pnl盈亏金额(税前)必须数字(正盈负亏,不含手续费);多头:(close_price − entry_price) × qty;空头:(entry_price − close_price) × qty5C 复盘
pnl_ratio实际盈亏比必须数字(相对于止损金额)5C 复盘
exit_fee出场手续费可选数字(U计价);平仓单实际成交时交易所返回的手续费;与 entry_fee 配合供复盘汇总全程费用5C 复盘
输出示例(T1 止盈平仓)
{
  position_id:  "POS-20240515-0042",
  status:       "CLOSED",
  close_price:  71520,
  close_reason: "止盈",
  pnl:          317.2,   // (71520−68348)×0.1
  pnl_ratio:    6.0      // 317.2 ÷ ((68348−67820)×0.1) = 317.2÷52.8 ≈ 6.0
}
框架级硬规则
1
行情向不利方向发展 → 等止损单触发,禁止主动干预
2
行情停滞横盘 → 浮盈持仓等突破;浮亏持仓等止损
3
浮亏不加仓(硬性,所有系统默认遵守,禁止覆盖)
4
止盈策略由 PlanModule 声明的 take_profit_strategy 驱动;具体行为由策略实现自定义
5
当日强平:到达交易日强平时间点,按 SystemConfig 中的当日平仓比例强制减仓
6
保护单确认(开仓后必做):仓位激活后 protection_check_delay_seconds(默认 15 秒)内,REST 查询交易所确认止损单存在;不存在则重新挂单;重试失败 → 触发 emergency_flatten(市价 reduce-only 全平)
7
断线熔断:WebSocket 断连超过 websocket_failsafe_seconds(默认 30 秒)且 REST 心跳也失败 → 触发本地止损(以 stop_loss_price 为基准市价平仓);记录 close_reason="断线熔断"
8
价格跳空处理:收到成交回报时,若 filled_price 已穿过 stop_loss_price(跳空),立即用实际成交价平仓,不再等待止损委托回报
模块 5C
ReviewLogger · 复盘记录
每笔交易结束后归档;持续输出统计报告
输入数据
来源 字段名 中文名称 必/选 用途
模块5B position_id 持仓编号 必选 关联本次交易记录
模块5B close_price 平仓价格 必选 记录实际平仓价格,计算 pnl
模块5B close_reason 平仓原因 必选 分类统计止盈/止损/强平/ADL/手动/API故障各占比
模块5B pnl 盈亏金额 必选 计算总收益统计
模块5B pnl_ratio 实际盈亏比 必选 与计划盈亏比对比,评估执行质量
模块5A透传 cancel_reason 撤单原因 可选 记录撤单原因(撤单时才有值)
模块3透传 signal_type 信号形态大类 必选 统计各形态胜率和盈亏比
模块2透传 key_level_tier 关键位级别 必选 统计不同级别关键位胜率;取自 M2 输出,M2 有则必须有
模块4透传 trade_direction 交易方向 必选 统计多空胜率对比
模块4透传 is_batch_entry 是否分批建仓 必选 统计分批 vs 一次性建仓的效果对比
模块5A透传 entry_fee 入场手续费 可选 汇总全程手续费(entry_fee + exit_fee)用于分析费用侵蚀
模块5B透传 exit_fee 出场手续费 可选 汇总全程手续费(entry_fee + exit_fee)用于分析费用侵蚀
用户填写 emotion_tag 情绪标签 可选 情绪复盘分析
用户填写 watch_duration 盯盘时长 可选 行为复盘分析
框架级记录维度(所有系统共有)
字段名中文名称必须/可选格式/可选项传给下游
symbol交易品种必须字符串(如 BTCUSDT)落库/日志
trade_direction交易方向必须做多 · 做空落库/日志
signal_type信号形态大类必须字符串(由 SignalModule 传入)统计报告
signal_subtype信号方向形态必须字符串(由 SignalModule 传入)统计报告
key_level_tier关键位级别必须字符串(由 KeyLevelModule 传入)统计报告
is_batch_entry是否分批建仓必须布尔值落库/日志
pnl盈亏金额必须数字(正盈负亏)统计报告
pnl_ratio实际盈亏比必须数字统计报告
entry_slippage入场滑点必须数字(计划价 vs 成交价之差)质量统计
emotion_tag情绪标签可选字符串(如 冲动、耐心、平稳)落库/日志
watch_duration盯盘时长可选数字(分钟)落库/日志
metadata系统专属维度可选对象,由系统统计模板处理统计报告
落库记录示例
{
  symbol:         "BTCUSDT",
  trade_direction: "做多",
  signal_type:    "Pinbar",
  signal_subtype: "看涨Pinbar",
  key_level_tier: "三周期共振",   // len(timeframes)==3
  is_batch_entry: false,
  pnl:            317.2,
  pnl_ratio:      5.78,
  entry_slippage: -2,             // 计划 68350,实际 68348
  emotion_tag:    "平稳",
  watch_duration: 45              // 分钟
}
输出
  • 单笔记录(结构化字段,落库或日志)
  • 周期性统计报告(胜率、盈亏比、关键位有效性、信号有效性等)
四
流水线编排(短路机制)
任一模块返回空/震荡(顺势系统)/不合格,整条流水线立即停止
SystemConfig(配置注入所有模块)
↓
模块1 · TrendModule⛔ direction == 震荡 且 顺势策略 → 短路停止
↓
模块2 · KeyLevelModule⛔ key_levels 为空 → 短路停止
↓
模块3 · SignalModule⛔ 无合格信号 / 入场时机不匹配 → 短路停止
↓
模块4 · PlanModule⛔ 盈亏比不足 / 理由不足 → 短路停止
↓
模块5A · OrderManager(FILLED → 移交持仓 · EXPIRED/CANCELLED → 记录结束)
↓
模块5B · PositionMonitor(平仓后 →)
↓
模块5C · ReviewLogger

短路的语义:前一步不通过,后一步没必要计算——既节省算力,也确保不会在弱信号上勉强生成计划。

五
共享数据层设计
多个系统并行时,相同的数据/计算只发生一次

第一层 · MarketDataHub(行情数据中心)

启动时收集所有系统注册的交易对,合并去重后统一拉取K线。每个交易对每个周期只拉一份,多个系统订阅同一份数据。

第二层 · TrendResultCache(趋势结果缓存)

每个交易对的每种趋势分析方法 + 每个周期,只算一次。缓存 key:(symbol, timeframe, method, params_hash)。各系统按需取用,不重复计算。

第三层 · KeyLevelCache(关键位缓存)

同一交易对的多周期关键位扫描只做一次。缓存 key:(symbol, timeframe, method, params_hash, source_close_time)(params_hash 覆盖 atr_multiplier、lookback_bars 等扫描参数;source_close_time 为产生缓存的那根K线收盘 ISO 时间,新K线收盘时旧条目自动失效,保留1根供回放)。多个系统共享同一份关键位列表,各自决定如何使用(如不同的盈亏比门槛、不同的相对位置筛选)。

示例:同一品种 BTC/H4,两套不同参数产生不同缓存 key:
"BTCUSDT_H4_swing_high_low_a3f2c1"(atr_multiplier=1.5, lookback_bars=100)
"BTCUSDT_H4_swing_high_low_9d7e44"(atr_multiplier=2.0, lookback_bars=200)
params_hash 为参数字典序列化后的哈希摘要(取前6位),两套系统互不污染。

第四层 · SymbolStrategyRegistry(交易对策略注册表)

以交易对为视角的配置入口,决定哪个交易对激活哪些系统模板。运营时可随时启停某交易对的某套策略,不需要改代码。

示例:BTC/USDT → 激活系统A、系统C;SOL/USDT → 激活系统B;BNB/USDT → 激活系统B

完整调用顺序
定时器触发
↓
MarketDataHub(K线,去重拉取)
↓
TrendResultCache(每个交易对的每种方法+周期 各算1次)
↓
KeyLevelCache(每个交易对的多周期关键位 各扫1次)
↓
SymbolStrategyRegistry(路由:将数据+缓存推给对应系统)
↓
各系统(从缓存取数据,跑信号识别 + 计划生成)
↓
MultiSystemRunner(统一风控、资金分配、复仇协调)
六
统一风控层 暂缓设计
与具体系统无关,由 MultiSystemRunner 层统一执行(当前版本跳过,后续补充)

多级亏损熔断

  • 单交易对每日亏损上限:触达后该交易对当日所有系统冻结开新仓
  • 全账户每日亏损上限:触达后全部系统冻结开新仓 + 当日交易权限锁定
  • 既存持仓不受影响,但禁止新开和加仓

复仇协调器(RevengeController)

  • 管理"亏损后再来一次"的权限,每个"信号事件"最多允许 N 次复仇
  • 同一信号事件判定:同一交易对 + 同一方向 + 关键位区间重叠(±0.4%)+ 触发时间相差 ≤ 4 小时
  • 跨系统共享:多个系统在同一关键位+同一方向亏损 → 配额共享,先到先得
  • 日亏损触达上限时,所有复仇权利自动冻结

浮亏不加仓(硬规则)

所有系统通用,PositionMonitor 强制拦截,禁止覆盖。

当日强平

按 SystemConfig 中的强平比例和强平时间点驱动,独立任务执行,不依赖各系统的持仓监控。

七
三条并行轨道
系统运行时三条独立、异步并行的轨道,互不阻塞
轨道
触发方式
做什么
市场扫描
main_timeframe 收盘时触发 + trend_timeframe 收盘时触发
两个周期各自独立调度,大周期(trend)在后台异步执行不阻塞主周期
MarketDataHub 拉最新K线(去重)→ TrendResultCache 更新趋势缓存 → KeyLevelCache 更新关键位缓存
信号探测
main_timeframe 每根新K线收盘时触发
事件驱动,不是定时轮询——K线收盘 → 立即检测信号
各系统从缓存取趋势 + 关键位 → SignalModule 检测新K线是否有合格信号 → PlanModule 生成交易计划 → 5A 下单
持仓追踪
CCXT WebSocket 推送驱动
持仓/订单有变化时交易所主动推送,事件驱动,非轮询
OrderManager 处理订单状态变更(成交/撤销/超时)→ PositionMonitor 检查止盈/止损/移损 → 平仓后触发 ReviewLogger

当日强平由独立任务在收盘前驱动,不依赖持仓追踪轨道。所有状态变更均带时间戳落日志。

并发安全约定:

  • 缓存读写隔离:市场扫描写 TrendResultCache / KeyLevelCache 时加写锁;信号探测读缓存时加读锁(读写锁,多读单写)。写操作完成前,信号探测挂起等待,不读半更新状态。
  • 缓存时间戳一致性:每个缓存条目携带 source_close_time(产生该缓存的K线收盘时间)。信号探测读取前校验:trend.source_close_time == key_level.source_close_time;不一致时跳过本次检测并记录日志,等待下一个K线事件。
  • WebSocket 幂等处理:同一笔成交可能触发多个推送事件(如 order_filled + position_update)。5B/5C 以 order_id + event_type 作为幂等键去重,同一 (order_id, event_type) 只处理一次。
八
如何注册一个新交易系统
将交易方法论"系统化"为本框架的一个实例,共7步
1
填写 SystemConfig(模块0),按 schema 逐字段填写,必填字段不可省,可选字段按需声明
2
选择 TrendModule 实现 + 方法 + 参数:声明主判断方法 + 辅方法集合 + 每个方法的具体数值
3
选择 KeyLevelModule 实现 + 参数:配置扫描周期组、区间宽度、合并阈值、滚动窗口长度
4
选择 SignalModule 实现 + 方法 + 参数:声明启用的信号类型,配置形态阈值、加分项、置信度调节
5
配置 PlanModule:选择止盈策略、配置理由门槛、建仓方式的盈亏比阈值与分批比例
6
注册到 MultiSystemRunner,框架自动接管,与其他系统并行运行,共享数据层、统一风控、复仇协调、当日强平等全部基础设施
7
(可选)在 ReviewLogger 中注册系统专属的统计维度
并行组合示例
系统趋势方法信号方法止盈策略交易对建仓方式
系统AEMA均线(主)+ 裸K(辅)Pinbar关键位止盈BTC/ETH一次性
系统B裸K分析(主)+ 趋势线/EMA(辅)突破信号等距止盈SOL/BNB三档分批
系统CEMA均线(主)+ 形态(辅)金K形态跟踪均线止盈BTC一次性
九
三层文档体系与算法规格书
框架文档管协议,算法规格书管逻辑,系统配置管实例化
三层关系

本框架文档(trading_framework_v1.html)只定义各模块的输入/输出接口契约,不规定具体计算逻辑。完整的系统由三层文档共同描述:

层级文档负责什么示例
框架层 trading_framework_v1.html 模块接口协议、字段 schema、流水线流程、并发安全规则 M1 输出 direction(涨势/跌势/震荡),类型 string,必须
算法层 algorithms/M1_Trend_Sanbuqu.md 具体判断逻辑、私有参数定义、字段映射关系 Close > EMA20 且近3根低点抬升 → direction="涨势"
实例层 system_a_config.json 声明某交易系统使用哪套算法 + 具体参数值 trend_method_main: "sanbuqu_v1", kline_window: 200
算法层覆盖的模块

以下模块的"具体如何判断"需要独立算法规格书;M0/M5A/M5B/M5C 是框架运行时,不需要:

模块算法规格书命名示例规格书描述的核心内容
M1 TrendModuleM1_Trend_Sanbuqu.md
M1_Trend_EMA_Crossover.md
如何从K线计算 direction / stage / extreme_price / pullback_depth
M2 KeyLevelModuleM2_KeyLevel_SwingHighLow.md
M2_KeyLevel_VolumeZone.md
如何识别关键位区间、合并相邻位、定义 price_low/high
M3 SignalModuleM3_Signal_MorningStar.md
M3_Signal_PinBar.md
如何识别K线形态、定义 signal_type / signal_subtype / pattern_prices
M4 止盈策略M4_TP_KeyLevel.md
M4_TP_EqualDistance.md
如何计算 t1_price / t2_price,等距策略的 N 值定义及默认值
算法规格书模板结构
# M1_Trend_Sanbuqu.md(示例)

## 身份声明
- 对应模块:M1 TrendModule
- algorithm_id:sanbuqu_v1(M0 的 trend_method_main 中引用的 ID)

## 接口映射(对接框架契约)
// 框架要求的输出字段 → 本算法如何填充
- direction        ← "涨势" / "跌势" / "震荡"(见判断逻辑第3步)
- stage            ← "初期" / "中期" / "末期"(见阶段划分)
- trend_origin_price  ← 本轮趋势的起点价格
- extreme_price    ← 本轮趋势的极值价格(高点/低点)
- pullback_depth   ← 做多:(extreme−current)÷(extreme−origin)
                     做空:(current−extreme)÷(origin−extreme)

## 算法私有参数(写入 M0 的 metadata 字段)
- metadata.ema_period:均线周期,默认 20
- metadata.trend_confirm_bars:趋势确认K线数,默认 3

## 判断逻辑
1. 取 kline_window 根K线
2. 计算 EMA{ema_period}
3. 涨势判定:Close > EMA 且近 {trend_confirm_bars} 根K线低点依次抬升
   → direction="涨势",trend_origin_price=本轮起涨点,extreme_price=区间最高点
4. 跌势判定:Close < EMA 且近 N 根K线高点依次下移 → direction="跌势"
5. 震荡判定:价格在 EMA ±0.5% 内交织超过5根K线 → direction="震荡"(触发框架短路)

## 阶段划分(stage 字段)
- 初期:趋势确认后的前 1/3 时间段(以 kline_window 为参考)
- 中期:中间 1/3
- 末期:extreme_price 距前高/低不足 ATR×1.5,或动量明显衰竭

三层联动流程

① 框架文档确认 M1 需要输出 direction(接口契约)
② 算法规格书 M1_Trend_Sanbuqu.md 定义如何计算 direction(逻辑)
③ 系统配置声明 trend_method_main: "sanbuqu_v1" + 参数值(实例化)
④ 运行时框架读取配置,调用对应算法实现,校验输出字段是否符合接口契约

十
设计原则总结
1
方法与运行时解耦 — 框架不假设任何具体方法论,所有方法相关的内容都在系统配置中
2
契约驱动 — 模块之间靠输入/输出字段对接,实现可任意替换
3
短路优先 — 流水线任一环节不通过立即停止,节省资源、防止勉强入场
4
去重共享 — 多系统并行时,相同的行情/趋势/关键位计算只发生一次
5
风控与系统正交 — 账户级风控、当日强平、复仇配额由框架统一管控,与具体系统无关
6
可观察性内建 — 所有状态变更都带时间戳落日志,复盘维度可扩展