聚宽(JoinQuant)策略回测代码生成框架。基于六段式骨架模板,支持截面多因子选股、时序技术指标择时两种模式,使用聚宽原生API获取数据,自动生成可直接在聚宽平台运行的回测代码。
Coding
cortex-backtest
Try itCortex 量化策略回测引擎。聚宽风格策略代码,支持日线回测,与聚宽平台完全对齐。触发场景:用户提及 Cortex 回测、策略回测、聚宽风格策略、回测引擎、量化策略开发、策略验证、Cortex 首次设置、Cortex 配置。
What it does
Cortex 量化策略回测引擎。聚宽风格策略代码,支持日线回测,与聚宽平台完全对齐。触发场景:用户提及 Cortex 回测、策略回测、聚宽风格策略、回测引擎、量化策略开发、策略验证、Cortex 首次设置、Cortex 配置。
The skill document
Cortex Backtest
Cortex 是多市场量化策略回测与仿真引擎,采用聚宽风格策略代码,支持日线级别回测,与聚宽平台完全对齐。
⚠️ 使用前必读
每次使用本技能前,必须先查阅经验文档!
经验文档记录了之前使用过程中遇到的问题和解决方案,避免重复踩坑。
查阅路径:references/cortex-experience.md
经验分类:
- 编号 < 100:系统预置经验(技能自带,经过验证的常见问题)
- 编号 ≥ 100:使用收集经验(实际使用中发现的新问题,使用后追加)
使用后追加规则:发现新问题时,从编号100开始递增追加到经验文档末尾。
去重管理规则:如果有新增系统预置经验,检查用户收集经验中是否有相同或相似的,如有则直接删除,序号可回收再用。
首次设置向导(重要!)
使用本技能前,必须先完成场景配置!
步骤 1:检查 TOOLS.md 场景配置
读取 /TOOLS.md,检查是否已配置 Cortex 场景:
- 已配置场景 1/2/3 → 跳转到步骤 2
- 未配置或配置不完整 → 询问用户选择场景
步骤 2:验证配置文件和目录存在
根据 TOOLS.md 中登记的场景,检查对应的配置文件和目录:
| 场景 | 检查路径(绝对路径示例) |
|---|---|
| 场景 1 | /opt/cirt/etc/cortex.conf |
| 场景 2 | /cortex_data/cortex_cli.conf |
| 场景 3 | /cortex_data/cortex_cli.conf |
场景 3 说明:
- 租户目录位置由智能体(Agent)安排
- 方案 A(私域管理):
/user1/(内含cortex_data/子目录) - 方案 B(工作区统一管理):
/.cortex/user1/(直接使用,不含cortex_data子目录) - 具体路径需在 TOOLS.md 中明确登记
占位符说明:
- `` - 智能体工作目录(如
/home/allwin21/.openclaw/workspace) - `` - 租户工作目录(由智能体安排,可在私域中)
检查结果处理:
- 文件存在 → 配置完成,可正常使用
- 文件不存在 → 引导用户建立(见下方"引导建立流程")
步骤 3:询问用户选择场景(如未配置)
询问模板:
检测到 Cortex 回测引擎尚未配置运行场景。
Cortex 支持三种配置场景,请根据您的使用需求选择:
【场景 1】系统配置
- 配置文件位置:/opt/cirt/etc/cortex.conf
- 适用场景:服务器部署、多智能体共享同一配置
- 特点:全局共享,配置集中管理
【场景 2】智能体独立配置
- 配置文件位置:/cortex_data/cortex_cli.conf
- 适用场景:单个智能体独立工作,数据隔离
- 特点:工作空间内自包含,便于迁移
【场景 3】智能体多租户配置(推荐)
- 配置文件位置:/cortex_data/cortex_cli.conf
- 适用场景:多用户/多账户,完全隔离
- 特点:每个租户独立目录,数据完全隔离
- 注意:租户目录位置由智能体安排,可在私域中管理
请回复数字 1、2 或 3 选择场景。
如选择场景 3,请指定租户目录位置(如私域路径或工作区路径):
- 示例 1(私域):/user1/
- 示例 2(私域):/user2/
- 示例 3(工作区统一管理):/.cortex/user3/
占位符说明:
- - 智能体工作目录
- - 租户工作目录(由智能体安排,可在私域中)
**注意:** 方案 B(工作区统一管理)直接使用 `/.cortex/userN/` 作为租户目录,不再包含 `cortex_data` 子目录
步骤 4:引导建立流程(配置文件不存在时)
根据用户选择的场景,执行以下建立流程:
场景 1 建立流程
# 1. 检查系统目录权限
ls -la /opt/cirt/etc/
# 2. 如无法写入系统目录,提示用户:
"场景 1 需要写入 /opt/cirt/etc/ 目录,当前权限不足。
建议:使用场景 2 或 3(无需系统权限),或手动创建配置文件。"
# 3. 如能写入,创建配置文件
sudo cp /opt/cirt/etc/cortex.conf.default /opt/cirt/etc/cortex.conf
# 4. 更新 TOOLS.md 登记
场景 2 建立流程
工作目录结构:
/cortex_data/
├── cortex_cli.conf # 配置文件
├── strategies/ # 策略文件夹
│ └── double_ma.py
├── backtest/ # 回测输出
│ ├── index.json # 回测索引
│ ├── double_ma-001/ # 回测结果(序号递增)
│ │ ├── strategy.py # 策略代码副本
│ │ ├── summary.json # 回测摘要
│ │ ├── account.csv # 账户每日状态
│ │ ├── positions.csv # 持仓每日明细
│ │ ├── orders.json # 订单记录
│ │ └── run.log # 运行日志
│ └── double_ma-002/ # 第2次回测
└── logs/ # 日志目录
# 1. 创建目录结构
mkdir -p /cortex_data/{strategies,backtest,logs}
# 2. 创建配置文件
cat > /cortex_data/cortex_cli.conf << 'EOF'
[main]
data_dir = .
adapter = pyqdt
log_level = INFO
log_file = logs/cortex.log
[strategies]
initial_cash = 1000000
fq = post
mode = loose
[pyqdt]
data_path = /data/QuantData/pyqdt_csv
EOF
# 3. 更新 TOOLS.md 登记
场景 3 建立流程
说明: 租户目录位置由智能体(Agent)安排,可在私域中管理
工作目录结构(示例):
# 方案 A:私域管理(推荐)
/user1/cortex_data/
/user2/cortex_data/
/user3/cortex_data/
# 方案 B:工作区统一管理(注意:直接使用,不含 cortex_data 子目录)
/.cortex/user1/
/.cortex/user2/
# 方案 A 租户目录内部结构(私域管理)
/cortex_data/
├── cortex_cli.conf # 租户配置文件
├── strategies/ # 租户策略文件夹
│ └── my_strategy.py
├── backtest/ # 租户回测输出
│ ├── index.json
│ └── my_strategy-001/
│ ├── strategy.py # 策略代码副本
│ ├── summary.json # 回测摘要
│ ├── account.csv # 账户每日状态
│ ├── positions.csv # 持仓每日明细
│ ├── orders.json # 订单记录
│ └── run.log # 运行日志
└── logs/ # 租户日志目录
# 方案 B 租户目录内部结构(工作区统一管理)
/
├── cortex_cli.conf # 租户配置文件
├── strategies/ # 租户策略文件夹
├── backtest/ # 租户回测输出
└── logs/ # 租户日志目录
# 1. 询问租户目录位置
"请指定租户目录位置(由智能体安排):"
"示例 1(私域方案 A):/user1"
"示例 2(私域方案 A):/user2"
"示例 3(工作区方案 B):/.cortex/user3"
# 2. 创建租户目录结构(使用绝对路径)
# 方案 A(私域管理):
mkdir -p /cortex_data/{strategies,backtest,logs}
# 方案 B(工作区统一管理):
mkdir -p /{strategies,backtest,logs}
# 3. 创建租户配置文件
# 方案 A(私域管理):
cat > /cortex_data/cortex_cli.conf << 'EOF'
[main]
data_dir = .
adapter = pyqdt
log_level = INFO
log_file = logs/cortex.log
[strategies]
initial_cash = 1000000
fq = post
mode = loose
[pyqdt]
data_path = /data/QuantData/pyqdt_csv
EOF
# 方案 B(工作区统一管理):
cat > /cortex_cli.conf << 'EOF'
[main]
data_dir = .
adapter = pyqdt
log_level = INFO
log_file = logs/cortex.log
[strategies]
initial_cash = 1000000
fq = post
mode = loose
[pyqdt]
data_path = /data/QuantData/pyqdt_csv
EOF
# 4. 更新 TOOLS.md 登记(记录实际使用的租户目录)
步骤 5:更新 TOOLS.md 登记
配置完成后,必须在 TOOLS.md 中登记:
## Cortex 回测引擎
### 场景模式
**当前使用:场景 X(场景名称)**
### 安装位置
| 项目 | 路径 |
|------|------|
| CLI 工具 | `/opt/cirt/bin/cortex_cli.py` |
| Python 库 | `/opt/cirt/lib/cortex/` |
### 配置信息
[根据场景填写具体路径]
### 使用方法
[根据场景填写使用命令]
使用流程图
用户触发技能
↓
查阅经验文档 (references/cortex-experience.md) ← ⚠️ 必读!
↓
读取 TOOLS.md 检查场景配置
↓
├─ 已配置场景 ──→ 检查配置文件是否存在
│ ↓
│ ├─ 存在 ──→ 正常使用
│ └─ 不存在 ──→ 引导建立流程
│
└─ 未配置场景 ──→ 询问用户选择场景(1/2/3)
↓
用户选择场景 ──→ 执行建立流程
↓
更新 TOOLS.md 登记
↓
配置完成,正常使用
↓
使用完成后,发现新问题追加到经验文档
文档索引
| 文档 | 说明 | 何时使用 |
|---|---|---|
| references/cortex-experience.md | ⚠️ 使用经验文档 - 系统预置经验(编号<100) + 使用收集经验(编号≥100) | 每次使用前必读 |
| references/cortex-api-reference.md | 策略代码 API - 回调函数、下单函数、数据函数、与聚宽差异 | 编写策略代码或检查 API 兼容性 |
| references/cortex-cli-usage.md | CLI 使用方法 - 命令参数、配置文件、回测输出 | 运行回测或调试 CLI |
重要:经验编号<100为系统预置,编号≥100为使用收集。每次使用前先查阅,使用后发现新问题从100开始追加。
注意: 首次设置向导已合并到本 SKILL.md 文档中,无需单独查阅 setup-guide.md
策略执行模式说明
Cortex CLI 支持两种策略指定方式:
模式 1:strategy_id 模式(推荐)
使用条件:
- 策略文件必须放在
/strategies/目录下 - `` 由配置文件中的
data_dir参数指定 - 策略文件名格式:
.py
命令格式:
python /opt/cirt/bin/cortex_cli.py backtest \
--strategy \
--start-date 20260101 \
--end-date 20260331 \
--initial-cash 1000000
示例:
# 策略文件位置:/strategies/double_ma.py
python /opt/cirt/bin/cortex_cli.py backtest \
--strategy double_ma \
--start-date 20260101 \
--end-date 20260331
模式 2:绝对路径模式
使用条件:
- 策略文件可以放在任意位置
- 使用策略文件的绝对路径
命令格式:
python /opt/cirt/bin/cortex_cli.py backtest \
--strategy /absolute/path/to/strategy.py \
--start-date 20260101 \
--end-date 20260331 \
--initial-cash 1000000
示例:
python /opt/cirt/bin/cortex_cli.py backtest \
--strategy /home/user/strategies/my_strategy.py \
--start-date 20260101 \
--end-date 20260331
data_dir 与策略目录的关系
/ # 由 data_dir 配置指定
├── cortex_cli.conf # 配置文件
├── strategies/ # 策略目录(strategy_id 模式必须)
│ ├── double_ma.py
│ └── ma5_strategy.py
└── backtest/ # 回测输出目录
└── -001/
重要:
data_dir = .表示配置文件所在目录为数据目录- 策略文件放在
/strategies/下时,可使用 strategy_id 模式 - 策略文件放在其他位置时,必须使用绝对路径模式
Quick Start
# 回测示例(strategy_id 模式)
python /opt/cirt/bin/cortex_cli.py backtest \
--config /cortex_data/cortex_cli.conf \
--strategy ma5_strategy \
--start-date 20250701 \
--end-date 20260331 \
--period daily \
--mode loose \
--initial-cash 1000000
回测输出位置: /backtest/-001/
输出文件:
account.csv- 账户每日状态positions.csv- 持仓每日明细summary.json- 回测摘要run.log- 策略运行日志
回测结果回显报告格式
回测完成后,按以下格式回显报告:
📊 回测结果报告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
策略名称:
回测区间: ~
回测频率: (daily/min)
撮合模式: (loose/strict)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 收益统计
------------------------------------------------------------
初始资金:
最终市值:
总收益率: %
年化收益率: %
最大回撤: %
夏普比率:
------------------------------------------------------------
📝 交易统计
------------------------------------------------------------
交易次数:
盈利次数:
亏损次数:
胜率: %
平均盈利:
平均亏损:
盈亏比:
------------------------------------------------------------
📂 输出位置
------------------------------------------------------------
/backtest/-001/
├── account.csv (账户每日状态)
├── positions.csv (持仓每日明细)
├── summary.json (回测摘要数据)
└── run.log (策略运行日志)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
数据来源: summary.json
聚宽兼容策略格式
Cortex 策略代码采用聚宽兼容格式,支持聚宽风格的对象和方法。
详细 API 参考: references/cortex-api-reference.md
支持的 API 类别:
- 策略回调函数(initialize / handle_data / after_trading_end)
- 策略设置函数(set_benchmark / set_option / set_order_cost)
- 数据获取函数(get_price / get_bars)
- 下单函数(order_target_value / order_shares)
- Context / Portfolio / Position 对象
- 全局变量 g / log
使用引导流程
当用户发起回测请求时,遵循以下引导原则:
第一步:策略描述与决策点分析
当用户提供策略描述时,按以下流程引导:
- 分析策略原理 - 理解用户描述的策略逻辑
- 识别决策点 - 找出需要用户明确的关键决策
- 逐项询问决策点 - 不假设,让用户选择
常见决策点清单:
| 决策点 | 问题示例 | 常见选项 |
|---|---|---|
| 标的池 | 回测哪些股票? | 全A股/沪深300/中证500/自定义股票池 |
| 信号生成 | 信号如何触发? | 指标交叉/阈值突破/多因子组合 |
| 仓位管理 | 如何分配仓位? | 等权/市值加权/风险平价 |
| 择时逻辑 | 是否择时? | 满仓/择时减仓/动态调整 |
| 止损止盈 | 是否设置止损止盈? | 有/无,具体阈值 |
| 调仓频率 | 多久调仓一次? | 日度/周度/月度/信号触发 |
| 过滤条件 | 哪些股票不买? | ST/停牌/涨跌停/新股 |
引导示例:
用户: "我想做一个双均线策略"
Agent: "理解您的策略思路,以下是需要明确的决策点:
1. **标的池**:回测哪些股票?
- 全A股
- 沪深300成分股
- 中证500成分股
- 其他股票池(请说明)
2. **均线参数**:使用哪两条均线?
- MA5/MA20(短线)
- MA10/MA60(中线)
- 自定义参数(请说明)
3. **信号逻辑**:
- 金叉买入、死叉卖出(标准)
- 其他逻辑(请说明)
4. **仓位管理**:
- 单只股票仓位:等权/按市值加权
- 最大持仓数量:不限/固定数量(请说明)
5. **调仓频率**:
- 每日检查信号
- 每周调仓
- 其他频率(请说明)
6. **过滤条件**:
- 是否排除ST、停牌、涨跌停股票?
- 是否排除新股(上市不足N天)?
请逐项确认或补充您的选择。"
第二步:标的域确认
| 标的域类型 | 说明 | 数据来源 |
|---|---|---|
| 全A股 | 沪深两市所有股票 | get_all_securities() |
| 沪深300 | 沪深300指数成分股 | get_index_stocks('000300.XSHG') |
| 中证500 | 中证500指数成分股 | get_index_stocks('000905.XSHG') |
| 中证1000 | 中证1000指数成分股 | get_index_strokes('000852.XSHG') |
| 股票池文件 | 用户自定义股票列表 | 从文件读取 |
| 基金 | 场内基金/ETF | 需确认代码范围 |
| 债券 | 可转债等 | 需确认代码范围 |
询问示例:
请确认回测标的域:
1. 全A股
2. 沪深300成分股
3. 中证500成分股
4. 中证1000成分股
5. 自定义股票池(请提供文件路径或股票列表)
第三步:聚宽兼容性确认
询问用户:
策略代码是否需要完全兼容聚宽平台?
1. **完全兼容** - 代码可直接复制到聚宽平台运行
- 使用聚宽标准API
- 遵守聚宽代码规范
- 注意:Cortex与聚宽存在少量差异
2. **仅Cortex运行** - 仅在Cortex引擎运行,无需聚宽兼容
- 可使用Cortex特有功能
- 不考虑聚宽兼容性
请选择兼容性要求。
Cortex与聚宽主要差异提醒:
| 功能 | 聚宽 | Cortex | 影响 |
|---|---|---|---|
handle_data | 每日推送bar数据 | 不触发,需用run_daily | ⚠️ 代码结构需调整 |
context.portfolio.total_assets | ✅ 支持 | ❌ 不支持 | 用 total_value 替代 |
| 分钟级回测 | ✅ 支持 | ⚠️ 效率极低 | 建议用Python版 |
| 复权默认值 | 前复权 | 后复权 | 需显式设置 |
第四步:必需参数检查
| 参数 | 说明 | 引导提示 |
|---|---|---|
--strategy | 策略名称或路径 | "请提供策略文件路径或策略名称" |
--start-date | 开始日期 | "请提供开始日期(格式 YYYYMMDD)" |
--end-date | 结束日期 | "请提供结束日期(格式 YYYYMMDD)" |
--period | 回测频率 | daily(日线)或 min(分钟线) |
--mode | 撮合模式 | loose(宽松)或 strict(严谨) |
⚠️ 引导原则
- 询问时提供参考值 - 附带推测值或配置文件默认值,方便用户决策
- 不要随意替用户设置参数 - 特别是资金、日期范围、策略参数
- 缺少必需参数时,询问用户 - 提供清晰问题 + 参考值
- 可选参数有默认值 - 从配置文件读取,无需每次询问
- 策略代码细节不完整 - 引导用户提供策略文件或明确需求
- 决策点必须询问 - 不假设用户的策略细节,逐项确认
完整引导示例
❌ 错误做法:
用户: "回测一个双均线策略"
Agent: 直接运行回测,使用默认日期和资金... # ❌ 随意替用户决定
✅ 正确做法:
用户: "回测一个双均线策略"
Agent: "理解您的需求,让我逐步确认策略细节:
**第一步:策略描述分析**
双均线策略的核心逻辑是:短期均线上穿长期均线买入,下穿卖出。
需要确认的决策点:
1. **标的域**:
- 全A股
- 沪深300成分股
- 中证500成分股
- 中证1000成分股
- 自定义股票池
2. **均线参数**:
- MA5/MA20(短线)
- MA10/MA60(中线)
- 自定义(请说明)
3. **仓位管理**:
- 单只股票仓位上限
- 最大持仓数量
- 是否等权分配
4. **调仓频率**:每日/每周/信号触发?
5. **过滤条件**:是否排除ST/停牌/涨跌停?
**第二步:聚宽兼容性**
策略代码是否需要完全兼容聚宽平台?
- 完全兼容(可复制到聚宽运行)
- 仅Cortex运行
**第三步:回测参数**
- 开始日期(格式:YYYYMMDD)
- 结束日期(格式:YYYYMMDD)
- 回测频率(daily 日线 | min 分钟线)
- 撮合模式(loose 宽松 | strict 严谨)
- 初始资金(参考:1000000)
请逐项确认或补充您的选择。"
策略代码示例
def initialize(context):
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
set_order_cost(OrderCost(
close_tax=0.001,
open_commission=0.0003,
close_commission=0.0003,
min_commission=5
), type='stock')
g.stock = '000001.XSHE'
run_daily(rebalance, time='open')
def rebalance(context):
prices = get_price(g.stock, count=20)
ma5 = prices['close'].tail(5).mean()
ma20 = prices['close'].tail(20).mean()
if ma5 > ma20:
order_target_value(g.stock, context.portfolio.total_assets * 0.8)
else:
order_target_value(g.stock, 0)
def after_trading_end(context):
log.info(f"总资产: {context.portfolio.total_assets:.2f}")
⚠️ 与聚宽差异
| 功能 | 聚宽 | Cortex | 说明 |
|---|---|---|---|
| 驱动模式 | 数据推送 | 数据+时间双重驱动 | handle_data 不附带 bar 数据 |
| 默认复权 | 前复权 (pre) | 后复权 (post) | 未设置 use_real_price 时 |
| 撮合模式 | 宽松 | 宽松 + 严谨双模式 | 支持 strict 模式 |
| 数据源 | 聚宽内部 | pyqdt 本地数据 | 数据来源不同 |
详细差异说明见 references/cortex-api-reference.md
配置文件位置
| 文件 | 说明 |
|---|---|
/etc/cortex.conf | 统一配置文件(推荐) |
/etc/cortex_cli.conf | CLI 专用配置(兼容) |
/bin/cortex_cli.conf | 脚本目录配置 |
/etc/cortex.conf | 系统配置 |
配置查找顺序: /etc/ → /etc/
详细配置指南见 首次设置向导 章节
Related skills
量化交易与期货策略解读助手。触发词:量化策略、回测、期货策略、双均线、海龟交易法则、均值回归、布林带、动量突破、跨期套利、配对交易、统计套利、策略参数、文献解读、英文论文策略复现。把英文量化/期货文献中的策略思想转化为中文解读 + 可运行回测模板(Python/pandas)+ 参数说明 + 文献出处,并调用「数据查询 MCP」取真实行情回测。
小果量化回测系统助手 (微信:xg_quant)。基于业界领先的Backtrader回测框架,提供从数据加载、策略开发、回测执行到绩效分析的全流程量化交易解决方案。 支持多品种(股票、期货、外汇、加密货币)、多周期(Tick, 秒, 分钟, 日, 周, 月)、多策略回测与参数优化。 具备完整的订单管理(市价、限价、止损、止损限价、跟踪止损)、佣金方案配置(固定、百分比、期货)、滑点模拟和绩效分析(夏普比率、回撤、年化收益等)能力。 作者:小果 (xg_quant),联系方式:微信 xg_quant。 触发关键词:小果、xg_quant、回测系统、量化回测、Backtrader、策略开发、策略回
股票深度回测(Stock Deep Backtest)技能 —— 基于 QuantAll(全A解析)MCP, 对"已回测的策略"做深度诊断:策略为什么有效/失效、最终在哪儿赚钱、能否用入场因子筛选改善。 三层能力:① 四个回测视角(summary 成绩单 / detail 横截面 / segments 持仓片段 / timeline 时序净值); ② 原生分组(行业/市值/交易所/时间 + 热力图);③ 因子筛选改善(单/双/多因子 → 片段收益对比)。 固定调用指令已固化为 tasks/*.json,run_task_file 可直接执行;深度分析由 scripts/ 脚本完成; 一键完整链
回测分析工具。从交易记录CSV计算回测核心指标: 胜率、盈亏比、最大回撤、夏普比率、获利因子、 最佳/最差单笔交易。支持JSON报告导出。 Use when: 需要评估交易策略表现、分析回测结果、 计算策略风险指标、对比不同策略。 🎉 v1.0.0 指标: - 总交易数 / 盈利交易 / 亏损交易 - 胜率 / 盈亏比 / 获利因子 - 总收益率 / 平均每笔收益 - 最大回撤 / 夏普比率 - 最佳/最差单笔交易 触发关键词:回测分析、策略评估、量化交易、交易统计 适用范围:CSV 交易记录 运行模式:纯本地
Run long-only backtests on daily stock OHLCV CSVs and get standardized performance metrics plus a trade log.