织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 区块链行情

使用python编写分析股票市场与比特币价格关系

时间:2020-02-27 18:23来源:金库链 作者:admin 点击:
我们通过使用Python和Pandas技术进行分析,我们将能够在本文中回答该问题。首先,我们将使用免费的API检索过去几年的比特币和股票价格。然后我们将计...... 我们通过使用Python和Panda

  我们通过使用Python和Pandas技术进行分析,我们将能够在本文中回答该问题。首先,我们将使用免费的API检索过去几年的比特币和股票价格。然后我们将计算股市与比特币价格之间的相关性。最后,我们将结束通过相关矩阵图绘制相关关系的分析。

  比特币在经济中的作用

  自从比特币出现以来,我一直想知道比特币在我们的经济中扮演什么角色。以下是三个潜在角色:

  · 比特币的作用与黄金相似吗?黄金被认为是避险投资。也就是说,当经济正陷入衰退时,由于投资者从股票转向黄金,黄金价格往往会上涨。这有助于投资者减少股市崩盘将给他们的投资组合带来的潜在损失。如果比特币在投资界一直扮演着避风港的角色,那么我们应该期望看到股票与比特币价格之间存在负相关关系。

  · 比特币的另一个可能作用是跟金融市场一样遵循同样的趋势。也就是说,如果股价上涨,这种实证主义具有传染性,因此在比特币价格中也可见吗?

  · 我们分析的第三个潜在结果可能是比特币价格与股市根本没有关系。

  让我们使用Python看看!

  使用Python检索股票市场价格和比特币价格

  为了获取数据进行我们的分析,我将使用financialmodelingprep API检索比特币价格。他们还提供免费的库存数据,但是为了向您展示两种不同的获取数据的方法,我将使用Pandas DataReader来检索库存数据。

  作为我们市场数据的代理,我们将使用标准普尔500指数。标准普尔500指数是衡量在美国上市的500家最大公司的股票表现的指数。我们将使用Pandas DataReader下载SP500价格和美联储经济数据(FRED)作为源。

  如果您以前从未使用过Pandas DataReader和Pandas,则需要安装软件包。 您可以使用pip命令来做到这一点。

  pip install pandas_datareader

  #Pandas data reader may not work with the latest Pandas version,

  therefore, I recommend you to install Pandas version 0.24:

  pip install pandas==0.24.2

  太好了,现在我们可以使用Python检索数据了。首先,我们将提取过去十年中的S&P500股票价格。 请注意,通过使用web.DataReader并指定系列名称(即sp500)和提供程序(即fred),我们可以轻松获取称为SP500的Pandas系列数据。

  pd.core.common.is_list_like = pd.api.types.is_list_like

  import pandas_datareader.data as web

  import datetime

  start = datetime.datetime(2010, 1, 1)

  end = datetime.datetime(2020, 2, 10)

  SP500 = web.DataReader(['sp500'], 'fred', start, end)

  print(SP500)

  以上代码行将返回低于标普500普尔系列,其中包含过去10年的标普价格:

  现在让我们检索比特币价格。为此,我们将使用financialmodelingprep API。我们将向API端点发出一个http get请求,该请求将返回包含历史BTC价格的字典:

  import requests

  #BTCUSD contains a dictionary

  BTCUSD = requests.get(

  'https://financialmodelingprep.com/api/v3/historical-price-full/crypto/BTCUSD')

  BTCUSD = BTCUSD.json()

  BTCUSD = BTCUSD['historical']

  我们分析包含在键名historical中的字典。

  print(BTCUSD)

  [{'date': '2020-02-15',

  'open': 10315.651367,

  'high': 10341.555664,

  'low': 10226.138672,

  'close': 10244.959961,

  'adjClose': 10244.959961,

  'volume': 42347495424.0,

  'unadjustedVolume': 42347495424.0,

  'change': 70.69141,

  'changePercent': 0.685,

  'vwap': 10270.88477,

  'label': 'February 15, 20',

  'changeOverTime': 0.00685},

  {'date': '2020-02-14',

  'open': 10211....

  ....

  ...]}

  现在通过查看BTCUSD变量的内容,我们可以看到BTCUSD是词典列表,并且列表中的每个元素都是包含比特币价格的不同日期。 BTC价格存储在关键收盘价下。

  例如我们看到在2月15日,比特币的价格为10,244美元。

  我们需要将字典列表转换为Pandas DataFrame。 我们可以使用pd.DataFrame.from_dict()轻松地做到这一点:

  BTC = pd.DataFrame.from_dict(BTCUSD)

  BTC.set_index('date',inplace=True)

  #Keep only the close column

  BTC = BTC[['close']]

  #Rename the column name to BTC

  BTC.columns = ['BTC']

  BTC

  最后,我们在两个Pandas DataFrame中获得BTC和S&P 500的价格。 现在我们只需要将它们合并在一起。对我们来说幸运的是,使用Python和Pandas可以很容易地做到这一点。

  我们可以使用pd.merge在索引上连接两个DataFrame,因为index包含日期。因此,我们想加入标普500指数和BTC在匹配日的价格。

  我们可以将等于True的right_index和left_index传递为参数,让Pandas知道我们要使用该索引进行合并。

  SP500BTC = BTC.merge(SP500, how='inner',right_index = True,

  left_index=True)

  #Drop NA since we have nan values for weekends.

  S&P500 only trades business days

  SP500BTC.dropna(inplace=True)

  print(SP500BTC)

  比特币与标普500价格之间的关系

  太好了,我们已准备好数据进行分析。现在我们可以继续查找股票和比特币价格之间的关系。

  为此,我们可以使用pandas dataframe.corr()查找Pandas DataFrame列的相关性:

  correlation = SP500BTC.corr()

  print(correlation)

  ###Result:

  BTC     sp500

  BTC    1.000000  0.834106

  sp500  0.834106  1.000000

  如何解释BTC与标普500指数之间的相关性?

  相关矩阵的值范围从-1到1。接近+1意味着两个变量在同一方向上紧密地移动。值为0表示变量之间没有关系。负相关表明变量向不同方向移动。越接近-1,逆关系越强。

  通过研究我们的结果,我们发现比特币价格与标准普尔500指数之间存在0.83的强正相关关系。这意味着,当股市价格上涨时,我们可以预期比特币也会跟风上涨。

  from statsmodels import api as sm

  import matplotlib.pyplot as plt

  sm.graphics.plot_corr(correlation,xnames=list(correlation.columns))

  plt.show()

  图的红色意味着这种关系是强而正的。我们还可以使用linregression和scipy.stats检查这种关系是否具有统计学意义:

  #statistically significant?

  from scipy.stats import linregress

  linregress(SP500BTC['sp500'],SP500BTC['BTC'])

  #H0: BTC and Stock prices are not related

  #Results:

  LinregressResult(slope=8.956910705798713, intercept=-18068.59091142212,

  rvalue=0.8341059841835341, pvalue=0.0, stderr=0.1673358700767462)

  因为我们的p值小于0.05,所以我们可以拒绝H0,因此,我们可以从统计学上说比特币和股票价格一起移动。

  收尾

  使用Python和Pandas,我们分析了股市与比特币价格之间的关系。根据我们的分析结果,可以说BTC和S&P500的价格朝着同一方向移动。

  知道这种关系在衰退的经济周期中是否也很有趣。为了进行这种分析,我们可能需要等待一段时间,因为在过去的几年中,我们一直生活在扩张型经济中。

  请参阅下面的完整脚本:

  import pandas as pd

  pd.core.common.is_list_like = pd.api.types.is_list_like

  import pandas_datareader.data as web

  import datetime

  start = datetime.datetime(2010, 1, 1)

  end = datetime.datetime(2020, 2, 10)

  SP500 = web.DataReader(['sp500'], 'fred', start, end)

  import requests

  BTCUSD = requests.get('https://financialmodelingprep.com/api/v3/historical-price-full/crypto/BTCUSD')

  BTCUSD = BTCUSD.json()

  BTCUSD = BTCUSD['historical']

  BTC = pd.DataFrame.from_dict(BTCUSD)

  BTC.set_index('date',inplace=True)

  BTC = BTC[['close']]

  BTC.columns = ['BTC']

  SP500BTC = BTC.merge(SP500,how='inner',right_index = True,

  left_index=True)

  SP500BTC.dropna(inplace=True)

  correlation = SP500BTC.corr()

  print(correlation)

  from statsmodels import api as sm

  import matplotlib.pyplot as plt

  sm.graphics.plot_corr(correlation,xnames=list(correlation.columns))

  plt.show()

  #statistically significant?

  from scipy.stats import linregress

  linregress(SP500BTC['sp500'],SP500BTC['BTC'])

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容