kdb+(基于K语言的db, 增强版,也简称kdb)是非常小众的一个数据库,它有非常高的性能,丰富高效的时间序列函数,在存取和实时分析海量股票、×××等高频数据这个领域内,唯kdb独尊。

kdb+是一个基于列的内存数据库,由KxSystems开发和销售。它通常用于高频交易,非常适用于高速存储,分析,处理和检索大型数据集。kdb+能够处理数十亿条记录并分析数据库中的数据。该数据库通过各种操作系统提供32位(免费)和64位版本。金融机构使用kdb+来分析时间序列数据,例如股票或商品交易数据。该数据库还用于其他时间敏感的数据应用,包括股票和大宗商品交易,电信,传感器数据,日志数据以及机器和网络使用监控。
q语言是由Arthur Whitney开发并由Kx商业化的专有阵列处理语言。该语言用作kdb+的查询语言,kdb+基于K语言(APL语言的一个变体)。q语言是K简洁包装,它提供一些可读性。

kdb+的丰富的时间序列函数可以帮助我们轻松的进行股票计算,我有一个基于Kdb的A股数据库,daily表存储了沪市A股和深市A股的日线数据(前复权)。让我们来看看Kdb+的数据处理,随后的文章会向大家解释怎样使用kdb和如何创建这个数据库。


1. 查询某一日股票(sym)的开盘价(o)、最高价(o)、最低价(l)、收盘价(c)。以下结果只显示了5条数据,其他数据忽略了。

q)select from daily where date = 2016.11.10
date       sym    o     h     l     c
-----------------------------------------
2016.11.10 000001 9.1   9.16  9.1   9.14
2016.11.10 000002 26    28.28 25.58 26.56
2016.11.10 000004 45    46.87 44.85 45.3
2016.11.10 000005 7.45  7.68  7.44  7.53
2016.11.10 000006 10.09 10.17 10.06 10.12
..

2. 查询股票002695(煌上煌)最近10个交易日的价格。

q)-10#select from daily where sym=`002695
date       sym    o     h     l     c
-----------------------------------------
2016.10.25 002695 26.03 27.5  24.55 26.73
2016.10.26 002695 25.9  27.89 25.82 26.85
2016.10.27 002695 26.7  29.54 26.33 29.54
2016.11.02 002695 32.49 32.49 30.86 32.49
2016.11.03 002695 34    35.74 32.21 32.77
2016.11.04 002695 32.31 33.69 30.15 30.51
2016.11.07 002695 30.18 31    29.6  30.59
2016.11.08 002695 30.48 32.56 29.78 31.4
2016.11.09 002695 30.53 31.99 30.05 31.5
2016.11.10 002695 31.8  31.99 30.8  31.19

3. 计算002695(煌上煌)的5日、10日、20日的简单移动平均价格

q)-10#select date,sym,o,h,l,c, MA5:mavg[5;c],MA10:mavg[10;c], MA20:mavg[20;c] from daily where sym=`002695
date       sym    o     h     l     c     MA5    MA10   MA20
---------------------------------------------------------------
2016.10.25 002695 26.03 27.5  24.55 26.73 23.044 20.108 18.7045
2016.10.26 002695 25.9  27.89 25.82 26.85 24.588 21.082 19.1155
2016.10.27 002695 26.7  29.54 26.33 29.54 26.288 22.351 19.63
2016.11.02 002695 32.49 32.49 30.86 32.49 28.184 23.86  20.342
2016.11.03 002695 34    35.74 32.21 32.77 29.676 25.426 21.1535
2016.11.04 002695 32.31 33.69 30.15 30.51 30.432 26.738 21.834
2016.11.07 002695 30.18 31    29.6  30.59 31.18  27.884 22.5295
2016.11.08 002695 30.48 32.56 29.78 31.4  31.552 28.92  23.289
2016.11.09 002695 30.53 31.99 30.05 31.5  31.354 29.769 24.05
2016.11.10 002695 31.8  31.99 30.8  31.19 31.038 30.357 24.757

4. 计算002695(煌上煌)的10日指数移动平均

q)-10#select date,sym,o,h,l,c, MA5:ema[2%1+10;c] from daily where sym=`002695
date       sym    o     h     l     c     MA5
--------------------------------------------------
2016.10.25 002695 26.03 27.5  24.55 26.73 21.39675
2016.10.26 002695 25.9  27.89 25.82 26.85 22.38825
2016.10.27 002695 26.7  29.54 26.33 29.54 23.68857
2016.11.02 002695 32.49 32.49 30.86 32.49 25.28883
2016.11.03 002695 34    35.74 32.21 32.77 26.64904
2016.11.04 002695 32.31 33.69 30.15 30.51 27.35103
2016.11.07 002695 30.18 31    29.6  30.59 27.93994
2016.11.08 002695 30.48 32.56 29.78 31.4  28.56904
2016.11.09 002695 30.53 31.99 30.05 31.5  29.10194
2016.11.10 002695 31.8  31.99 30.8  31.19 29.48159

5. 找出最近20个交易日内创年新高的股票代码

q)10 cut exec distinct sym from daily where 1b= ({(max -250#x) = max -20#x};c) fby sym,2016.11.10=(last;date) fby sym
000019 000034 000338 000404 000503 000510 000513 000518 000550 000567
000568 000581 000607 000615 000635 000639 000661 000678 000721 000723
000731 000780 000818 000820 000823 000881 000889 000895 000910 000912
000913 000915 000935 000937 000951 000953 000959 000960 000993 002013
002050 002051 002082 002085 002088 002094 002113 002120 002122 002124
002132 002141 002150 002167 002194 002206 002212 002213 002264 002317
002319 002333 002352 002365 002374 002386 002421 002456 002476 002486
..