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

图片日斗配资
打开今日头条查看图片详情
大家好我是花姐,今天给大家分享一个回测速度超快的量化库——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 的“参数调优玩法”或者“多策略组合框架”,你尽管吱声日斗配资,我直接给你安排得明明白白~
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。创通网配资提示:文章来自网络,不代表本站观点。




