
图片云开体育
掀开当天头条检验图片细目
巨匠好我是花姐,今天给巨匠共享一个回测速率超快的量化库——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 的“参数调优玩法”能够“多战略组合框架”,你尽管吱声云开体育,我径直给你安排得清皑皑白~
本站仅提供存储劳动,所有施行均由用户发布,如发现存害或侵权施行,请点击举报。