affcfa0c72
**主要调整:** 1. 重命名将军工作区目录: - data-engineering → zhaoyun-data (赵云数据工程) - risk-management → guanyu-risk (关羽风控管理) - platform → jiangwei-platform (姜维平台) - technical-strategy → zhangfei-technical (张飞技术策略) 2. 创建新目录: - archive/ (归档目录) - simayi-quality/ (司马懿质量保证) - pangtong-value/ (庞统价值投资) 3. 移动内容: - value-investing → pangtong-value/research (庞统价值投资) - running_data → zhaoyun-data/data (运行数据) - 文件任务管理系统文档 → archive/file-task-system 4. 清理文件: - 删除所有日志文件 - 删除agent脚本 - 删除knowledge-base (使用统一知识库) 5. 创建标准结构: - 各将军目录下创建research/, scripts/, reports/, references/子目录 6. 更新.gitignore: - 排除日志文件和临时文件 **依据:** management/workflow-rules.md **制定:** 庞统(凤雏) **审核:** 诸葛亮
109 lines
3.1 KiB
Plaintext
109 lines
3.1 KiB
Plaintext
标题: 高效使用聚宽回测平台的技巧
|
||
链接: https://www.joinquant.com/view/community/detail/1
|
||
分类: 回测
|
||
================================================================================
|
||
|
||
# 高效使用聚宽回测平台的技巧
|
||
|
||
## 一、回测参数设置策略
|
||
|
||
### 1.1 分阶段设置回测参数
|
||
|
||
**策略开发初期**:
|
||
- 时间范围:1-2年历史数据
|
||
- 频率:日频数据
|
||
- 股票池:较小范围(如沪深300成分股)
|
||
- 目的:快速验证策略逻辑,缩短迭代周期
|
||
|
||
**策略验证阶段**:
|
||
- 时间范围:3-5年历史数据
|
||
- 频率:分钟级数据(如需要)
|
||
- 股票池:较大范围(如全市场)
|
||
- 目的:全面验证策略表现和稳健性
|
||
|
||
**实战演练阶段**:
|
||
- 时间范围:最近1年
|
||
- 频率:Tick级数据(高频策略)
|
||
- 股票池:目标交易标的
|
||
- 目的:模拟真实交易环境
|
||
|
||
## 二、数据获取优化
|
||
|
||
### 2.1 利用数据缓存机制
|
||
|
||
聚宽平台提供了多种数据缓存方式:
|
||
|
||
```python
|
||
# 示例:将常用数据缓存在全局变量中
|
||
from jqdata import *
|
||
|
||
def initialize(context):
|
||
# 初始化时预加载常用数据
|
||
g.stock_pool = get_index_stocks('000300.XSHG')
|
||
g.historical_data = get_price(g.stock_pool, count=250, end_date=context.previous_date)
|
||
```
|
||
|
||
### 2.2 批量获取数据
|
||
|
||
避免在循环中重复调用数据API:
|
||
|
||
```python
|
||
# 低效方式
|
||
def handle_data(context, data):
|
||
for stock in context.portfolio.positions:
|
||
# 在循环中逐个获取数据
|
||
price = data[stock].close
|
||
|
||
# 高效方式
|
||
def before_trading_start(context, data):
|
||
# 批量获取所有需要的数据
|
||
stocks = list(context.portfolio.positions.keys())
|
||
g.prices = get_price(stocks, count=1, end_date=context.previous_date)
|
||
|
||
def handle_data(context, data):
|
||
# 直接使用已获取的数据
|
||
for stock in context.portfolio.positions:
|
||
price = g.prices[stock]['close'][0]
|
||
```
|
||
|
||
## 三、回测效率提升
|
||
|
||
### 3.1 使用历史回放功能
|
||
|
||
在策略逻辑验证阶段,可以使用历史回放功能:
|
||
|
||
- 快速定位问题时间点
|
||
- 查看策略在特定行情下的表现
|
||
- 避免每次修改都重新运行完整回测
|
||
|
||
### 3.2 合理使用history函数
|
||
|
||
```python
|
||
# 推荐用法
|
||
def before_trading_start(context, data):
|
||
# 一次性获取足够的历史数据
|
||
g.hist = history(60, '1d', 'close', g.stock_pool)
|
||
|
||
def handle_data(context, data):
|
||
# 使用已缓存的历史数据计算指标
|
||
for stock in g.stock_pool:
|
||
ma20 = g.hist[stock][-20:].mean()
|
||
ma60 = g.hist[stock].mean()
|
||
```
|
||
|
||
## 四、实践案例分享
|
||
|
||
某量化团队通过以下优化,将回测速度提升了5倍:
|
||
|
||
1. 将数据获取从handle_data移到before_trading_start
|
||
2. 使用批量数据获取替代循环内的单个获取
|
||
3. 合理设置回测频率,开发阶段用日频,验证阶段用分钟级
|
||
4. 利用聚宽的数据缓存机制,避免重复计算
|
||
|
||
**优化前**:完整回测需要30分钟
|
||
**优化后**:相同回测仅需6分钟
|
||
|
||
---
|
||
|
||
**总结**:高效使用聚宽回测平台的关键是"分层优化"——在不同阶段使用不同的回测策略,结合数据缓存和批量获取,可以显著提升回测效率。
|