N-CryptoAsset投资组合 | 使用PCA识别高度相关的加密货币(最近听说某币很疯狂哦!)
前言
在本文中,以每日加密货币价格时间序列为例,以选择其中一个加密货币,通过巧妙地合并,我们将创建一个可存储的(例如HDF5,CSV文件格式)和可重用的N-CryptoAsset投资组合的文件。接下来,对于任何手动定义的时间间隔,我们将应用主成分分析(PCA)去实现建立一些模型,最后基于几个主要组件的分析来识别高度相关的加密货币。
520
找个好人
Python中的
N-Cryptocurrency组合
考虑任何资产的单一(每日抽样)收盘价时间序列。 它有开始和结束日期。 如果我们使用的数据来源是直接通过交易所,每个交易日都有相应的收盘价。 与外汇货币不同,加密货币全年都可以全天候交易。 但是,请记住,每个单一的加密货币在市场上都有自己的“fist time”,因此历史价格系列的长度不一样。 幸运的是,Python和它的pandas可以让我们控制时间序列范围和进一步的过滤。 下面直接开始程序吧:
获取时间序列很容易。 创建投资组合需要更多的关注细节。 让我们把选择的加密货币相对应的代码列表(fsym)放在一起,让我们定义“versus”我们希望表达的全部货币(tsym):
由于交易中流动性很差,所以省略了USDT。
通过运行程序我们给定(fsym)代码列表(每日历史收盘价)创建N-CryptoAsset投资组合:
比特币(BTC)是所有加密货币的头一把交易。
由于我们的DataFrame(df)包含大量缺失值(NaN),所以从这一点来看,有多种可能性可以提取数据分析子集。 例如,如果您想创建一个子组合,比如df1,只能存储BTC,DASH和XMR,可以通过以下方式实现:
那些NaN可以分散注意力。 不好的做法是用固定值(例如零)替换它们,因为它引入了无效数据。 插值也是一个坏主意。 一个好的是根据选择的日期/时间间隔进行过滤,或强制所有的时间序列在同一天开始,数据可用于所有三个货币。 后者由pandas自动完成,如下所示:
在此选择2017年3月作为输入数据,所有21个加密时间序列将在以下内容中进行分析。
相关性基于PCA
相关矩阵:
PC loadings (columns, k=1,…,21):
现在,构建一个涵盖PCA的最后两个PC组件(PC-20和PC-21)中每个隐式货币的相对权重的二重曲线,该协方差矩阵涵盖2017年3月的全时间段:
我们需要确定最大负载的加密货币。 通过阈值,采用导出距离的平均值加上一个标准偏差。 接下来,检查每个货币的数量为1号,2号,3号或4号,保存为一个列表中的元组。 最后,通过分别添加x和y标签来完成一个双曲线的绘制:
第1季度“高于门槛值”的货币可能与第3季度发生的高度相关。同样适用于第2季度与第4季度。我们使用两种不同工具的这种货币对(密码时间序列)的线性相关性,即单因素线性回归(R2)和Kendall的等级相关度量τ
高度相关的加密货币:
ETC ETH
0.953695467194 1.13545626686e-16 # R^2 p-value
0.840760907233 3.03600231596e-11 # tau p-value
ETC PIVX
0.937915426073 7.20370581785e-15 # R^2 p-value
0.78875507792 4.55270029579e-10 # tau p-value
WAVES ETH
0.909168786883 1.48631538239e-12 # R^2 p-value
0.81377872765 1.26296896563e-10 # tau p-value
WAVES PIVX
0.894512813936 1.18055349284e-11 # R^2 p-value
0.753498821898 2.59829246278e-09 # tau p-value
- END -
- 通过“震网三代”和Siemens PLC 0day漏洞,实现对工控系统的入侵实验
- 安卓端渗透工具DVHMA:自带漏洞的混合模式APP
- 小萝莉说Crash(二): Unrecognized selector xxx 之 ForwardInvocation
- 5分钟教程:如何通过UART获得root权限
- 源码级剖析PHP 7.2.x GD拒绝服务漏洞
- 美女程序媛发福利,读懂ANR的trace文件So easy
- Openshift高阶探索实验
- 卡卡卡!小萝莉告诉你开发iOS应用如何避免卡顿
- Bugly即将支持的ANR,精神哥告诉你是个什么鬼?
- Go语言Goroutine与Channel内存模型
- 手把手教 | 深度学习库PyTorch(附代码)
- 如何定位Obj-C野指针随机Crash(一):先提高野指针Crash率
- 如何定位Obj-C野指针随机Crash(二):让非必现Crash变成必现
- 六种开发环境部署大全:基于Openshift
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java源码系列1——ArrayList
- 【Kubernetes】自定义资源CRDs不支持fieldselector
- Cypress系列(48)- and() 命令详解
- Java源码系列2——HashMap
- 快速学习-Saturn Console部署
- MySQL的各种日志
- 本地机器如何访问服务器上的docker容器内的tensorboard?
- MySQL是如何实现可重复读的?
- Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?
- 如何理解被 protected 修饰的成员变量?
- 重学数据结构(五、串)
- python boto和boto3操作bucket
- 对比 Redis 中 RDB 和 AOF 持久化
- Nginx负载均衡健康检查功能
- 深入浅出hiredis -- C++操作redis