你的位置:乐鱼电竞下载 > 新闻动态 > 速度贼快的Python金融量化框架,我用1分钟回测了15个策略

速度贼快的Python金融量化框架,我用1分钟回测了15个策略

发布日期:2025-11-23 03:01 点击次数:102

图片

打开今日头条查看图片详情

大家好我是花姐,今天给大家分享一个回测速度超快的量化库——vectorbt

什么是 vectorbt?

说白了,vectorbt 就是一个干量化的“加速神器”。你拿它来写策略回测,效率高得吓人,重点是它不整事儿,不跟你搞什么面向对象那套绕来绕去的把戏,而是把所有策略、所有信号、所有数据,全都塞进 NumPy 和 pandas 这些数组对象里,一口气跑完——像是开了氮气加速。

它背后的操作很刚——NumPy 负责矢量化(就是同时对成千上万条数据一起动手),Numba 负责把 Python 的慢循环编译成机器码,快得跟 C 语言一个德行。当其它量化框架还在 for i in range(1000) 的时候,人家已经全局扫射干完了。

而且它还特别适合 Python 生态下的人——你要是爱用 pandas、喜欢写 Jupyter Notebook,那你会觉得 vectorbt 跟你简直是天生一对。

你用它可以:

几行代码搞定一套完整回测;用 NumPy 的速度配 Python 的优雅;参数调优简直不要太爽,一行代码跑完上百组组合;可视化?自带 Plotly 交互图表;能分析策略、调模型、连接 Telegram,甚至还能自动调度——简直像个“懒人工具箱”。

而它最厉害的地方是啥?用“向量思维”干掉了 OOP 模式在量化中的低效。

传统回测器像 backtrader,写起来“有模有样”,可一旦你要比较多个策略,或者做参数调优?对不起,嵌套循环、类的继承、数据结构耦合,一顿 debug 脑子嗡嗡的。

而 vectorbt 的理念非常简单暴力:

“策略是数据,就应该数组化。”

于是它就把所有参数组合都塞成了多维数组,在数据层面直接处理比较。啥意思?你不需要写一个策略跑一次,而是“一次性跑完一群策略”,爽不爽?

如何安装 vectorbt?

非常简单,一条命令:

pip install vectorbt

记得安装akshare库

pip install akshare

但注意:

建议用虚拟环境装,不然容易和其他库打架。有些系统可能需要先装依赖,比如 Windows 下得提前装好 numpy 和 wheel。vectorbt 会自动装 numba、plotly、ipywidgets 等一些依赖。实战:用 vectorbt + AKShare 实现一个双均线策略

接下来花姐用 vectorbt 来跑个经典的双均线策略——短期均线上穿长期就买,下穿就卖。示例股票用沪深300ETF,行情我们用 AKShare 库。

先贴代码:

import akshare as akimport vectorbt as vbtimport pandas as pd# 获取沪深300指数的历史数据df = ak.stock_zh_a_hist(symbol='600519', period='daily',start_date='20200101',adjust='qfq')print(df)# 将日期列转换为 datetime 类型,并设置为索引df['日期'] = pd.to_datetime(df['日期'])df.set_index('日期', inplace=True)# 获取收盘价close = df['收盘']# 计算短期和长期移动平均线fast_ma = vbt.MA.run(close, window=5)slow_ma = vbt.MA.run(close, window=20)# 生成买入和卖出信号entries = fast_ma.ma_crossed_above(slow_ma)exits = fast_ma.ma_crossed_below(slow_ma)# 创建投资组合pf = vbt.Portfolio.from_signals(close, entries, exits, init_cash=100000)# 输出投资组合的统计信息print(pf.stats())# 绘制投资组合的表现图# pf.plot().show()pf.plot().write_html('backtest_result.html')

你会发现回测速度贼快,基本上1分钟搞定,而且上手简单。

提示:如果使用pf.plot().show()无法打开网页可以使用pf.plot().write_html('backtest_result.html')生成本地回测网页然后再打开

以下是回测结果:

Start                         2020-01-02 00:00:00End                           2025-05-12 00:00:00Period                                       1295Start Value                              100000.0End Value                            151556.13048Total Return [%]                         51.55613Benchmark Return [%]                    68.691599Max Gross Exposure [%]                      100.0Total Fees Paid                               0.0Max Drawdown [%]                        39.790511Max Drawdown Duration                       557.0Total Trades                                   40Total Closed Trades                            39Total Open Trades                               1Open Trade PnL                        2355.907437Win Rate [%]                            38.461538Best Trade [%]                          56.150292Worst Trade [%]                         -8.830222Avg Winning Trade [%]                    9.999109Avg Losing Trade [%]                    -3.767649Avg Winning Trade Duration              29.533333Avg Losing Trade Duration                7.958333Profit Factor                            1.322108Expectancy                            1261.544181

图片

打开今日头条查看图片详情

到这里,你可能会问:“为啥用 vectorbt,这些我用 pandas 也能写”。

是啊,的确你也能写,但你得自己循环、管理仓位、计算手续费、处理跳空、图表还得自己画。关键你写完一个策略,再想调个参数……那是噩梦。

而用 vectorbt 呢?你只要换个参数列表,它能自动帮你把所有组合都跑一遍:

# 多窗口组合参数调优fast_windows = [5, 10, 15]slow_windows = [20, 50, 100]# 使用 run_combs 方法计算所有窗口组合的均线fast_ma, slow_ma = vbt.MA.run_combs( close, window=fast_windows + slow_windows, r=2, short_names=['fast', 'slow'])# 生成买入和卖出信号entries = fast_ma.ma_crossed_above(slow_ma)exits = fast_ma.ma_crossed_below(slow_ma)# 创建投资组合pf = vbt.Portfolio.from_signals(close, entries, exits, init_cash=100000)# 遍历所有组合,逐个保存图表for idx in pf.wrapper.columns: print(pf[idx].stats()) fig = pf[idx].plot(title=f'组合 {idx} 的策略表现') fig.write_html(f'combo_{idx}_result.html')

不到1分钟就可以看到各个均线组合的回测详情了

图片

打开今日头条查看图片详情

还可以:

# 找到收益率最高的参数组合best = pf.total_return().idxmax()print('最强组合:', best) # 最强组合: (15, 50)

几行代码,扫一遍整个参数空间。

容易踩坑的几个点(花姐亲踩)AKShare 的日期是字符串,要用 pd.to_datetime 转一下,要不 vectorbt 图表会飘遇到停牌日会导致数据不连续,建议用 .fillna(method='ffill') 补齐缺失值有时候 AKShare 会抽风,建议本地保存一份数据别被“接口失联”给噎住vectorbt 默认不考虑手续费、滑点,你要自己加进去,别光看收益乐得太早写在最后

不是你写得不够努力,而是你用错了工具。

双均线策略能不能赚钱另说,但如果你能用 vectorbt 跑出漂亮的数据分析图、调出一堆参数组合、洞察一条潜在规律——那你已经比大多数初学者走得远了。

OK,今天先讲这么多。

你要想我继续深入讲 vectorbt 的“参数调优玩法”或者“多策略组合框架”,你尽管吱声,我直接给你安排得明明白白~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

友情链接:

乐鱼电竞下载介绍 产品展示 新闻动态

Powered by 乐鱼电竞下载 RSS地图 HTML地图

Copyright Powered by365建站 © 2013-2024