Python Qiskit投资组合优化应用程序

Python Qiskit投资组合优化应用程序,python,optimization,quandl,quantum-computing,qiskit,Python,Optimization,Quandl,Quantum Computing,Qiskit,我最近被抛进了量子计算的世界,我是一个编码的初学者。我被指派做Qiskit财务教程的投资组合优化教程,并输入真实数据。说实话,我不懂。我的理解是,我必须替换代码中的“TICKER”和“RandomDataProvider”部分,以便生成真实的投资组合 #从(随机)时间序列生成预期收益和协方差矩阵 股票=[((“股票%s”%i)代表范围内的i(num_资产)] 数据=随机数据提供者(股票代码=股票, 开始=日期时间。日期时间(2016,1,1), 结束=日期时间。日期时间(2016,1,30))

我最近被抛进了量子计算的世界,我是一个编码的初学者。我被指派做Qiskit财务教程的投资组合优化教程,并输入真实数据。说实话,我不懂。我的理解是,我必须替换代码中的“TICKER”和“RandomDataProvider”部分,以便生成真实的投资组合

#从(随机)时间序列生成预期收益和协方差矩阵
股票=[((“股票%s”%i)代表范围内的i(num_资产)]
数据=随机数据提供者(股票代码=股票,
开始=日期时间。日期时间(2016,1,1),
结束=日期时间。日期时间(2016,1,30))
data.run()
mu=data.get\u period\u return\u mean\u vector()
西格玛=数据。获取周期返回协方差矩阵()
我已经导入了Quandl和WikipediaDataProvider。我想保持资产数量不变,使用微软“MSFT”、迪士尼“DIS”、耐克“NKE”和家得宝“HD”股票。我如何将Quandl中的财务信息应用到教程中?到目前为止,我已经试过了:

num_资产=4
#从(随机)时间序列生成预期收益和协方差矩阵
股票=[((“MSFT%s”、“DIS%s”、“NKE%s”、“HD%s”%i)对于范围内的i(num_资产)]
数据=维基百科数据提供者(股票代码=股票,
token=“xeesvko2fu6Bt9jg-B1T”,
开始=日期时间。日期时间(2016,1,1),
结束=日期时间。日期时间(2016,1,30))
data.run()
mu=data.get\u period\u return\u mean\u vector()
西格玛=数据。获取周期返回协方差矩阵()
但是得到错误:

---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
3#从(随机)时间序列生成预期收益和协方差矩阵
4个股票=[((“MSFT%s”、“DIS%s”、“NKE%s”、“HD%s”%i)对于范围内的i(num_资产)]
---->5数据=维基百科数据提供者(股票代码=股票,
6 token=“xeesvko2fu6Bt9jg-B1T”,
7开始=日期时间。日期时间(2016,1,1),
TypeError:无法在运行抽象方法的情况下实例化抽象类WikipediaDataProvider

很抱歉我的编码技能有限-我对这一切都很陌生!提前谢谢你。

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, 9, 30))