Python社区  »  区块链

【精选】使用Cryptory分析影响加密货币价格的因素(区块链系列3)

量化投资与机器学习 • 1 年前 • 198 次点击  


量化投资与机器学习

为中国的量化投资事业贡献一份我们的力量!

 

 

作者:David Sheehan

编译:编辑部


机器学习应用区块链系列的第三篇文章

前2期文章传送门

【系列一】如何开发一套自己的智能合约系统

【系列二】多维LSTM网络预测比特币价格



我们可以设计两种模型。

 

1、一个更复杂的模型(更多的隐含层)

2、一个可以识别更多输入信息数据源的模型。

 

虽然很容易把注意力放在第一个模型上,但garbage-in-garbage-out的原则依然存在。

 

考虑到这一点,我为大家创建了一个名为cryptory的新Python包(https://github.com/dashee87/cryptory)。它集成了各种包和协议,以便你可以在一个地方获得历史密码和更广泛的经济/社会数据。

 

安装


cryptor可以在PyPi和GitHub上使用,因此很容易运行pip install cryptory在你的command line/shell中。

下一步是将包装加载到工作环境中。 具体来说,我们将导入Cryptory类。


# import package
from cryptory import Cryptory

 

假设没有返回任何错误,那么你现在可以开始提取一些数据。 但在此之前,值得一提的是,你可以通过运行help功能来检索有关每种方法的信息。

help(Cryptory)

Help on class Cryptory in module cryptory.cryptory:

class Cryptory
|  Methods defined here:

|  
|  __init__(self, from_date, to_date=None, ascending=False, fillgaps=True, timeout=10.0)
|      Initialise cryptory class
...


现在我们将创建我们自己的加密对象,我们将其称为my_cryptory。 你需要定义要检索数据的开始日期,同时还有一些可选的参数。例如,你可以设置结束日期,否则它将默认为当前日期 - 有关更多信请输入help(Cryptory.__init__)


# initialise object
my_cryptory = Cryptory(from_date="2017-01-01")


加密货币价格


首先我们将获取一些比特币的历史价格(从2017年1月1日开始)。 cryptory有几个选项对于这些数据种类:


# initialise object
my_cryptory = Cryptory(from_date="2017-01-01")
# for readability, reduce number of rows shown by default
import pandas as pd

pd.options.display.max_rows = 6

# get prices from coinmarketcap
my_cryptory.extract_coinmarketcap("bitcoin")



# get prices from bitinfocharts
my_cryptory.extract_bitinfocharts("btc")


这些单元说明如何从coinmarketcap和bitinfocharts中提取比特币价格。 每种方法返回的价格差异都可以通过计算每日价格的不同方法来解释(例如bitinfocharts代表当天的平均价格)。 出于这个原因,我不建议组合不同的价格来源。

 

你还可以通过extract_bitinfocharts。例如, 交易费用。请参阅帮助(Cryptory.extract_bitinfocharts)以获取更多信息。


# average daily eth transaction fee
my_cryptory.extract_bitinfocharts("eth", metric='transactionfees')


你可能已经注意到每种方法都会返回一个pandas dataframe。事实上,所有的加密方法都会返回一个pandas dataframe。这很方便,因为它允许你使用常见的pandas技术来处理输出。例如,我们可以轻松合并两个extract_bitinfocharts来结合每日bitcoin和 ethereum 的价格。


my_cryptory.extract_bitinfocharts("btc").merge(
my_cryptory.extract_bitinfocharts("eth"), on='date', how='inner')


extract_poloniex提供了加密价格的另一个来源,它从public poloniex API(https://poloniex.com/support/api/)中提取数据。例如,我们可以检索BTC / ETH汇率。


# btc/eth price
my_cryptory.extract_poloniex(coin1="btc", coin2="eth")


我们现在可以对加密货币价格进行一些基本分析。


当然,上图并没有什么意义。 你不能只比较每个币的单位价格。 你需要考虑总供给和市值。 这就好像说日元与美元相比,美元被低估了。但我并不担心。这里更重要的是自2017年以来价格的相对变化,我们可以通过pandas magic (pct_change):


这些币是在bitinfocharts上提供的,它们倾向于代表较旧的传统币。例如,从2017年表现最佳的硬币是Reddcoin。它从2017年开始,市值不到100万美元,但是完成价值约2.5亿美元,到2018年1月初达到7.5亿美元的高峰。你会注意到每个币都显示出相同的一个趋势:3月至6月持续上涨,随后在12月再次飙升,并在2018年1月出现明显的抛售。

 

在pandas的帮助下,我们可以生成密码价格关联图:

它不像股市。以太坊和比特币没有Facebook和通用汽车那么不同。尽管股票价格与实现财务目标(即季度收益报告)和更广泛的宏观经济因素有关,但大多数密码(可能全部)目前都是围绕区块链技术在展开。这并不是说币偶尔不会逆市上涨,例如ripple (xrp)在十二月初。然而,过度表现之后往往是市场的表现不佳(例如2018年1月的波动)。

我承认我迄今为止所做的一切都是突破性的。你可以从Quandl api(https://www.quandl.com/tools/python)中获得类似的数据(我打算将quandl API调用集成到cryptory中)。当你想要将加密价格与其他数据源结合时,加密的真正好处cryptory就来了。

 

Reddit Metrics


如果你熟悉密码,你很可能会意识到他们关联reddit的页面。 这就是加密投资者来讨论不同区块链实施的优点,剖析当天的主要话题和发布有趣的gif,它主要是GIF(https://www.reddit.com/r/Bitcoin/comments/7v438b/the_last_3_months_in_47_seconds/)。通过加密技术,您可以将reddit指标(订阅者总数,新订户,一分为二地被刮掉从redditmetrics网站(http://redditmetrics.com/)或与其他加密数据结合起来。



让我们来看看iota和eos; 两个币于2017年6月出现,并于2017年底实现强劲增长。Their corresponding subreddits are r/iota and r/eos, respectively.

my_cryptory.extract_reddit_metrics("iota", "subscriber-growth")



现在我们可以分析价格和subreddit之间的关系。


直观来看,价格和子分币成员增长之间显然存在某种相关性(y轴使用传统的min-max比例进行归一化)。 尽管两个币的Spearman等级相关性都相似,但是iota的Pearson相关系数显着更强,突出显示了不依赖单一测量的重要性。在撰写本文时,iota和eos的市值都在50亿美元左右(总体为第11和第9),但iota subreddit的用户数量比eos subreddit(分别为105k和30k)多3倍以上。虽然这并不能确定价格和reddit之间的关系是否具有预测性,但确实表明reddit指标可能是某些币有用的模型特征。

 

Google Trends


Google Trends你会注意到在11月下旬和12月初,iota和eossubreddits的用户几乎同时激增。 这是更广泛的加密趋势的一部分,大多数币经历了前所未有的收益。 领先的是比特币,价格在11月15日和12月15日之间涨了两倍。 作为nocoiner最知名的加密技术,比特币(以及更广泛的区块链行业)在这次牛市期间受到了相当多的主流关注。据推测,这吸引了很多新的加密投资者,推高了价格。

 

通过cryptory,你可以轻松地将常规加密指标与Google Trends数据结合起来。 你只需要确定好你想要搜索术语。 如果你以前使用过Google Trends,那么你会注意到你只能检索最多90天的数据。 get_google_trends方法将重叠搜索拼接在一起,以年计算。


my_cryptory.get_google_trends(kw_list=['bitcoin'])

现在我们可以查看加密价格和谷歌搜索流行度之间的关系。



A few words on Verge (xvg): eccentric (i.e.crazy) crypto visionary John McAfee recommended (i.e. shilled) the unheraldedVerge to his twitter followers (i.e. fools), which triggered a huge surge inits price. As is usually the case with pump and dumps, the pump (from whichMcAfee himself potentially profitted) was followed by the dump. The sorry storyis retold in both the price and google search popularity. Unlike bitcoin andethereum though, you’d need to consider in your analysis that verge is also acommon search term for popular online technology news site The Verge (tronwould be a similar case).

 

无论如何,回到cryptory,你可以提供一个以上的关键字,使你可以看到不同条

款的相对流行度。让我们比较自2013年以来Kim Kardashian和比特币的历史人气:



根据谷歌趋势,比特币在2017年6月成为一个更受欢迎的搜索词。也就是说,比特币从未在2014年11月13日达到Kim Kardashian的高度。

 

股票市场价格

 

加密货币有点类似于传统的公司股票。 当然,主要区别在于你不可能通过投资股市来支付lambo。尽管如此,股票市场可能会提供有关总体经济表现如何的线索,甚至可能提供具体行业如何应对区块链革命的线索。

 

cryptory包含一个get_stock_prices方法,该方法基于雅虎财务并返回历史数据。请注意,你需要在雅虎金融网站上找到相关的公司/索引代码

# %5EDJI = Dow Jones
my_cryptory.get_stock_prices("%5EDJI")


你可能会注意到前一个收盘价格会在股市关闭的几天(例如周末)结转。你可以选择关闭此功能(请参阅help(Cryptort.__init__))。

 

在pandas的帮助下,我们可以将比特币相对于某些特定股票和指数进行可视化操作。



该图显示如果你在1月3日投资,你将收到的回报。由于比特币涨幅最大(> 10倍回报),客观上它是最好的投资。但AMD和NVIDIA(以及英特尔在某种程度上)是特殊情况,因为这些公司生产的显卡支持密码挖掘的工作。 柯达(不要与2012年前破产柯达相混淆),因为他们在2018年1月初宣布他们打算创建他们自己的“以照片为中心的加密货币”

 

和以前一样,通过pandas,你可以创建一个比特币股市的相关图。


商品价格


尽管比特币最初被设想为替代支付系统,但高额交易费和不断上涨的价值阻碍了其作为合法货币的使用。 这意味着比特币及其继任者已经演变成另一种价值储备 - 一种容易丢失的互联网黄金(http://uk.businessinsider.com/nearly-4-million-bitcoins-have-been-lost-forever-study-says-2017-11)。因此,调查比特币与更传统的价值储备之间的关系可能会很有趣。

 

cryptory包含一个get_metal_prices方法,可以检索各种贵金属的历史价格。

my_cryptory.get_metal_prices()



我们可以轻松地绘制2017年和2018年商品的变化情况。


看看2017年和2018年慢慢升值的黄金,因此代表着稳定的财富储备。如前所述,我们可以绘制一个价格相关矩阵。


不出所料,各种贵金属呈现出显着的相关性,而比特币价值看起来完全没有关联。 我认为,负相关可以提供证据表明人们正在摆脱传统的价值储备,但几乎没有证据支持这一理论。

 

外汇汇率


比特币背后的动机之一是创造一种不受任何中央政府控制的货币。 当美国中央银行在2007年金融危机后通过印刷数万亿美元的新货币来支撑经济不景气时,美国中央银行可能贬值美元。因此,美元汇率和货币与加密货币之间可能存在关系。

 

cryptory包括一个get_exchange_rates方法,用于检索特定货币对之间的历史每日汇率。

my_cryptory.get_exchange_rates(from_currency="USD", to_currency="EUR")



正如你所看到的,美元在过去的一年中已经跌破至欧元。

 

原油价格


全球经济实力(如中国的需求)和地缘政治不稳定性(如中东,委内瑞拉)强烈影响油价。 当然,还有其他一些因素(页岩,走向可再生能源等),但你可能想要在你的加密价格模型中使用油价格来使用这些因素。

 

cryptory包括一个get_oil_prices方法,可以检索历史日常原油价格。

my_cryptory.get_oil_prices()

自2017年初以来,原油价格已上涨约20%。


更多有关资料


1、twitter statistics (specifically JohnMcAffee’s!!!)

2、media analysis (number of mainstreamarticles, sentiment, etc.- example)

3、more Asian-centric data sources (Japan andSouth Korea are said to account for 40% and 20% of global bitcoin volume,respectively)

4、more financial/crypto data (integrateQuandl api)

 

原文代码链接:https://github.com/dashee87




今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/EUzhE6cPln
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/8203
 
198 次点击  
分享到微博