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)selectfromdailywheredate=2016.11.10datesymohlc-----------------------------------------2016.11.100000019.19.169.19.142016.11.100000022628.2825.5826.562016.11.100000044546.8744.8545.32016.11.100000057.457.687.447.532016.11.1000000610.0910.1710.0610.12..

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

q)-10#selectfromdailywheresym=`002695datesymohlc-----------------------------------------2016.10.2500269526.0327.524.5526.732016.10.2600269525.927.8925.8226.852016.10.2700269526.729.5426.3329.542016.11.0200269532.4932.4930.8632.492016.11.030026953435.7432.2132.772016.11.0400269532.3133.6930.1530.512016.11.0700269530.183129.630.592016.11.0800269530.4832.5629.7831.42016.11.0900269530.5331.9930.0531.52016.11.1000269531.831.9930.831.19

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

q)-10#selectdate,sym,o,h,l,c,MA5:mavg[5;c],MA10:mavg[10;c],MA20:mavg[20;c]fromdailywheresym=`002695datesymohlcMA5MA10MA20---------------------------------------------------------------2016.10.2500269526.0327.524.5526.7323.04420.10818.70452016.10.2600269525.927.8925.8226.8524.58821.08219.11552016.10.2700269526.729.5426.3329.5426.28822.35119.632016.11.0200269532.4932.4930.8632.4928.18423.8620.3422016.11.030026953435.7432.2132.7729.67625.42621.15352016.11.0400269532.3133.6930.1530.5130.43226.73821.8342016.11.0700269530.183129.630.5931.1827.88422.52952016.11.0800269530.4832.5629.7831.431.55228.9223.2892016.11.0900269530.5331.9930.0531.531.35429.76924.052016.11.1000269531.831.9930.831.1931.03830.35724.757

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

q)-10#selectdate,sym,o,h,l,c,MA5:ema[2%1+10;c]fromdailywheresym=`002695datesymohlcMA5--------------------------------------------------2016.10.2500269526.0327.524.5526.7321.396752016.10.2600269525.927.8925.8226.8522.388252016.10.2700269526.729.5426.3329.5423.688572016.11.0200269532.4932.4930.8632.4925.288832016.11.030026953435.7432.2132.7726.649042016.11.0400269532.3133.6930.1530.5127.351032016.11.0700269530.183129.630.5927.939942016.11.0800269530.4832.5629.7831.428.569042016.11.0900269530.5331.9930.0531.529.101942016.11.1000269531.831.9930.831.1929.48159

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

q)10cutexecdistinctsymfromdailywhere1b=({(max-250#x)=max-20#x};c)fbysym,2016.11.10=(last;date)fbysym000019000034000338000404000503000510000513000518000550000567000568000581000607000615000635000639000661000678000721000723000731000780000818000820000823000881000889000895000910000912000913000915000935000937000951000953000959000960000993002013002050002051002082002085002088002094002113002120002122002124002132002141002150002167002194002206002212002213002264002317002319002333002352002365002374002386002421002456002476002486..