Qiskit投资组合优化应用程序

问题描述

我最近迷上了量子计算领域,并且是编码的初学者。我被分配去做Qiskit Finance Tutorials的Portfolio Optimization教程并输入实际数据。说实话,我无能为力。据我了解,我必须替换代码中的“ TICKER”和“ RandomDataProvider”部分才能生成真实的投资组合。

@H_404_2@# Generate expected return and covariance matrix from (random) time-series stocks = [("TICKER%s" % i) for i in range(num_assets)] data = RandomDataProvider(tickers=stocks,start=datetime.datetime(2016,1,1),end=datetime.datetime(2016,30)) data.run() mu = data.get_period_return_mean_vector() sigma = data.get_period_return_covariance_matrix()

我已经导入了Quandl和WikipediaDataProvider。我想使用Microsoft“ MSFT”,迪士尼“ dis”,Nike“ NKE”和Home Depot“ HD”股票来保持资产数量不变。我如何将Quandl的财务知识应用于本教程?到目前为止,我已经尝试过:

@H_404_2@num_assets = 4 # Generate expected return and covariance matrix from (random) time-series stocks = [("MSFT%s","dis%s","NKE%s","HD%s" % i) for i in range(num_assets)] data = WikipediaDataProvider(tickers=stocks,token="xeesvko2fu6Bt9jg-B1T",30)) data.run() mu = data.get_period_return_mean_vector() sigma = data.get_period_return_covariance_matrix()

但是得到错误

@H_404_2@--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-59-19e4d9cde1e3> in <module> 3 # Generate expected return and covariance matrix from (random) time-series 4 stocks = [("MSFT%s","HD%s" % i) for i in range(num_assets)] ----> 5 data = WikipediaDataProvider(tickers=stocks,6 token="xeesvko2fu6Bt9jg-B1T",7 start=datetime.datetime(2016,TypeError: Can't instantiate abstract class WikipediaDataProvider with abstract methods run

很抱歉,我的编码能力有限-我对所有这些都很陌生!预先谢谢你。

解决方法

stocks参数应为字符串列表。如果您尝试:

stocks = ['MSFT','DIS','NKE','HD']

它将起作用。只要确保您安装了最新的Qiskit。我自己跑了,打印了mu和sigma:

mu: [ 0.00057085 -0.00379642  0.00057495 -0.00209479]
sigma: [[0.00059268 0.00036507 0.00022995 0.00025648]
 [0.00036507 0.00041735 0.00016424 0.00027058]
 [0.00022995 0.00016424 0.0002836  0.00022028]
 [0.00025648 0.00027058 0.00022028 0.00042107]]
,

我注册了Quandl,但不会免费给我2016年以后的任何东西。雅虎似乎在没有任何令牌的情况下为我工作,并拥有最新数据。

data = YahooDataProvider(
             tickers = ["AAPL","MSFT","WORK","TEAM"],start=datetime.datetime(2020,9,1),end=datetime.datetime(2020,30))