VectorBT量化入门系列:第三章 VectorBT策略回测基础
本教程专为中高级开发者设计,系统讲解VectorBT技术在量化交易中的应用。通过结合Tushare数据源和TA-Lib技术指标,深度探索策略开发、回测优化与风险评估的核心方法。从数据获取到策略部署,全面提升量化交易能力,助力开发者构建高效、稳健的交易系统。
文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。适合量化新手建立系统认知,为策略开发打下基础。

学习对象
- 中高级水平的开发者和数据分析师
- 具备 Python 编程基础和一定的数据分析能力
- 对量化交易和金融数据处理有一定了解
- 熟悉 A 股市场,了解 Tushare 数据源和 TA-Lib 技术指标
教程目标
- 系统学习 VectorBT 技术,掌握其在量化交易中的应用
- 熟练使用 Tushare 数据源获取 A 股市场数据,并使用 Parquet 文件存储
- 掌握基于 VectorBT 的策略开发、回测和性能评估流程
- 学会使用 TA-Lib 计算技术指标,并将其应用于交易策略
- 理解并实现多因子策略、机器学习策略等高级策略
- 掌握策略优化、风险管理以及策略组合的方法
- 能够独立构建和评估量化交易策略,并部署到生产环境
教程目录
第一章 VectorBT基础与环境搭建
1.1 VectorBT简介与应用场景
1.2 环境搭建与依赖安装
1.3 数据源与Tushare集成
1.4 数据存储与Parquet文件格式
第二章:VectorBT核心功能与数据处理
2.1 数据加载与预处理
2.2 时间序列数据处理
2.3 技术指标计算与TA-Lib集成
2.4 数据可视化与探索性分析
第三章:VectorBT策略回测基础
3.1 策略定义与实现
3.2 回测流程与关键参数
3.3 性能评估指标与解读
3.4 策略优化与参数调整
第四章:高级策略开发与优化
4.1 多因子策略开发
4.2 机器学习策略集成
4.3 风险管理与交易成本模拟
4.4 策略组合与资产配置
第五章:VectorBT性能评估与分析
5.1 性能评估框架
5.2 统计指标与回测报告
5.3 敏感性分析与压力测试
5.4 策略对比与选择标准
第六章:VectorBT实战案例
6.1 基于MACD的动量策略
6.2 基于RSI的均值回归策略
6.3 多因子选股策略
6.4 机器学习预测策略
第七章:VectorBT扩展与最佳实践
7.1 自定义指标与策略
7.2 高效回测与并行计算
7.3 代码优化与性能提升
7.4 生产环境部署与监控
第三章 VectorBT策略回测基础
本章将介绍如何使用VectorBT进行策略回测,包括策略定义、回测流程、性能评估指标以及策略优化。通过本章的学习,你将掌握VectorBT在策略开发中的核心应用。
3.1 策略定义与实现
在量化交易中,策略是核心。VectorBT提供了一个简洁的API来定义和实现交易策略。
3.1.1 定义交易信号
交易信号是策略的基础,通常包括入场信号和出场信号。我们将使用移动平均线交叉作为示例。
python
import vectorbt as vbt
import pandas as pd
import talib
def generate_signals(
df: pd.DataFrame, fast_window: int = 10, slow_window: int = 30
) -> pd.DataFrame:
"""生成交易信号。
:param df: 输入的DataFrame
:param fast_window: 快线窗口大小
:param slow_window: 慢线窗口大小
:return: 包含交易信号的DataFrame
"""
# 计算快线和慢线的移动平均线
df["fast_ma"] = talib.SMA(df["close"], timeperiod=fast_window)
df["slow_ma"] = talib.SMA(df["close"], timeperiod=slow_window)
df["signal"] = np.where(
(df["fast_ma"] > df["slow_ma"])
& (df["fast_ma"].shift(1) <= df["slow_ma"].shift(1)), # 入场信号
1,
np.where(
(df["fast_ma"] < df["slow_ma"])
& (df["fast_ma"].shift(1) >= df["slow_ma"].shift(1)), # 出场信号
-1,
0, # 无操作
),
)
return df
3.1.2 策略实现
使用VectorBT的Portfolio
类来实现策略。
python
def run_backtest(df: pd.DataFrame) -> vbt.Portfolio:
"""运行回测。
:param df: 包含交易信号的DataFrame
:return: 回测结果
"""
# 创建投资组合
portfolio = vbt.Portfolio.from_signals(
close=df["close"],
entries=df["signal"] == 1,
exits=df["signal"] == -1,
freq="D", # 交易频率为日
init_cash=100000, # 初始资金
fees=0.0015, # 交易费用(千分之十五)
slippage=0.0015, # 滑点(千分之十五)
)
return portfolio
3.2 回测流程与关键参数
回测流程包括数据准备、信号生成、策略运行和性能评估。我们将通过一个完整的示例来展示这个流程。
python
# 示例:完整回测流程
def main_backtest(
symbol: str,
fast_window: int = 10,
slow_window: int = 30,
) -> vbt.Portfolio:
"""完整回测流程。
:param symbol: 股票代码
:param fast_window: 快线窗口大小
:param slow_window: 慢线窗口大小
:return: 回测结果
"""
# 1. 加载数据
data = load_data_from_parquet(f"./data/{symbol}.parquet")
# 2. 预处理数据
data = preprocess_data(data)
# 3. 生成交易信号
data = generate_signals(data, fast_window, slow_window)
# 4. 运行回测
portfolio = run_backtest(data)
return portfolio
# 运行回测
portfolio = main_backtest("600519.SH", fast_window=10, slow_window=30)
3.3 性能评估指标与解读
性能评估是策略开发的重要环节。VectorBT提供了丰富的指标来评估策略的表现。
3.3.1 关键性能指标
python
def evaluate_performance(portfolio: vbt.Portfolio) -> pd.DataFrame:
"""评估策略性能。
:param portfolio: 回测结果
:return: 性能报告
"""
# 打印关键指标
print(f"总回报率: {portfolio.total_return():.2%}")
print(f"夏普比率: {portfolio.sharpe_ratio():.2f}")
print(f"最大回撤: {portfolio.max_drawdown():.2%}")
print(f"总利润: {portfolio.total_profit():.2f}")
# 评估性能
evaluate_performance(portfolio)
输出:
text
总回报率: 17.60%
夏普比率: 0.33
最大回撤: -39.62%
总利润: 17596.92
3.3.2 性能报告
VectorBT可以生成详细的性能报告,包括图表和统计指标。
python
def generate_performance_report(portfolio: vbt.Portfolio) -> None:
"""生成性能报告。
:param portfolio: 回测结果
:return: 性能报告
"""
# 绘制性能图表
portfolio.plot().show()
# 生成性能报告
report = portfolio.stats()
# 打印报告
print(f"性能报告: Moving Average Crossover Strategy")
print(report)
return report
# 生成性能报告
generate_performance_report(portfolio)
输出:

text
性能报告: Moving Average Crossover Strategy
Start 2020-01-02 00:00:00
End 2024-12-31 00:00:00
Period 1212 days 00:00:00
Start Value 100000.0
End Value 117596.917939
Total Return [%] 17.596918
Benchmark Return [%] 34.867257
Max Gross Exposure [%] 100.0
Total Fees Paid 8449.095759
Max Drawdown [%] 39.618459
Max Drawdown Duration 941 days 00:00:00
Total Trades 20
Total Closed Trades 19
Total Open Trades 1
Open Trade PnL -198.265356
Win Rate [%] 26.315789
Best Trade [%] 39.480445
Worst Trade [%] -10.252349
Avg Winning Trade [%] 18.336525
Avg Losing Trade [%] -4.538039
Avg Winning Trade Duration 55 days 14:24:00
Avg Losing Trade Duration 19 days 22:17:08.571428571
Profit Factor 1.18851
Expectancy 936.588594
Sharpe Ratio 0.325138
Calmar Ratio 0.12627
Omega Ratio 1.073192
Sortino Ratio 0.479606
dtype: object
3.4 策略优化与参数调整
策略优化是提升策略表现的关键。我们将通过参数扫描来寻找最优参数。
python
def optimize_strategy(
df: pd.DataFrame, fast_windows: list, slow_windows: list
) -> pd.DataFrame:
"""优化策略参数。
:param df: 输入的DataFrame
:param fast_windows: 快线窗口列表
:param slow_windows: 慢线窗口列表
:return: 包含最优参数的DataFrame
"""
results = []
for fast_window in fast_windows:
for slow_window in slow_windows:
if fast_window >= slow_window:
continue # 跳过无效参数组合
# 生成信号
data = generate_signals(df.copy(), fast_window, slow_window)
# 运行回测
portfolio = run_backtest(data)
# 计算性能指标
sharpe_ratio = portfolio.sharpe_ratio()
total_return = portfolio.total_return()
results.append(
{
"fast_window": fast_window,
"slow_window": slow_window,
"sharpe_ratio": sharpe_ratio,
"total_return": total_return,
}
)
# 转换为DataFrame
results_df = pd.DataFrame(results)
# 找到最优参数
best_params = results_df.sort_values(by="sharpe_ratio", ascending=False).head(1)
print(f"最优参数: {best_params}")
return results_df
# 优化策略
results_df = optimize_strategy(
data, fast_windows=[5, 10, 15], slow_windows=[20, 30, 40]
)
输出:
text
最优参数: fast_window slow_window sharpe_ratio total_return
2 5 40 0.663671 0.663842
总结
通过本章,你已经掌握了以下内容:
- 策略定义:如何生成交易信号并实现策略。
- 回测流程:从数据准备到策略运行的完整流程。
- 性能评估:如何评估策略的表现并生成性能报告。
- 策略优化:如何通过参数扫描寻找最优策略参数。
风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。