473 字
2 分钟
vectorbt学习_06MACDVolume
立方体参数优化
构建参数搜索空间
# Define hyper-parameter space# 49 fast x 49 slow x 19 signalfast_windows, slow_windows, signal_windows = vbt.utils.params.create_param_combs( (product, (combinations, np.arange(2, 51, 1), 2), np.arange(2, 21, 1)))
pd.DataFrame({"fast_windows":fast_windows, "slow_windows":slow_windows, "signal_windows":signal_windows})Out[6]: fast_windows slow_windows signal_windows0 2 3 21 2 3 32 2 3 43 2 3 54 2 3 6... ... ... ...22339 49 50 1622340 49 50 1722341 49 50 1822342 49 50 1922343 49 50 20计算指标和信号
# Run MACD indicatormacd_ind = vbt.MACD.run( price, fast_window=fast_windows, slow_window=slow_windows, signal_window=signal_windows)
# Long when MACD is above zero AND signalentries = macd_ind.macd_above(0) & macd_ind.macd_above(macd_ind.signal)
# Short when MACD is below zero OR signalexits = macd_ind.macd_below(0) | macd_ind.macd_below(macd_ind.signal)
exitsOut[16]:macd_fast_window 2 ... 49macd_slow_window 3 ... 50macd_signal_window 2 3 ... 19 20split_idx 0 1 2 0 ... 2 0 1 20 False False False False ... False False False False1 False False False False ... False False False False2 False False False False ... False False False False3 True True True True ... False False False False4 True False True True ... False False False False5 True False True True ... False False False False6 True True False True ... False False False False7 False False False False ... False False False False8 False True True False ... False False False False9 True False True True ... False False False False可见这里的信号为持续性信号,不同与常规的crossxx信号
组合收益评估
# Build portfoliopf = vbt.Portfolio.from_signals( price.vbt.tile(len(fast_windows)), entries, exits, fees=0.001, freq='1D')原始的1列price,经过range_split后变为3列,但是依然和entries列数不同,所以需要tile对齐列数据。
price.shapeOut[26]: (16, 3)len(fast_windows)Out[27]: 22344entries.shapeOut[28]: (16, 67032)tile函数效果
Out[21]:price.head()split_idx 0 1 20 0.374540 0.304242 0.0650521 0.950714 0.524756 0.9488862 0.731994 0.431945 0.9656323 0.598658 0.291229 0.8083974 0.156019 0.611853 0.304614
price.vbt.tile(2)Out[22]:split_idx 0 1 2 0 1 20 0.374540 0.304242 0.065052 0.374540 0.304242 0.0650521 0.950714 0.524756 0.948886 0.950714 0.524756 0.9488862 0.731994 0.431945 0.965632 0.731994 0.431945 0.9656323 0.598658 0.291229 0.808397 0.598658 0.291229 0.8083974 0.156019 0.611853 0.304614 0.156019 0.611853 0.3046145 0.155995 0.139494 0.097672 0.155995 0.139494 0.097672可视化
# Draw all window combinations as a 3D volumefig = pf.total_return().vbt.volume( x_level='macd_fast_window', y_level='macd_slow_window', z_level='macd_signal_window', slider_level='split_idx', trace_kwargs=dict( colorbar=dict( title='Total return', tickformat='%' ) ))fig.show()会导致电脑卡顿,效果上也没觉得多么直观。

部分信息可能已经过时