Я работаю с дневной торговой базой данных. У меня есть база данных TAQ (Trade and Quote), поэтому для каждого тика у меня есть дата (класс POSIXct), тип (BID, ASK, TRADE), цена и размер. Мне нужно добавить глубину BID и ASK непосредственно перед ТОРГОВЛЕ.
Вот пример базы данных:
df = structure(data.frame(date = as.POSIXct(c(rep("2017-12-13 09:15:00", 2), rep("2017-12-13 09:30:00", 2), "2017-12-13 09:31:00", "2017-12-13 09:31:01",
rep("2017-12-13 09:32:00", 2), "2017-12-13 09:33:00", rep("2017-12-13 09:35:00", 3), rep("2017-12-13 09:38:00", 4),
"2017-12-13 09:40:00", "2017-12-13 09:41:00", "2017-12-13 09:41:05","2017-12-13 09:41:10", "2017-12-13 09:43:00",
"2017-12-13 09:43:05", "2017-12-13 09:45:00", "2017-12-13 09:45:50", "2017-12-13 09:46:30"), tz=""),
type = structure(c("ASK", rep("BID", 2), "TRADE", rep("BID", 3), "ASK", "TRADE", "ASK", "TRADE", "ASK", rep("BID", 2),
rep("TRADE", 2), "BID", rep("ASK", 3), rep("TRADE", 2), "ASK", "BID", "TRADE"), class = "character"),
price = structure( c(1915, rep(1905, 3), rep(1910, 2), 1905, 1920, 1910, rep(1915, 3),
rep(1905, 4), 1910, rep(1920, 5), 1915, 1905, 1910), class = "numeric"),
size = structure(c(rep(1000, 3), 2000, rep(1000, 4), 2000, rep(1000, 3), rep(2000, 2), 1000, 1500,
rep(1000, 8), 2000), class = "numeric")), class = "data.frame")
И ожидаемый результат:
date type price size BID_size ASK_size
1 2017-12-13 09:15:00 ASK 1915 1000 NA NA
2 2017-12-13 09:15:00 BID 1905 1000 NA NA
3 2017-12-13 09:30:00 BID 1905 1000 NA NA
4 2017-12-13 09:30:00 TRADE 1905 2000 2000 1000
5 2017-12-13 09:31:00 BID 1910 1000 NA NA
6 2017-12-13 09:31:01 BID 1910 1000 NA NA
7 2017-12-13 09:32:00 BID 1905 1000 NA NA
8 2017-12-13 09:32:00 ASK 1920 1000 NA NA
9 2017-12-13 09:33:00 TRADE 1910 2000 2000 1000
10 2017-12-13 09:35:00 ASK 1915 1000 NA NA
11 2017-12-13 09:35:00 TRADE 1915 1000 1000 1000
12 2017-12-13 09:35:00 ASK 1915 1000 NA NA
13 2017-12-13 09:38:00 BID 1905 2000 NA NA
14 2017-12-13 09:38:00 BID 1905 2000 NA NA
15 2017-12-13 09:38:00 TRADE 1905 1000 4000 1000
16 2017-12-13 09:38:00 TRADE 1905 1500 3000 1000
17 2017-12-13 09:40:00 BID 1910 1000 NA NA
18 2017-12-13 09:41:00 ASK 1920 1000 NA NA
19 2017-12-13 09:41:05 ASK 1920 1000 NA NA
20 2017-12-13 09:41:10 ASK 1920 1000 NA NA
21 2017-12-13 09:43:00 TRADE 1920 1000 1000 3000
22 2017-12-13 09:43:05 TRADE 1920 1000 1000 2000
23 2017-12-13 09:45:00 ASK 1915 1000 NA NA
24 2017-12-13 09:45:50 BID 1905 1000 NA NA
25 2017-12-13 09:46:30 TRADE 1910 2000 1000 1000
Я пытался создать индикатор между сделками, найти тип с той же ценой, что и TRADE, и суммировать все строки, наконец, для другой цитаты найти лучший BID / ASK, но мои навыки программирования с объектами POSIXct и движениями между строками слишком основны c. Я надеюсь, что вы можете мне помочь. Большое спасибо.