股票策略回测技能
执行交易策略的历史数据回测,输出完整的绩效报告。
快速开始
当用户请求回测时,按以下流程执行:
- 确认数据来源 - Yahoo Finance、akshare(A股)、或用户提供的CSV
- 确认策略类型 - 默认提供几种常见策略,也支持自定义
- 运行回测 - 使用Python计算
- 输出报告 - 总收益、年化收益、最大回撤、夏普比率、胜率、交易次数
内置策略
1. SMA交叉策略
- 买入信号:短期均线上穿长期均线
- 卖出信号:短期均线下穿长期均线
- 默认参数:SMA20/SMA50
2. RSI均值回归策略
- 买入信号:RSI < 30(超卖)
- 卖出信号:RSI > 70(超买)
- 默认参数:RSI周期14
3. 突破策略
- 买入信号:收盘价突破N日最高价
- 卖出信号:收盘价跌破N日最低价
- 默认参数:20日突破
回测实现
使用Python编写回测脚本,依赖以下库:
yfinance- Yahoo Finance数据akshare- A股数据pandas- 数据处理numpy- 数值计算
数据格式要求
CSV文件需包含以下列:
date- 日期open- 开盘价high- 最高价low- 最低价close- 收盘价volume- 成交量
回测代码模板
import pandas as pd
import numpy as np
def backtest(df, strategy_func, initial_capital=100000, commission=0.001):
"""
运行回测
参数:
- df: OHLCV数据DataFrame
- strategy_func: 策略函数,返回买入/卖出信号
- initial_capital: 初始资金
- commission: 交易成本比例
返回:
- 交易日志
- 绩效指标
"""
df = df.copy()
df['signal'] = strategy_func(df)
df['position'] = df['signal'].shift(1).fillna(0)
df['returns'] = df['close'].pct_change()
df['strategy_returns'] = df['position'] * df['returns']
# 计算交易成本
trades = df['position'].diff().abs()
df['strategy_returns'] -= trades * commission
# 计算累计收益
df['cumulative_returns'] = (1 + df['strategy_returns']).cumprod()
# 计算绩效指标
total_return = df['cumulative_returns'].iloc[-1] - 1
years = (df['date'].iloc[-1] - df['date'].iloc[0]).days / 365
cagr = (1 + total_return) ** (1/years) - 1
# 最大回撤
cummax = df['cumulative_returns'].expanding().max()
drawdown = (df['cumulative_returns'] - cummax) / cummax
max_drawdown = drawdown.min()
# 夏普比率
risk_free_rate = 0.02
excess_returns = df['strategy_returns'] - risk_free_rate/252
sharpe = np.sqrt(252) * excess_returns.mean() / excess_returns.std()
# 胜率
trade_returns = df[df['position'].diff() != 0]['strategy_returns']
win_rate = (trade_returns > 0).sum() / len(trade_returns) if len(trade_returns) > 0 else 0
return {
'total_return': total_return,
'cagr': cagr,
'max_drawdown': max_drawdown,
'sharpe_ratio': sharpe,
'win_rate': win_rate,
'num_trades': trades.sum()
}
报告格式
# 策略回测报告
## 策略概述
- 策略名称:[策略名称]
- 回测区间:[开始日期] 至 [结束日期]
- 初始资金:¥[金额]
## 绩效指标
| 指标 | 数值 |
|------|------|
| 总收益率 | XX.XX% |
| 年化收益率(CAGR) | XX.XX% |
| 最大回撤 | XX.XX% |
| 夏普比率 | X.XX |
| 胜率 | XX.XX% |
| 交易次数 | XX |
## 交易日志
[列出主要交易记录]
## 分析总结
[对策略表现的评价和建议]
使用示例
用户: "帮我回测一下茅台的SMA策略"
执行步骤:
- 使用akshare获取茅台历史数据
- 计算SMA20和SMA50
- 生成买卖信号
- 运行回测
- 输出报告
注意事项
- 回测结果不代表未来表现
- 需考虑交易成本、滑点等现实因素
- 建议进行参数敏感性分析
- 注意数据质量和完整性
微信扫一扫