У меня есть некоторые торговые данные, и мне нужно захватить время, необходимое для достижения границы PRICE
(для ордеров на продажу это разница между временем размещения ордера на покупку, на PRICE
больше или равная один в порядке и времени размещения ордера на продажу и наоборот для ордеров на покупку).
Вот пример данных:
> head(data)
V1 NO SECCODE BUYSELL TIME ORDERNO ACTION PRICE VOLUME TRADENO TRADEPRICE
1: 1 846 SU26205RMFS3 B 100000000 846 1 80.00 50 <NA> NA
2: 2 847 SU26207RMFS9 B 100000000 847 1 77.00 100 <NA> NA
3: 3 866 SU29009RMFS6 B 100000000 866 1 101.00 5 <NA> NA
4: 4 1026 SU46022RMFS8 S 100000000 1026 1 74.20 123 <NA> NA
5: 5 1097 SU26208RMFS7 B 100000000 1097 1 88.15 4800 <NA> NA
6: 6 1105 SU26208RMFS7 B 100000000 1105 1 88.15 15000 <NA> NA
Один из способов решения этой проблемы (для ордеров на продажу):
buy_placement <- subset(data, select=c("PRICE", "TIME", "ACTION", "BUYSELL"))
buy_placement <- filter(buy_placement, ACTION == 1, BUYSELL == "B")
buy_placement$ACTION = NULL
buy_placement$BUYSELL = NULL
sell_placement <- subset(data, select=c("PRICE", "TIME", "ACTION", "BUYSELL"))
sell_placement <- filter(sell_placement, ACTION == 1, BUYSELL == "S")
sell_placement$ACTION = NULL
sell_placement$BUYSELL = NULL
и затем извлечение каждого элемента в buy_placement
с PRICE
больше, чем в sell_placement
при условии, что TIME
в buy_placement
больше, чем в sell_placement
и SECCODE
(код связь), возможно, то же самое, возможно, с функцией apply
. Результатом будет набор данных, где каждый ордер на продажу соответствует множеству возможных ордеров на покупку. Тогда время первого прохождения будет просто минимальной разницей между временами всех соответствующих размещений ордеров на покупку и размещением ордеров на продажу для каждого ордера на продажу. Однако мне нужно будет как-то убедиться, что каждый из этих ордеров на продажу не был отменен (ACTION
= 0) до появления приемлемого противоположного ордера (я не уверен, что в этом случае даже можно учесть отмены, если любой может решить это без него, помощь все равно будет оценена).
Я не уверен, как реализовать описанный мной способ, и могут быть более простые способы сделать это (возможно, прямой способ извлечь время остановки при определенных условиях), поэтому любая помощь приветствуется.