L1 · 交易认知框架 PRD · 草稿 v0.1
交易认知框架
加密货币短线合约自动交易系统 v1.0
最后更新:2026-05-30  ·  依赖文档:L0 项目总纲
本文档的作用:在任何代码落地之前,先定义系统"如何理解市场"的概念契约。这一层决定了后续所有模块的输入/输出语言。如果认知框架定义不清,各模块的实现就会各说各话。
目录
  1. 市场状态定义
  2. 趋势识别框架
  3. 关键位定义框架
  4. 入场信号定义框架
  5. 交易计划定义框架
  6. 仓位与风险认知框架
  7. 复盘框架
  8. 不确定性与冲突处理原则

1市场状态定义

系统对市场的认知从"当前市场处于什么状态"开始。这是所有后续判断的前提。

市场状态是一个枚举值,由趋势识别模块(模块1)负责输出,整个系统在同一时刻只认可一个有效状态。

BULL
多头趋势:价格总体方向向上,高点和低点均在抬高。系统优先寻找做多机会。
BEAR
空头趋势:价格总体方向向下,高点和低点均在降低。系统优先寻找做空机会。
RANGING
震荡区间:价格在一定范围内来回波动,无明确方向性。系统默认暂停交易,等待趋势形成。
UNKNOWN
不可判断:数据不足、信号冲突、或处于重大事件期间。系统强制观望,不执行任何交易。

趋势还需要携带两个附加维度,供后续模块使用:

字段类型含义用途
direction枚举BULL / BEAR / RANGING / UNKNOWN决定系统是否进入后续分析
phase枚举EARLY / MID / LATE影响信号过滤严格程度
strength0.0 ~ 1.0市场客观强度(斜率、排列整齐度等)影响仓位大小计算
strength 反映市场的客观状态,不是对策略准确性的评估。高 strength 意味着趋势清晰、动能强,应配更大仓位;低 strength 意味着趋势模糊,应配更小仓位或观望。

2趋势识别框架

本节定义趋势识别模块的接口契约,不规定具体使用哪种算法。具体算法(均线法、裸K法、趋势线法等)是 L4 算法规格的内容,可以插拔替换,只要遵守此处定义的接口即可。

输入契约

TrendAnalyzer.analyze(input) → TrendState
candles
K 线数组,包含 OHLCV,时间周期由调用方指定
timeframe
分析所用周期(M15 / H1 / H4 等)
config
策略实现所需的参数(由具体策略定义,框架不关心内容)

输出契约

TrendState
direction
BULL / BEAR / RANGING / UNKNOWN(必须输出,不允许为空)
phase
EARLY / MID / LATE(仅在 BULL/BEAR 时有意义)
strength
0.0 ~ 1.0,低于框架配置的最低阈值时,系统自动降级为 UNKNOWN
basis
字符串列表,说明本次判断的依据(用于复盘,不影响决策)
timeframe
原样返回,供调用方区分多周期结果

多周期融合规则

系统会对 M15、H1、H4 三个周期分别运行趋势识别,融合规则如下:

主决策周期(M15)的 direction 作为最终结论 H1 direction 与 M15 相同 → H1 作为确认,strength 加权提升 H1 direction 与 M15 相反 → 触发冲突处理(见第8节) H4 direction 仅用于判断宏观背景,不直接影响 direction 结论

趋势阶段判断准则(框架层面的定义)

阶段定义系统行为
EARLY趋势方向刚形成,尚未经过第一次有效回调确认提高信号过滤门槛,等待确认
MID趋势已有至少一次回调但方向未变,处于最佳持续阶段正常执行,这是主要交易窗口
LATE趋势运行时间较长,出现疲软迹象(回调深度增加、动能减弱)收紧止盈、降低新仓位,不加仓

3关键位定义框架

关键位是"价格对其历史上产生过明显反应的价格区间"。注意是区间,不是单条线。

关键位的类型

类型定义对应操作方向
SUPPORT价格历史上在此区间多次受到支撑反弹优先做多,平空单
RESISTANCE价格历史上在此区间多次受到压制回落优先做空,平多单
SUPPLY_DEMAND由供需不平衡形成的大级别压力/支撑区域同上,但权重更高

关键位的数据结构

KeyLevel
id
唯一标识符
type
SUPPORT / RESISTANCE / SUPPLY_DEMAND
zone_low
区间下边界价格
zone_high
区间上边界价格
strength
0.0 ~ 1.0,触及次数、时间跨度、多周期重合度的综合评分
mtf_weight
多周期权重(M15=1 / H1=2 / H4=3),多周期重合时叠加
state
ACTIVE / HIDDEN / EXPIRED(见下方状态机)
touch_count
被价格触及的次数(每次触及不破坏则+1)
created_at
首次识别时间
last_touched_at
最后一次被价格触及的时间

关键位状态机

ACTIVE
活跃:当前有效,纳入信号判断。价格在区间附近时触发信号检测。
HIDDEN
隐藏:价格已远离该区间,暂不参与信号判断,但保留记录。当价格重新接近时自动恢复为 ACTIVE。
EXPIRED
失效:超过有效窗口(默认 250 根 K 线)未被触及,或被价格有效突破后确认,彻底从活跃列表移除。

关键位的有效性条件

一个关键位被认定为有效,必须满足:

触及次数 ≥ 2 次(至少被价格测试过两次) AND 未被有效突破(突破定义:收盘价超出区间 + 确认 K 线数量满足策略定义) AND 在有效窗口内(distance_in_candles ≤ 250)

位置判断(价格相对于关键位的状态)

每次循环,系统判断当前价格相对于所有 ACTIVE 关键位的位置,输出一个位置状态,供下一步信号判断使用:

位置状态含义系统行为
AT_LEVEL价格在关键位区间内或刚刚触及区间边缘进入信号检测流程
APPROACHING价格距最近关键位 ≤ N%(N 由策略配置)进入信号检测流程(预备状态)
IN_TRANSIT价格处于两个关键位之间,离两侧均远不入场("不赚途中的钱")
NEAR_TARGET价格已接近目标关键位(潜在止盈位)不开新仓,已有仓位考虑止盈

4入场信号定义框架

信号是"在关键位上出现的、指向某个方向的市场行为迹象"。信号不等于入场指令,它是入场判断的必要条件之一。

核心原则:信号必须出现在关键位上才有效。不在任何关键位附近出现的信号,系统视为无效,不进入下一步。

信号的数据结构

Signal
type
信号类型标识符(由具体策略定义,框架不枚举)
direction
LONG / SHORT
confidence
0.0 ~ 1.0,本次信号的可靠程度评估
at_level
触发该信号时关联的关键位 ID
candle_index
信号在 K 线序列中的位置
basis
字符串列表,说明信号判断依据(用于复盘)
is_valid
布尔值,框架根据过滤条件统一设置

信号有效性的必要条件(框架层强制校验)

以下条件由框架统一校验,具体策略无法绕过:

① 关联关键位的 state == ACTIVE ② 当前市场状态 direction != RANGING 且 != UNKNOWN ③ 信号方向与趋势方向一致(逆势信号默认拒绝,除非策略显式标记反转模式) ④ confidence ≥ 配置的最低阈值 ⑤ 当前盈亏比(从入场到目标关键位的距离 / 止损距离)≥ 最低盈亏比配置

任意一条不满足,signal.is_valid = false,不进入计划生成。

confidence 的含义

confidence 不是信号"一定会成功"的概率,而是"当前判断方法在当前市场条件下的可靠程度"。

影响 confidence 的因素方向
关键位被触及次数多+ 提升
多周期信号方向一致+ 提升
量能配合(关键位附近放量)+ 提升
近期假突破频繁- 降低
K 线样本数不足(数据量少)- 降低
信号形态不完整(变形)- 降低

5交易计划定义框架

交易计划是系统在下单前必须生成的完整决策文档。没有完整计划,不允许下单。

计划是系统的决策中心。趋势、关键位、信号都是计划的输入;订单执行、仓位管理、风控都是计划的落地和约束。

TrendState + KeyLevel + Signal → TradePlan → OrderExecution + PositionManagement + RiskControl

TradePlan 数据结构

TradePlan
id
唯一标识符
symbol
交易标的(如 BTCUSDT)
direction
LONG / SHORT
category
SHORT_TERM / MID_TERM(由系统根据趋势阶段和信号自动分类)
entry_price
计划入场价格(或区间)
stop_loss
止损价格,必须在计划生成时确定,不允许为空
take_profit
止盈价格列表(支持多档)
position_size
计划仓位大小(由风险模块计算,见第6节)
risk_amount
本次交易愿意承受的最大亏损金额(以损定仓的基准)
rr_ratio
盈亏比((take_profit[0] - entry) / (entry - stop_loss))
basis
入场理由列表,长度必须 ≥ 2(少于2条理由不生成计划)
signal_ref
触发本计划的 Signal ID
trend_ref
本计划依据的 TrendState 快照
level_ref
关联的 KeyLevel ID
status
PENDING / ACTIVE / COMPLETED / CANCELLED
created_at
计划生成时间
expires_at
计划有效期,超过则自动取消(防止信号过期后仍执行)

计划生成的必要条件

① signal.is_valid == true ② basis 列表长度 ≥ 2(至少两条独立入场理由) ③ rr_ratio ≥ 配置的最低盈亏比(通常 ≥ 2.0) ④ 当前持仓不超过最大同向持仓数量 ⑤ 风控模块未触发日内熔断

6仓位与风险认知框架

仓位大小不由"预期能赚多少"决定,而由"愿意亏损多少"决定。这是"以损定仓"原则。

仓位 = 风险金额 ÷ 单位亏损
其中:风险金额 = 账户资金 × 单笔风险比例;单位亏损 = 入场价 - 止损价

strength 对仓位的影响

在基础仓位之上,用 TrendState.strength 做系数调整,strength 高则可以配更多仓位,strength 低则收缩:

actual_size = base_size × strength_multiplier(strength) 其中 strength_multiplier 是一个单调递增函数,具体映射关系由 L4 算法规格定义

风险边界(框架层强制约束)

约束触发条件系统行为
单笔最大亏损单笔计划的 risk_amount 超过配置上限拒绝生成该计划
日内累计亏损上限当日已实现亏损达到配置值停止所有新计划生成,等待次日重置
大单不过夜position_size 超过"底仓"定义阈值,且临近收盘自动触发平仓
趋势破坏H1 趋势方向发生反转触发当前持仓的紧急减仓/清仓评估

7复盘框架

复盘不是事后分析盈亏,而是系统进化的驱动机制。每一笔交易都要能追溯"为什么入场、依据是否成立、结果是否符合预期"。

ReviewRecord 数据结构

ReviewRecord
plan_id
关联的 TradePlan ID
entry_actual
实际入场价(可能与计划价有偏差)
exit_actual
实际出场价
pnl
实际盈亏(金额)
pnl_ratio
实际盈亏比(与计划的 rr_ratio 对比)
exit_reason
出场原因:TAKE_PROFIT / STOP_LOSS / MANUAL / TREND_BREAK / EXPIRY
signal_verdict
复盘对信号有效性的评估:VALID / FALSE_SIGNAL / PREMATURE
level_verdict
复盘对关键位有效性的评估:HELD / BROKEN / IRRELEVANT
notes
人工注释(可空)

必须记录的内容

系统每次触发都自动记录以下内容,无论是否下单:

时间戳 → 市场状态快照(direction / phase / strength) → ACTIVE 关键位列表快照 → 触发信号情况(有无信号 / 信号类型 / is_valid 及原因) → 是否生成计划(是/否,以及不生成的原因) → 如有计划:计划详情 + 执行结果

复盘维度

维度分析什么
信号质量信号触发后成功率是否与 confidence 分布一致
关键位有效性关键位被触及后是否起到支撑/阻力作用
计划执行偏差实际执行与计划的偏差(滑点、提前平仓等)
趋势判断准确性趋势方向判断的事后准确率
系统整体绩效胜率、平均盈亏比、最大回撤、夏普比率

8不确定性与冲突处理原则

当系统内部各模块之间出现矛盾,或外部市场条件超出正常范围时,系统需要有明确的降级行为,而不是"随机选一个"或"崩溃"。

冲突类型与处理规则

冲突场景处理规则
M15 与 H1 趋势方向相反降级为 UNKNOWN,本次不交易,等待周期对齐
多个关键位密集重叠(区间互相包含)合并为一个关键位,取权重叠加值
同一方向同时出现多个信号取 confidence 最高的一个,其余忽略
信号方向与趋势方向相反默认拒绝;仅在 phase=LATE 且 confidence 极高时允许反转操作(需配置开启)
数据延迟超过 1 个周期暂停当次分析,不基于过期数据生成计划
API 连接中断立即暂停所有新计划,已有订单不操作,恢复后同步状态再继续

不确定性的处理原则

宁可不做,不可乱做。
当任何必要判断的置信度低于阈值、或模块间存在未解决的冲突时,系统的正确行为是输出 UNKNOWN 并停止本次执行,而不是选择其中一个可能的答案继续推进。

这意味着:系统的设计目标不是"尽量多交易",而是"在条件清晰时精准交易"。宁可错过机会,不承担不必要的风险。