在制订投资策略时,咱们往往会钻研股票之间的相关性。钻研个股的相关性或者个股与指数,ETF之间的相关性,从而通过对冲套利来取得稳固收益。找到最相干的股票,能够依据交易员的教训,也能够依据股票的相干信息(行业,beta,每日回报等)。
本文将介绍如何利用海量的高频数据寻找最相干的股票。
假如咱们有一个数据表quotes,蕴含以下字段:
symbol:股票代码
date:日期
time:工夫
bid:买入价格
ofr:卖出价格
上面以纽约证券交易所2007年8月一个月实时报价数据的数据表quotes为例,计算股票在2007年8月1日的两两相关性。
- 抉择500只最具流动性的股票。留神,因为本文应用的是纽约证券交易所的数据集,所以收盘工夫是9:30-16:00。
dateValue=2007.08.01num=500syms = (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 descsym corrSym corrLEH MS 0.7027LEH GS 0.6825LEH MER 0.6788LEH IAI 0.6785LEH IYG 0.6481LEH IWF 0.6296LEH OEF 0.6287LEH IYF 0.6275LEH IWP 0.6213LEH IWB 0.6161
性能剖析
在2007年8月1日,共有8361只股票的实时报价数据,大概是3.8亿条数据。下面的代码须要对数据进行过滤,按分钟聚合,造成数据表透视,并进行矩阵迭代运算,如此简单的计算工作,DolphinDB在一个4节点(每节点8核)的集群上耗时仅8秒。除此之外,DolphinDB的代码非常简洁高效,只需4行外围代码即可实现,这得益于功能强大的编程语言。如果你对DolphinDB编程语言感兴趣,能够查看DolphinDB的混合范式编程。
感兴趣的敌人能够到官网下载DolphinDB钻研个股的相关性。