Как преобразовать тиковые данные в 5-минутный OHLC? - PullRequest
4 голосов
/ 30 ноября 2011

Я изучаю KDB + и загрузил данные тика в таблицу W, как показано ниже. У меня вопрос, как перенести данные за 5 (или n) минут OHLCVA?

"Stk_ID","Date","Time","Price","Chg","Vol","Amt","Ty"
300032,2011-03-03,09:51:40,20.40,0.00,10.0,20400.0,S
300032,2011-03-03,09:51:30,20.40,-0.01,9.0,18360.0,S
300032,2011-03-03,09:51:00,20.41,0.01,2.0,4082.0,B
300032,2011-03-03,09:51:00,20.40,-0.01,115.0,234599.0,S
300032,2011-03-03,09:50:45,20.41,0.00,10.0,20410.0,S
300032,2011-03-03,09:50:45,20.41,-0.02,7.0,14287.0,S
300032,2011-03-03,09:50:20,20.43,-0.01,4.0,8172.0,S
300032,2011-03-03,09:50:05,20.44,0.01,25.0,51100.0,B
300032,2011-03-03,09:50:00,20.43,-0.01,28.0,57204.0,S

Я использую такой код Q, чтобы получить данные за 1 минуту, но не знаю, как получить 5 минут. :

select Open: first price,High: max price, Low: min price,Close: last price,Vol: sum vol, Amt: sum amt,Avg_Price: ((sum amt)%(sum vol))%100 by stk_id,time.hh,time.mm from asc W

результат:

stk_id hh mm| Open  High  Low   Close Vol  Amt           Avg_Price
------------| ----------------------------------------------------
000001 9  30| 16.24 16.24 16.22 16.24 3253 5282086       16.23758
000001 9  31| 16.22 16.24 16.21 16.21 1974 3204276       16.2324
000001 9  32| 16.23 16.23 16.2  16.2  3764 6102207       16.21203
000001 9  33| 16.21 16.21 16.19 16.2  4407 7143120       16.20858
000001 9  34| 16.2  16.2  16.19 16.19 1701 2756614       16.20584
000001 9  35| 16.19 16.21 16.19 16.21 2756 4466988       16.20823
000001 9  36| 16.22 16.25 16.22 16.24 3123 5076089       16.25389
000001 9  37| 16.25 16.27 16.25 16.27 1782 2897340       16.25892

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

Вместо того, чтобы группировать отдельно по time.hh, а затем по time.mm, я бы рекомендовал создать одну группу:

by stk_id,time.minute

Оттуда все, что вам нужно сделать для 5-минутных интервалов, это использовать xbar:

by stk_id,5 xbar time.minute
0 голосов
/ 12 июня 2018

Несколько более динамичный вариант агрегирования значений:

q)b:`Date`Time`stk!(`Date;(xbar;1;`Time.minute);`Stk_ID)
q)a:`op`cp`hp`lp!((first;`Price);(last;`Price);(max;`Price);(min;`Price))

q)?[w;();b;a]  
Date Time  stk   | op    cp    hp    lp
-----------------| -----------------------
2011 09:50 300032| 20.41 20.43 20.44 20.41
2011 09:51 300032| 20.4  20.4  20.41 20.4
...