在制订投资策略时,咱们往往会钻研股票之间的相关性。钻研个股的相关性或者个股与指数,ETF之间的相关性,从而通过对冲套利来取得稳固收益。找到最相干的股票,能够依据交易员的教训,也能够依据股票的相干信息(行业,beta,每日回报等)。
本文将介绍如何利用海量的高频数据寻找最相干的股票。
假如咱们有一个数据表quotes,蕴含以下字段:
symbol:股票代码
date:日期
time:工夫
bid:买入价格
ofr:卖出价格
上面以纽约证券交易所2007年8月一个月实时报价数据的数据表quotes为例,计算股票在2007年8月1日的两两相关性。
- 抉择500只最具流动性的股票。留神,因为本文应用的是纽约证券交易所的数据集,所以收盘工夫是9:30-16:00。
dateValue=2007.08.01
num=500
syms = (exec count(*) from quotes where date = dateValue, time between 09:30:00 : 15:59:59, 0<bid, bid<ofr, ofr<bid*1.2 group by Symbol order by count desc).Symbol[0:num]
- 结构股票每分钟交易价格的矩阵。列示意股票,行示意分钟。
priceMatrix = exec avg(bid + ofr)/2.0 as price from quotes where date = dateValue, Symbol in syms, 0<bid, bid<ofr, ofr<bid*1.2, time between 09:30:00 : 15:59:59 pivot by time.minute() as minute, Symbol
exec和pivot by是DolphinDB编程语言的特点之一。exec与select的用法雷同,然而select子句生成的是表,exec子句生成的是向量。pivot by用于整顿维度,与exec一起应用时会生成一个矩阵。
- 生成股票回报矩阵
retMatrix = each(def(x):ratios(x)-1, priceMatrix)
- 生成500*500的股票回报相关矩阵
corrMatrix = cross(corr, retMatrix, retMatrix)
这时曾经生成了500只最具流动性股票的两两相关性矩阵,取每只股票相关性最高的10只股票。
mostCorrelated = select * from table(corrMatrix.columnNames() as sym, corrMatrix).unpivot(`sym, syms).rename!(`sym`corrSym`corr) context by sym having rank(corr,false) between 1:10
步骤3和步骤4中应用的模板函数each和cross是 DolphinDB database 中的高阶函数,它以函数和对象作为输出内容,把函数利用到每个对象上。模板函数在简单的批量计算中十分有用。
context by 语句是 DolphinDB database 编程语言的一个翻新,是对规范SQL的扩大,大大简化了对面板数据的操作。context by与group by相似,都是用于分组计算。它们的区别是,group by对每组计算产生一个后果,而context by可对每组计算产生与组中元素个数雷同的后果个数。换句话说,group by返回的后果个数等于组的个数,而context by返回后果的个数等于表中记录条数。context by减少了数据操作的灵活性,它能够把函数利用到组内的每个成员,这对组内计算的场景十分有用。
- 这时咱们能够剖析某只股票与其余股票的相关性。比方,取与雷曼兄弟股票相关性最高的10只股票。从后果看,排名前三的都是与雷曼兄弟处于同一行业的三个投行。如果要获得更好的成果,防止数据的必然性,能够计算更多天,而后取均匀。
select * from mostCorrelated where sym='LEH' order by corr desc
sym corrSym corr
LEH MS 0.7027
LEH GS 0.6825
LEH MER 0.6788
LEH IAI 0.6785
LEH IYG 0.6481
LEH IWF 0.6296
LEH OEF 0.6287
LEH IYF 0.6275
LEH IWP 0.6213
LEH IWB 0.6161
性能剖析
在2007年8月1日,共有8361只股票的实时报价数据,大概是3.8亿条数据。下面的代码须要对数据进行过滤,按分钟聚合,造成数据表透视,并进行矩阵迭代运算,如此简单的计算工作,DolphinDB在一个4节点(每节点8核)的集群上耗时仅8秒。除此之外,DolphinDB的代码非常简洁高效,只需4行外围代码即可实现,这得益于功能强大的编程语言。如果你对DolphinDB编程语言感兴趣,能够查看DolphinDB的混合范式编程。
感兴趣的敌人能够到官网下载DolphinDB钻研个股的相关性。
发表回复