Nothing
## ---- include=FALSE------------------------------------------------------
library(obAnalytics)
knitr::opts_chunk$set(dpi=100, fig.width=10, fig.height=6, results="hide")
## -----------------------------------------------------------------------------
max.cols <- Sys.getenv("COLUMNS")
options(width=if(max.cols != "") max.cols else 80, scipen=999, digits.secs=3)
## ---- eval=F------------------------------------------------------------------
# # load and process example csv data from the package inst/extdata directory.
# csv.file <- system.file("extdata", "orders.csv.xz", package="obAnalytics")
# lob.data <- processData(csv.file)
## -----------------------------------------------------------------------------
data(lob.data)
## -----------------------------------------------------------------------------
one.sec <- with(lob.data, {
events[events$timestamp >= as.POSIXct("2015-05-01 04:55:10", tz="UTC") &
events$timestamp <= as.POSIXct("2015-05-01 04:55:11", tz="UTC"), ]
})
one.sec$volume <- one.sec$volume*10^-8
one.sec$fill <- one.sec$fill*10^-8
one.sec$aggressiveness.bps <- round(one.sec$aggressiveness.bps, 2)
one.sec <- one.sec[, c("event.id", "id", "price", "volume", "action",
"direction", "fill", "matching.event", "type", "aggressiveness.bps")]
colnames(one.sec) <- c(c("event.id", "id", "price", "vol", "action", "dir",
"fill", "match", "type", "agg"))
print(one.sec, row.names=F)
## ---- echo=F, results="markup"------------------------------------------------
knitr::kable(one.sec, row.names=F)
## -----------------------------------------------------------------------------
trades.ex <- tail(lob.data$trades, 10)
trades.ex$volume <- round(trades.ex$volume*10^-8, 2)
print(trades.ex, row.names=F)
## ----example trades, echo=F, results="markup"---------------------------------
knitr::kable(trades.ex, digits=2, row.names=F)
## -----------------------------------------------------------------------------
# get a limit order book for a specific point in time, limited to +- 150bps
# above/below best bid/ask price.
lob <- orderBook(lob.data$events,
tp=as.POSIXct("2015-05-01 04:38:17.429", tz="UTC"), bps.range=150)
# visualise the order book liquidity.
plotCurrentDepth(lob, volume.scale=10^-8)
## -----------------------------------------------------------------------------
# plot all lob.data price level volume between $233 and $245 and overlay the
# market midprice.
spread <- getSpread(lob.data$depth.summary)
plotPriceLevels(lob.data$depth, spread, price.from=233, price.to=245,
volume.scale=10^-8, col.bias=0.25, show.mp=T)
## -----------------------------------------------------------------------------
# plot 1 hour of trades centred around the bid/ask spread.
plotPriceLevels(lob.data$depth, trades=lob.data$trades,
price.from=236, price.to=237.75, volume.scale=10^-8, col.bias=0.2,
start.time=as.POSIXct("2015-05-01 01:00:00.000", tz="UTC"),
end.time=as.POSIXct("2015-05-01 02:00:00.000", tz="UTC"))
## -----------------------------------------------------------------------------
# zoom in to 30 minutes of bid/ask quotes.
plotPriceLevels(lob.data$depth, spread, price.from=235.25, price.to=237,
start.time=as.POSIXct("2015-05-01 00:45:00.000", tz="UTC"),
end.time=as.POSIXct("2015-05-01 01:15:00.000", tz="UTC"),
volume.scale=10^-8, col.bias=0.5, show.mp=F)
## -----------------------------------------------------------------------------
# zoom in to 4 minutes of bid/ask quotes.
plotPriceLevels(lob.data$depth, spread, price.from=235.90, price.to=236.25,
start.time=as.POSIXct("2015-05-01 00:55:00.000", tz="UTC"),
end.time=as.POSIXct("2015-05-01 00:59:00.000", tz="UTC"),
volume.scale=10^-8, col.bias=0.5, show.mp=F)
## -----------------------------------------------------------------------------
plotPriceLevels(lob.data$depth, spread, price.from=232.5, price.to=237.5,
volume.scale=10^-8, col.bias=1, show.mp=T,
end.time=as.POSIXct("2015-05-01 01:30:00.000", tz="UTC"),
volume.from=8.59, volume.to=8.72)
## -----------------------------------------------------------------------------
plotPriceLevels(lob.data$depth, price.from=235.65, price.to=237.65,
volume.scale=10^-8, col.bias=1,
start.time=as.POSIXct("2015-05-01 01:00:00.000", tz="UTC"),
end.time=as.POSIXct("2015-05-01 03:00:00.000", tz="UTC"),
volume.from=3.63, volume.to=3.83)
## -----------------------------------------------------------------------------
plotVolumePercentiles(lob.data$depth.summary, volume.scale=10^-8, perc.line=F,
start.time=as.POSIXct("2015-05-01 01:00:00.000", tz="UTC"),
end.time=as.POSIXct("2015-05-01 04:00:00.000", tz="UTC"))
## -----------------------------------------------------------------------------
# visualise 5 minutes of order book liquidity.
# data will be aggregated to second-by-second resolution.
plotVolumePercentiles(lob.data$depth.summary,
start.time=as.POSIXct("2015-05-01 04:30:00.000", tz="UTC"),
end.time=as.POSIXct("2015-05-01 04:35:00.000", tz="UTC"),
volume.scale=10^-8)
## -----------------------------------------------------------------------------
plotVolumeMap(lob.data$events, volume.scale=10^-8, log.scale = T)
## -----------------------------------------------------------------------------
plotVolumeMap(lob.data$events, volume.scale=10^-8, volume.from=3.5, volume.to=4)
## -----------------------------------------------------------------------------
plotVolumeMap(lob.data$events, volume.scale=10^-8, volume.from=8.59,
volume.to=8.72)
## -----------------------------------------------------------------------------
tp <- as.POSIXct("2015-05-01 04:25:15.342", tz="UTC")
ob <- orderBook(lob.data$events, max.levels=10)
print(ob)
## ----example order book, echo=F, results="markup"-----------------------------
with(ob, {
asks$liquidity <- asks$liquidity*10^-8
bids$liquidity <- bids$liquidity*10^-8
cols <- c("id", "timestamp", "liquidity", "price")
knitr::kable(cbind(bids[, cols], asks[order(asks$liquidity), rev(cols)]),
row.names=F, align=c("r","r","r","r","l","l","l","l"), digits=2)
})
## -----------------------------------------------------------------------------
impacts <- tradeImpacts(lob.data$trades)
impacts <- impacts[impacts$dir == "sell", ]
bps <- 10000 * (impacts$max.price - impacts$min.price) / impacts$max.price
types <- with(lob.data, events[match(impacts$id, events$id), ]$type)
impacts <- cbind(impacts, type=types, bps)
head(impacts[order(-impacts$bps), ], 10)
## ----impacts example, echo=F, results="markup"--------------------------------
impacts <- tradeImpacts(lob.data$trades)
impacts <- impacts[impacts$dir == "sell", ]
impacts <- impacts[, c("id", "max.price", "min.price", "vwap", "hits", "vol",
"end.time")]
impacts$vol <- impacts$vol*10^-8
bps <- 10000 * (impacts$max.price - impacts$min.price) / impacts$max.price
types <- with(lob.data, events[match(impacts$id, events$id), ]$type)
impacts <- cbind(impacts, type=types, bps)
knitr::kable(head(impacts[order(-impacts$bps), ], 10), row.names=F, digits=2)
## -----------------------------------------------------------------------------
impact <- with(lob.data, trades[trades$taker == 65596324,
c("timestamp", "price", "volume", "maker")])
makers <- with(lob.data, events[match(impact$maker, events$id), ])
makers <- makers[makers$action == "created",
c("id", "timestamp", "aggressiveness.bps")]
impact <- cbind(impact, maker=makers[match(impact$maker, makers$id),
c("timestamp", "aggressiveness.bps")])
age <- impact$timestamp - impact$maker.timestamp
impact <- cbind(impact[!is.na(age), c("timestamp", "price", "volume",
"maker.aggressiveness.bps")], age[!is.na(age)])
colnames(impact) <- c("timestamp", "price", "volume", "maker.agg", "age")
impact$volume <- impact$volume*10^-8
print(impact)
## ----impact example, echo=F, results="markup"---------------------------------
knitr::kable(impact, row.names=F, digits=2)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.