asof (aj) присоединяется строго меньше, чем в KDB / Q - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть таблица котировок и таблица сделок, и я хотел бы перечислить таблицу котировок и присоединиться к таблице сделок, совпадающей по временным меткам, строго меньшим, чем временная метка сделки.

Например:

    q:([]time:10:00:00 10:01:00 10:01:00 10:01:02;sym:`ibm`ibm`ibm`ibm;qty:100 200 300 400)
    t:([]time:10:01:00 10:01:00 10:01:02;sym:`ibm`ibm`ibm;px:10 20 25)
    aj[`time;q;t]

возвращает

+------------+-----+-----+----+
|     time   | sym | qty | px |
+------------+-----+-----+----+
|   10:00:00 | ibm | 100 |    |
|   10:01:00 | ibm | 200 | 20 |
|   10:01:00 | ibm | 300 | 20 |
|   10:01:02 | ibm | 400 | 25 |
+------------+-----+-----+----+

Но я пытаюсь получить такой результат, как:

+------------+-----+-----+----+
|     time   | sym | qty | px |
+------------+-----+-----+----+
|   10:00:00 | ibm | 100 |    |
|   10:01:00 | ibm | 100 | 10 |
|   10:01:00 | ibm | 100 | 20 |
|   10:01:02 | ibm | 300 | 25 |
+------------+-----+-----+----+

Есть лифункция соединения, которая может соответствовать на основе временных меток, которые строго меньше времени, а не до и включительно?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Я думаю, что если вы измените aj[`time;q;t], вы не сможете изменить столбец qty, поскольку таблица t не содержит его.Вместо этого вам может понадобиться использовать более «традиционный» aj[`time;t;q]:

q)@[;`time;+;00:00:01]aj[`time;@[t;`time;-;00:00:01];q]
time     sym px qty
-------------------
10:01:00 ibm 10 100
10:01:00 ibm 20 100
10:01:02 ibm 25 300

. Это сдвигает времена, чтобы избежать совпадения, когда они равны, но не содержит строки для каждой цитаты, которую вы имели в начале.

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

0 голосов
/ 10 февраля 2019

Я думаю, что один «хакерский» способ - просто сдвинуть все сделки на минимальную единицу времени, а затем вернуться назад

...