KDB - сравнить значение со значением x строк назад (дельты, но возвращаются x строк) - PullRequest
1 голос
/ 27 мая 2019

У меня есть таблица с прибором, временем, ценой

Instrument   Time                            Price
Stock x      2019.05.17D10:01:00.000000000   1.2
Stock x      2019.05.17D10:02:00.000000000   1.4
Stock x      2019.05.17D10:03:00.000000000   1.3
Stock x      2019.05.17D10:04:00.000000000   1.2
Stock x      2019.05.17D10:05:00.000000000   1.4
Stock x      2019.05.17D10:06:00.000000000   1.6
Stock x      2019.05.17D10:07:00.000000000   2.3
Stock x      2019.05.17D10:08:00.000000000   2.4
Stock x      2019.05.17D10:09:00.000000000   2.2
Stock x      2019.05.17D10:10:00.000000000   2.5

Затем я хочу сравнить динамику цен дельт за текущее окно, возвращаясь на х минут назад.

Если я это сделаючто-то вроде

     newdata:({0,1_deltas x}(close))%(close) by Instrument from Table

Я получаю сравнение на 1 строку назад.(1.2 / 1.4 // 1.4 / 1.3 // 1.3 / 1.2)

A: Я хотел бы сделать дельты - но вернусь на несколько строк назад.Значение с x = 5 строк 1.2 / 1.6 // 1.4 / 2.3 // и т. Д.

B: Если в какой-то момент мне не хватает минутных данных - Deltas не будет учитывать разницу в минутах (а изменение цены будетне так легко сравнимо) - поэтому я хотел бы знать, как я могу найти решение, которое не только сравнивает с предыдущими x строками, но и конкретно фокусируется на разнице во времени, когда идет сравнение в ретроспективе.

1 Ответ

2 голосов
/ 29 мая 2019

Если вы хотите просто основать просмотр на x строках, вы можете использовать xprev .

tab:([]sym:10#`MSFT;time:(2019.05.01D10:00:00.000000+/:00:01+til 10);price:(1.2;1.4;1.3;1.2;1.4;1.6;2.3;2.4;2.2;2.5))

//Can adjust the row lookback value
update diff:(lookback-price) from update lookback:{y xprev x}[;5] price by sym from tab

Это также должно учитывать сценарий B, так как он будет возвращать ноль, который может быть исключен из любых расчетов динамики цен. Однако, если ваши данные не были объединены в 1-минутные интервалы, и вы хотите оглянуться назад вовремя, вам нужно будет создать некую форму объединения окон, хороший пример можно найти здесь Скользящее окно в мульти группы

...