rqalpha

star 90

RQAlpha 米筐开源事件驱动回测框架。支持A股和期货,模块化架构,可自由扩展;当用户需要快速回测A股/期货策略、使用内置数据(download-bundle)、开发Mod插件,或提及 rqalpha、米筐时使用。与 backtrader 相比,rqalpha 内置A股日线数据、安装更简便,适合快速验证;backtrader 更灵活、社区更大。若用户仅需数据获取而无回测需求,引导使用 baostock/akshare/tushare 等数据 Skill。

lzwme By lzwme schedule Updated 6/8/2026

name: rqalpha description: RQAlpha 米筐开源事件驱动回测框架。支持A股和期货,模块化架构,可自由扩展;当用户需要快速回测A股/期货策略、使用内置数据(download-bundle)、开发Mod插件,或提及 rqalpha、米筐时使用。与 backtrader 相比,rqalpha 内置A股日线数据、安装更简便,适合快速验证;backtrader 更灵活、社区更大。若用户仅需数据获取而无回测需求,引导使用 baostock/akshare/tushare 等数据 Skill。 metadata: {"openclaw":{"emoji":"📈","requires":{"bins":["python3"]}}}

RQAlpha(米筐开源回测框架)

RQAlpha米筐科技 开发的开源事件驱动回测框架。提供A股和期货市场的策略开发、回测和模拟交易完整解决方案。高度模块化,支持插件(Mod)系统扩展。

文档:https://rqalpha.readthedocs.io

安装

pip install rqalpha

# 下载内置数据包(A股日线数据)
rqalpha download-bundle

# 验证安装
python -c "import rqalpha; print(rqalpha.__version__)"

策略结构

from rqalpha.api import *  # 导入所有 API 函数(含 logger)

def init(context):
    """策略启动时调用一次 — 设置订阅和参数"""
    context.stock = '000001.XSHE'
    context.fired = False

def handle_bar(context, bar_dict):
    """每根K线调用 — 主要交易逻辑"""
    if not context.fired:
        order_shares(context.stock, 1000)
        context.fired = True
        logger.info('买入完成')  # logger 通过 from rqalpha.api import * 自动可用

def before_trading(context):
    """每个交易日开盘前调用"""
    pass

def after_trading(context):
    """每个交易日收盘后调用"""
    pass

注意from rqalpha.api import * 会自动导入 logger,可直接使用 logger.info()logger.warn()logger.error() 输出日志。

运行回测

命令行

rqalpha run \
    -f strategy.py \
    -s 2024-01-01 \
    -e 2024-06-30 \
    --account stock 100000 \
    --benchmark 000300.XSHG \
    --plot

Python API

from rqalpha.api import *
from rqalpha import run_func

config = {
    "base": {
        "start_date": "2024-01-01",
        "end_date": "2024-06-30",
        "accounts": {"stock": 100000},
        "benchmark": "000300.XSHG",
        "frequency": "1d",
    },
    "extra": {
        "log_level": "warning",
    },
    "mod": {
        "sys_analyser": {"enabled": True, "plot": True},
    },
}

result = run_func(init=init, handle_bar=handle_bar, config=config)
print(result)

代码格式

市场 后缀 示例
上海A股 .XSHG 600000.XSHG(浦发银行)
深圳A股 .XSHE 000001.XSHE(平安银行)
指数 .XSHG/.XSHE 000300.XSHG(沪深300)
期货 .XSGE/.XDCE/.XZCE/.CCFX IF2401.CCFX(沪深300期货)

下单函数

股票下单

# 按股数买卖
order_shares('000001.XSHE', 1000)       # 买入1000股
order_shares('000001.XSHE', -500)       # 卖出500股

# 按手买入(1手=100股)
order_lots('000001.XSHE', 10)           # 买入10手(1000股)

# 按金额买入
order_value('000001.XSHE', 50000)       # 买入5万元

# 按组合比例买入
order_percent('000001.XSHE', 0.5)       # 买入组合值50%的仓位

# 目标仓位
order_target_value('000001.XSHE', 100000)   # 调整到10万元
order_target_percent('000001.XSHE', 0.3)    # 调整到组合的30%

# 撤单
cancel_order(order_id)

期货下单

# 开仓
buy_open('IF2401.CCFX', 1)              # 买入开多1手
sell_open('IF2401.CCFX', 1)             # 卖出开空1手

# 平仓
sell_close('IF2401.CCFX', 1)            # 卖出平多1手
buy_close('IF2401.CCFX', 1)             # 买入平空1手

数据查询函数

def handle_bar(context, bar_dict):
    # 当前K线数据
    bar = bar_dict['000001.XSHE']
    price = bar.close
    volume = bar.volume
    dt = bar.datetime

    # 历史数据(返回DataFrame)
    prices = history_bars('000001.XSHE', bar_count=20, frequency='1d',
                          fields=['close', 'volume', 'open', 'high', 'low'])

    # 检查股票是否可交易
    tradable = is_valid_price(bar.close)

    # 检查是否停牌
    suspended = is_suspended('000001.XSHE')

投资组合与持仓

def handle_bar(context, bar_dict):
    # 组合信息
    cash = context.portfolio.cash                    # 可用资金
    total = context.portfolio.total_value            # 总资产
    market_value = context.portfolio.market_value    # 持仓市值
    pnl = context.portfolio.pnl                      # 总盈亏
    returns = context.portfolio.daily_returns        # 日收益率

    # 持仓信息
    positions = context.portfolio.positions
    for stock, pos in positions.items():
        print(f'{stock}: quantity={pos.quantity}, '
              f'sellable={pos.sellable}, '
              f'avg_price={pos.avg_price:.2f}, '
              f'market_value={pos.market_value:.2f}, '
              f'pnl={pos.pnl:.2f}')

定时调度

from rqalpha.api import *

def init(context):
    # 每个交易日指定时间运行函数
    scheduler.run_daily(rebalance, time_rule=market_open(minute=5))
    # 每周运行(每周一)
    scheduler.run_weekly(weekly_task, tradingday=1, time_rule=market_open(minute=5))
    # 每月运行(首个交易日)
    scheduler.run_monthly(monthly_task, tradingday=1, time_rule=market_open(minute=5))

def rebalance(context, bar_dict):
    pass

Mod系统(插件)

RQAlpha的模块化架构允许通过Mod扩展功能:

config = {
    "mod": {
        "sys_analyser": {
            "enabled": True,
            "plot": True,
            "benchmark": "000300.XSHG",
        },
        "sys_simulation": {
            "enabled": True,
            "matching_type": "current_bar",    # 撮合方式:current_bar(当前Bar)或 next_bar(下一Bar)
            "slippage": 0.01,                  # 滑点(元)
        },
        "sys_transaction_cost": {
            "enabled": True,
            "commission_rate": 0.0003,         # 手续费率
            "tax_rate": 0.001,                 # 印花税(仅卖出)
            "min_commission": 5,               # 最低手续费
        },
    },
}

可用内置Mod

Mod 说明
sys_analyser 绩效分析和图表绘制
sys_simulation 撮合模拟
sys_transaction_cost 手续费和税费计算
sys_accounts 账户管理
sys_benchmark 基准追踪
sys_progress 进度条显示
sys_risk 风险管理检查

进阶示例

更多完整策略示例(双均线、多股等权、RSI均值回归、止损止盈、期货CTA)见 references/advanced-strategies.md

绩效分析输出

运行回测后,sys_analyser Mod会输出以下指标:

指标 说明
total_returns 总收益率
annualized_returns 年化收益率
benchmark_total_returns 基准总收益率
alpha Alpha值
beta Beta值
sharpe 夏普比率
sortino Sortino比率
max_drawdown 最大回撤
tracking_error 跟踪误差
information_ratio 信息比率
volatility 波动率

常见错误处理

错误 原因 解决方法
Bundle not found 未下载数据包 运行 rqalpha download-bundle
Insufficient cash 可用资金不足 检查 context.portfolio.cash
Order Creation Failed: suspended 股票停牌 is_suspended() 提前检查
No data for instrument 股票代码错误 检查代码格式(如 .XSHG / .XSHE
logger 未定义 未导入 API 确保 from rqalpha.api import * 在文件顶部

使用技巧

  • RQAlpha 是纯本地框架,无云端依赖,适合离线研究。
  • 使用 rqalpha download-bundle 获取免费内置A股日线数据。
  • Mod 系统允许插入自定义数据源、券商接口和风控模块。
  • 实盘交易可通过 rqalpha-mod-vnpy 连接 vn.py 的券商网关。
  • 支持日线和分钟级回测。
  • 文档:https://rqalpha.readthedocs.io/

资源索引

  • references/advanced-strategies.md — 完整策略示例(双均线、多股等权、RSI均值回归、止损止盈、期货CTA)。需要参考进阶策略实现时读取。

规则

  • 使用此 Skill 前,确认用户明确需要 rqalpha 框架进行策略回测。若用户仅需数据获取,引导使用 baostock/pywencai 等数据 Skill。
  • 策略文件顶部必须包含 from rqalpha.api import *,以确保所有下单函数和 logger 可用。
  • 期货策略必须使用 buy_open/sell_open/buy_close/sell_close,不能使用股票的 order_shares 等函数。
  • 下单前应使用 is_suspended() 检查停牌状态,避免订单失败。
  • 股票代码必须带后缀(.XSHG/.XSHE/.CCFX 等),不能使用纯数字代码。
Install via CLI
npx skills add https://github.com/lzwme/finance-quant-skills --skill rqalpha
Repository Details
star Stars 90
call_split Forks 20
navigation Branch main
article Path SKILL.md
More from Creator