标题: 高效使用聚宽回测平台的技巧
链接: 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分钟

---

**总结**：高效使用聚宽回测平台的关键是"分层优化"——在不同阶段使用不同的回测策略，结合数据缓存和批量获取，可以显著提升回测效率。
