🇨🇳 简体中文
🇺🇸 English
🇯🇵 日本語
Skip to the content.

Fire 策略系统文档

概述

Fire量化交易系统采用模块化的策略架构,所有策略基于 BaseStrategy 基类实现,通过 StrategyRegistry 自动注册系统进行管理。本文档涵盖策略实现、注册、生命周期管理和数据处理规范。

当前系统状态

已实现功能

已注册策略列表

当前共 8 个策略 已成功注册:

分类 策略ID 描述 状态
Momentum (2个)      
  MomentumBreakoutStrategy 动量突破策略:价格突破 + 成交量确认 已实现
  RSIMomentumStrategy RSI动量策略:RSI + 趋势过滤 已实现
Trend Following (3个)      
  MACDStrategy MACD策略 已实现
  MACrossStrategy 移动平均线交叉:快慢均线金叉死叉 已实现
  TrendChannelStrategy 趋势通道:Donchian Channel + ATR止损 已实现
Mean Reversion (1个)      
  BollingerBandsStrategy 布林带均值回归:触及上下轨交易 已实现
Volume (1个)      
  VolumeSpikeStrategy 成交量异动:异常成交量 + 价格变化 已实现
Volatility (1个)      
  LowVolatilityStrategy 低波动率:寻找低波动率股票 已实现

验证命令:

cd backend && source venv/bin/activate
python -c "from core.trading.strategies.registry import StrategyRegistry; \
           import core.trading.strategies; \
           StrategyRegistry.debug_print_registry()"

开发者必读

核心设计原则

1. 数据查询架构原则

严格数据查询原则(Critical Design Principle)

单点查询:必须精确匹配

为什么禁止近似查询?

批量查询:有就有,没有就没有
回溯查询:必须返回回溯信息

如果需要”凑齐N个数据点”的功能(例如策略预热需要固定数量的历史数据),系统提供专门的回溯查询方法:

数据查询方式:

详细规范: 市场数据缺失处理规范


策略架构

StrategyRegistry 自动注册系统

Fire 使用基于装饰器的策略注册系统,无需手动维护策略映射。

注册新策略

from core.trading.strategies.registry import StrategyRegistry
from core.trading.strategies.metadata import StrategyCategory
from core.trading.strategies.base_strategy import BaseStrategy

@StrategyRegistry.register(
    category=StrategyCategory.MOMENTUM,
    description="我的动量策略:自定义逻辑",
    min_history_bars=50,
    supports_realtime=True,
    supports_backtest=True,
)
class MyMomentumStrategy(BaseStrategy):
    def __init__(self, name: str, config: Dict[str, Any]):
        super().__init__(name, config)
        # 初始化参数

    def on_market_data(self, market_data: MarketData, is_warmup: bool = False):
        # 处理市场数据
        pass

    def on_trade_update(self, trade):
        # 处理交易更新
        pass

策略元数据

注册时可指定以下元数据:

参数 类型 默认值 说明
category StrategyCategory 必需 策略分类(MOMENTUM/TREND_FOLLOWING/等)
description str 必需 策略描述(至少10个字符)
supports_realtime bool True 是否支持实时交易
supports_backtest bool True 是否支持回测
supports_markets List[MarketType] 所有市场 支持的市场类型
supports_granularities List[TimeGranularity] 常用粒度 支持的时间粒度
min_history_bars int 100 最少历史数据条数
memory_intensive bool False 是否内存密集
cpu_intensive bool False 是否CPU密集

查询已注册策略

# 获取策略类
strategy_class = StrategyRegistry.get_strategy("MomentumBreakoutStrategy")

# 获取元数据
metadata = StrategyRegistry.get_metadata("MomentumBreakoutStrategy")

# 列出所有策略
all_strategies = StrategyRegistry.list_all_strategies()

# 按分类列出
momentum_strategies = StrategyRegistry.list_by_category(StrategyCategory.MOMENTUM)

# 验证策略存在
if StrategyRegistry.validate_strategy_exists("MyStrategy"):
    print("策略已注册")

策略参数定义系统

参数类型系统

Fire 支持完整的参数类型系统,前端会根据参数类型自动渲染合适的UI组件。

定义策略参数

所有策略参数必须在 backend/core/models/strategy_config.pyStrategyConfigPreset 中定义:

from core.models.strategy_config import StrategyParameter, ParameterType, StrategyConfigTemplate

# 在 STRATEGY_TEMPLATES 字典中添加策略模板
"MyStrategy": StrategyConfigTemplate(
    strategy_name="MyStrategy",
    display_name="我的策略",
    description="策略描述",
    version="1.0.0",
    author="系统",
    parameters=[
        # 整数参数 - 用于周期、数量、索引
        StrategyParameter(
            name="fast_period",
            type=ParameterType.INTEGER,  # 整数类型
            default_value=12,
            description="快线周期(K线数量)",
            min_value=5,
            max_value=50,
            category="technical",
        ),

        # 浮点数参数 - 用于比率、百分比、价格
        StrategyParameter(
            name="stop_loss",
            type=ParameterType.FLOAT,  # 浮点数类型
            default_value=0.03,
            description="止损比例(相对价格变化)",
            min_value=0.01,
            max_value=0.20,
            category="risk",
        ),

        # 布尔参数 - 用于开关
        StrategyParameter(
            name="use_ema",
            type=ParameterType.BOOLEAN,
            default_value=True,
            description="使用指数移动平均线",
            category="technical",
        ),

        # 枚举参数 - 用于选项列表
        StrategyParameter(
            name="ma_type",
            type=ParameterType.STRING,
            default_value="EMA",
            description="均线类型",
            allowed_values=["SMA", "EMA"],
            category="technical",
        ),
    ],
    # ... 其他配置
)

参数类型与UI组件映射

前端会根据参数类型自动选择UI组件:

参数类型 UI组件 步长 精度 示例
INTEGER Slider / InputNumber step=1 precision=0 周期=12 (显示为 “12”)
FLOAT Slider / InputNumber step=0.01 precision=2 止损=0.03 (显示为 “0.03”)
BOOLEAN Switch - - 启用EMA: ON/OFF
STRING (with allowed_values) Select - - 均线类型: SMA/EMA
STRING (without allowed_values) Input - - 自定义文本

参数类型选择指南

参数模式 推荐类型 原因 示例
*_period INTEGER K线数量必须是整数 fast_period=12
*_days INTEGER 天数必须是整数 lookback_days=20
lookback_* INTEGER 历史窗口大小是整数 lookback_period=50
*_threshold FLOAT 通常是0-1之间的比率 breakout_threshold=0.65
*_ratio FLOAT 比率值通常是小数 position_ratio=0.1
stop_* / take_* FLOAT 止损止盈为价格变化百分比 stop_loss=0.03
*_multiplier FLOAT 乘数可以是小数 volume_multiplier=1.5
max_* / min_* INTEGER 数量限制通常是整数 max_positions=5
use_* / enable_* BOOLEAN 开关标志 use_ema=True

前端自动化处理

定义好参数类型后,前端会自动:

  1. 类型转换: useStrategyMetadata.ts 保留 integer/float 区分
  2. 步长设置: 整数 step=1, 浮点数 step=0.01
  3. 精度控制: 整数 precision=0 (无小数), 浮点数 precision=2 (2位小数)
  4. 显示格式: 整数显示 “12”, 浮点数显示 “0.03”

无需前端额外配置,只需在后端正确定义 ParameterType 即可!

完整示例

参考现有策略的参数定义:


策略生命周期管理

生命周期阶段

┌─────────────┐
│   创建      │ → strategy = StrategyClass(name, config)
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  初始化     │ → strategy.initialize(context)
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  预热       │ → strategy.on_market_data(data, is_warmup=True)
│  (WARMING)  │   积累历史数据,不生成信号
│             │   追踪: warmup_progress / warmup_required
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  运行       │ → strategy.on_market_data(data, is_warmup=False)
│  (交易)     │   处理实时数据,生成信号
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  停止       │ → strategy.stop() (如果有清理逻辑)
└─────────────┘

StrategyEngine 生命周期

TradingChannel 自动管理 StrategyEngine 的生命周期:

策略预热机制

策略支持自动追踪预热进度,并在完成时自动通知:

1. 声明所需历史数据量

通过实现 get_required_history_length() 方法声明策略需要的历史数据条数。

2. 初始化预热状态

initialize() 方法中调用 _init_warmup_state() 初始化预热状态跟踪。

3. 在数据处理中追踪预热进度

on_market_data 方法中:

  1. 调用 _update_warmup_progress() 更新预热进度
  2. 预热阶段只积累数据,不生成信号
  3. 预热完成后开始正常处理市场数据并生成信号

4. 预热进度日志

策略会自动记录预热进度:

预热状态初始化:需要 50 条历史数据
预热中:10/50 (20.0%)
预热中:20/50 (40.0%)
预热中:30/50 (60.0%)
预热中:40/50 (80.0%)
预热中:50/50 (100.0%)
预热完成!已接收 50 条数据,策略准备就绪

5. 预热状态属性

策略提供以下属性来追踪预热状态:


策略开发指南

1. 基础策略结构

策略开发需要:

  1. 继承 BaseStrategy 基类
  2. 使用 @StrategyRegistry.register 装饰器注册策略,指定分类、描述和所需历史数据条数
  3. __init__ 中配置策略参数和初始化数据结构
  4. 实现 initialize() 接收策略上下文
  5. 实现 get_required_history_length() 声明所需历史数据量
  6. 实现 on_market_data() 处理市场数据并生成信号
  7. 可选实现 on_trade_update() 处理交易回调

参考现有策略实现:backend/core/trading/strategies/

2. 使用 pandas-ta 技术指标

系统集成了 pandas-ta 库,提供10+种常用技术指标:

所有指标计算自动缓存,避免重复计算。

3. 共同设计模式

动态股票管理模式

策略支持动态管理多个股票的历史数据:

信号生成模式

使用 _set_signal() 方法生成交易信号:

其他模块通过 get_signal(symbol) 获取策略信号。


策略对比

策略名称 类别 技术指标 信号逻辑 适用场景 风险特征 历史数据需求
MomentumBreakoutStrategy 动量 价格、成交量、标准差 突破 + 成交量确认 趋势启动 中等风险 50条
RSIMomentumStrategy 动量 RSI、EMA RSI超买超卖 + 趋势过滤 趋势市场 中等风险 50条
MACrossStrategy 趋势 快慢均线 均线交叉(金叉死叉) 趋势确认 低风险 50条
TrendChannelStrategy 趋势 Donchian Channel、ATR 通道突破 + ATR止损 突破交易 高风险 50条
BollingerBandsStrategy 波动率 布林带(SMA + 标准差) 触及上下轨均值回归 震荡市场 中等风险 50条
LowVolatilityStrategy 波动率 ATR、标准差 低波动选股 + 成交量过滤 稳健配置 低风险 50条
VolumeSpikeStrategy 成交量 成交量、价格 异常成交量 + 价格方向 事件驱动 高风险 30条

测试策略

所有策略都有对应的单元测试,验证以下功能:

测试文件位于 tests/unit/strategies/ 目录。


策略性能监控

所有策略跟踪以下指标:

通过日志和Redis可以实时查看策略表现。


技术指标管理

Fire 系统提供技术指标元数据管理功能,便于用户了解和使用各种技术指标。

可用技术指标

系统当前包含 10 个 常用技术指标元数据:

指标ID 名称 类型 描述
rsi 相对强弱指标 (RSI) momentum 衡量价格变动速度的动量振荡器
macd MACD trend 趋势跟踪动量指标
bollinger_bands 布林带 volatility 基于标准差的波动率通道
sma 简单移动平均线 trend 价格算术平均
ema 指数移动平均线 trend 加权移动平均
atr 真实波幅 (ATR) volatility 衡量市场波动性
stoch 随机指标 momentum 超买超卖振荡器
obv 能量潮 (OBV) volume 成交量趋势指标
vwap 成交量加权平均价 volume 机构交易参考
adx 平均方向指数 trend 趋势强度指标

指标元数据存储

指标元数据以 JSON 文件形式存储在:

backend/core/trading/strategies/indicators/metadata/
├── _template.md          # JSON 模板说明
├── rsi.json
├── macd.json
├── bollinger_bands.json
├── sma.json
├── ema.json
├── atr.json
├── stoch.json
├── obv.json
├── vwap.json
└── adx.json

添加新指标

  1. metadata/ 目录下创建新的 JSON 文件
  2. 参考 _template.md 填写指标信息
  3. 指标会自动被 API 发现并返回

JSON 文件结构

{
  "id": "indicator_id",
  "name": "INDICATOR",
  "display_name": "指标中文名",
  "english_name": "English Name",
  "category": "momentum|trend|volatility|volume",
  "description": "详细描述...",
  "parameters": [
    {
      "name": "length",
      "type": "int",
      "default": 14,
      "min": 2,
      "max": 100,
      "description": "参数描述"
    }
  ],
  "pandas_ta": {
    "function": "ta.indicator(...)",
    "returns": "pd.Series|pd.DataFrame",
    "example": "df.ta.indicator(length=14)"
  },
  "interpretation": {
    "signal_type": "信号解读说明"
  }
}

前端技术指标页面

访问 /strategies/analysis 可以浏览和搜索所有技术指标:


相关文档

核心规范(必读)

架构文档

具体策略文档

所有策略均基于 pandas-ta 库实现,确保指标计算准确可靠

动量策略 (Momentum)

趋势策略 (Trend)

波动率策略 (Volatility)

成交量策略 (Volume)