<p>我想对马科维茨的投资组合做一个回溯测试。到目前为止,我已经尝试过zipline、backtrader和QSTrader(虽然QSTrader可以工作,但是没有文档,所以非常困难)。我没有像我所希望的那样幸运地创建回测</p>
<p>我的数据结构是一个csv,由200种不同股票的调整收盘价组成。我想每季度或每年进行一次投资组合再平衡。我已经有了实际投资组合优化的代码和它返回的权重。我只需要一个实际的框架来插入这些权重,然后每年每季度重新计算一次。到目前为止,我已经做了大约5个小时了,我只是无法进行任何回溯测试。Zipline在处理数据方面非常混乱,尤其是在使用我描述的结构导入本地csv时。Backtrader也有同样的问题。QSTrader似乎不适合我,加载数据后会抛出以下错误:</p>
<pre><code>Traceback (most recent call last):
File "d:\Finansiering. Modern Portfolio Theory Projekt\Finansiering_Backtrader.py", line 53, in <module>
strategy_backtest.run()
File "D:\Anaconda\envs\zipline\lib\site-packages\qstrader\trading\backtest.py", line 398, in run
self.qts(dt, stats=stats)
File "D:\Anaconda\envs\zipline\lib\site-packages\qstrader\system\qts.py", line 172, in __call__
rebalance_orders = self.portfolio_construction_model(dt, stats=stats)
File "D:\Anaconda\envs\zipline\lib\site-packages\qstrader\portcon\pcm.py", line 289, in __call__
target_portfolio = self._generate_target_portfolio(dt, full_weights)
File "D:\Anaconda\envs\zipline\lib\site-packages\qstrader\portcon\pcm.py", line 139, in _generate_target_portfolio
return self.order_sizer(dt, weights)
File "D:\Anaconda\envs\zipline\lib\site-packages\qstrader\portcon\order_sizer\dollar_weighted.py", line 168, in __call__
'modifying the backtest start date and re-running.' % (asset, dt)
ValueError: Asset price for "A" at timestamp "2006-01-31 21:00:00+00:00" is Not-a-Number (NaN). This can occur if the chosen backtest start date is earlier than the first available price for a particular asset. Try modifying the backtest start date and re-running.
</code></pre>
<p>回溯测试的开始日期是正确的,基本上是在月底,当它需要重新平衡时,它只是得到一个中风。我也没办法解决这个问题</p>
<p>我希望有人有一个半即插即用的解决方案</p>