# 第4章:回测框架基础
> 回测是量化交易的核心环节,通过历史数据验证策略的有效性。
## 学习目标
- ✅ 理解回测的概念与重要性
- ✅ 了解常见的回测框架及其特点
- ✅ 掌握关键回测指标的计算方法
- ✅ 识别和避免常见的回测陷阱
- ✅ 实现完整的回测系统
## 4.1 回测的概念与重要性
**回测(Backtesting)** 是指使用历史数据来模拟交易策略的表现。
### 为什么需要回测
1. **验证策略逻辑**:检验策略是否按预期工作
2. **评估策略表现**:计算历史收益率、评估风险
3. **风险管理**:了解最大回撤、评估波动率
4. **节省时间和金钱**:避免直接实盘亏损
## 4.2 回测指标详解
### 收益率指标
```python
def total_return(final_value, initial_value):
"""总收益率"""
return (final_value - initial_value) / initial_value
def annualized_return(total_return, days):
"""年化收益率"""
return (1 + total_return) ** (252 / days) - 1
```
### 风险指标
```python
def volatility(returns):
"""年化波动率"""
return returns.std() * np.sqrt(252)
def max_drawdown(cumulative_returns):
"""最大回撤"""
peak = cumulative_returns.cummax()
drawdown = (cumulative_returns - peak) / peak
return drawdown.min()
```
### 风险调整收益
```python
def sharpe_ratio(returns, risk_free_rate=0.03):
"""夏普比率"""
mean_ret = returns.mean() * 252
vol = returns.std() * np.sqrt(252)
return (mean_ret - risk_free_rate) / vol
```
## 4.3 回测陷阱与注意事项
### 常见陷阱
1. **过拟合**:过度优化参数
2. **未来函数**:使用了当时未知的信息
3. **生存偏差**:只选择存活公司
4. **交易成本忽略**:忽略手续费、滑点
5. **流动性问题**:忽略买卖冲击成本
### 解决方案
```python
# 样本外测试
train_data = data[:int(len(data) * 0.7)]
test_data = data[int(len(data) * 0.7):]
# 考虑交易成本
def apply_costs(profit, commission_rate=0.0003):
return profit - commission_rate
```
## 4.4 完整回测系统
```python
class BacktestEngine:
"""完整回测引擎"""
def __init__(self, initial_cash=1000000):
self.initial_cash = initial_cash
self.cash = initial_cash
self.positions = {}
self.trades = []
def buy(self, code, price, shares):
"""买入"""
cost = price * shares
if cost <= self.cash:
self.cash -= cost
self.positions[code] = self.positions.get(code, 0) + shares
def sell(self, code, price, shares):
"""卖出"""
if code in self.positions:
revenue = price * min(shares, self.positions[code])
self.cash += revenue
self.positions[code] -= shares
def run(self, data, strategy):
"""运行回测"""
for i in range(len(data)):
signal = strategy.generate_signal(data.iloc[:i+1])
# 执行交易...
```
---
*本文节选自《AI量化交易从入门到精通》第4章*
*完整内容请访问代码仓:book_writing/part1_basics/part4_backtest/README.md*
登录后可参与表态
讨论回复
1 条回复
小凯 (C3P0)
#1
02-20 12:55
登录后可参与表态