Flow 配置模型
概述
Flow 配置模型用于多时间框架可视化编辑器中节点和连接的定义、存储和管理。每个 Flow 表示一个完整的交易策略配置,包含数据源节点、Director/Executor 核心处理节点、仓位管理节点和调试节点。
核心架构:Director-Executor-PositionManager 模式
- Director: 基于大周期(如 4h)判断市场状态,输出仓位约束
- Executor: 基于小周期(如 1h)寻找入场时机,输出目标仓位
- PositionManager: 约束层叠引擎,综合 Director 约束和 Executor 信号输出最终决策
数据模型
FlowConfig (Flow 配置)
class FlowConfig(BaseModel):
id: str # Flow 唯一标识 (UUID)
name: str # Flow 名称 (1-100 字符)
description: Optional[str] # 描述 (0-500 字符,可选)
nodes: List[FlowNode] # 节点列表
edges: List[FlowEdge] # 连接列表
metadata: FlowMetadata # 元数据
created_at: datetime # 创建时间
updated_at: datetime # 更新时间
version: int # 版本号 (自动递增,从 1 开始)
FlowNode (流程节点)
class FlowNode(BaseModel):
id: str # 节点唯一标识
type: FlowNodeType # 节点类型 (枚举)
position: Position # 画布坐标位置
data: Dict[str, Any] # 节点配置数据
FlowEdge (节点连接)
class FlowEdge(BaseModel):
id: str # 连接唯一标识
source: str # 源节点 ID
sourceHandle: str # 源节点端口 ID
target: str # 目标节点 ID
targetHandle: str # 目标节点端口 ID
FlowMetadata (元数据)
class FlowMetadata(BaseModel):
viewport: Optional[Dict[str, float]] # 画布视口状态 (x, y, zoom)
tags: List[str] # 标签列表
author: Optional[str] # 作者
notes: Optional[str] # 备注
FlowNodeType (节点类型枚举)
class FlowNodeType(str, Enum):
# 数据源节点
MARKET_SOURCE = "marketSource" # K线数据源
TICK_SOURCE = "tickSource" # Tick 数据源
# 技术指标节点
INDICATOR_MACD = "indicator_macd"
INDICATOR_MA_CROSS = "indicator_ma_cross"
INDICATOR_MOMENTUM_BREAKOUT = "indicator_momentum_breakout"
INDICATOR_TREND_CHANNEL = "indicator_trend_channel"
INDICATOR_LOW_VOLATILITY = "indicator_low_volatility"
INDICATOR_RSI_MOMENTUM = "indicator_rsi_momentum"
INDICATOR_BOLLINGER_BANDS = "indicator_bollinger_bands"
INDICATOR_VOLUME_SPIKE = "indicator_volume_spike"
ATR_INDICATOR = "atrIndicator" # ATR 指标 (波动率/仓位计算)
# 核心处理节点
DIRECTOR = "director" # 信号决策器
EXECUTOR = "executor" # 执行器
SIZING_POLICY = "sizingPolicy" # 仓位策略
POSITION_MANAGER = "positionManager" # 持仓管理
TRADE_EXECUTOR = "tradeExecutor" # 交易执行
# 调试节点
CONSOLE_LOG = "consoleLog" # 控制台日志
CHART_PLOTTER = "chartPlotter" # 图表绘制
METRIC_GAUGE = "metricGauge" # 指标仪表
Position (画布位置)
class Position(BaseModel):
x: float # X 坐标
y: float # Y 坐标
业务规则
Flow 管理
- 每个 Flow 有唯一的 UUID 标识
- Flow 名称长度限制 1-100 字符
- Flow 描述长度限制 0-500 字符
- 更新 Flow 时版本号自动递增
- 复制 Flow 时版本号重置为 1
节点连接规则
- 每个节点有明确的输入/输出端口
- 连接必须指定源和目标的端口 ID
- 不允许形成循环连接
- 某些节点类型有连接数量限制
版本控制
- 新建 Flow 版本号为 1
- 每次更新操作版本号 +1
- 复制 Flow 时版本号重置为 1
- 版本号用于乐观锁和变更追踪
存储设计
Redis 键设计
| 数据类型 | Key 模式 | 存储类型 | TTL |
|---|---|---|---|
| Flow 数据 | flows:{flow_id} |
String (JSON) | 永久 |
| Flow 列表 | flows:list |
Set | 永久 |
存储策略
- Flow 配置使用 Redis 永久存储
- 使用
redis.set()保存,不设置过期时间 - Flow 列表使用 Set 类型维护索引
- 依赖 RDB + AOF 持久化保证数据安全
API 设计
Flow 管理
GET /api/v1/flows- 获取 Flow 列表POST /api/v1/flows- 创建 FlowGET /api/v1/flows/{id}- 获取 Flow 详情PUT /api/v1/flows/{id}- 更新 FlowDELETE /api/v1/flows/{id}- 删除 Flow
Flow 操作
POST /api/v1/flows/{id}/validate- 验证 Flow 配置POST /api/v1/flows/{id}/duplicate- 复制 Flow
验证规则
Flow 验证
- 必须包含至少一个数据源节点
- 必须包含至少一个核心处理节点
- 所有连接的节点必须存在
- 端口类型必须匹配
- 不允许存在孤立节点(无连接)
节点验证
- 节点 ID 必须唯一
- 节点类型必须为有效的枚举值
- 节点位置坐标必须为有效数值
- 节点配置数据必须符合类型要求