问题描述
我最近迷上了量子计算领域,并且是编码的初学者。我被分配去做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))