in orderbook-it/src/main/java/com/epam/deltix/orderbook/it/OrderBookIT.java [131:252]
public void run() throws Throwable {
final String timebaseUrl = getArgValue("-url", "dxtick://localhost:8011");
final String timebaseUser = getArgValue("-user");
final String timebasePassword = getArgValue("-password");
final String streamKey = getArgValue("-stream", "bitmex");
final String symbol = getArgValue("-symbol", "BTC/USD");
long startTime = getLongArgValue("-start_time_ms", Long.MIN_VALUE);
final String startTimeStr = getArgValue("-start_time");
if (startTimeStr != null) {
startTime = Instant.parse(startTimeStr).toEpochMilli();
}
long endTime = getLongArgValue("-end_time_ms", Long.MAX_VALUE);
String endTimeStr = getArgValue("-end_time");
if (endTimeStr != null) {
endTime = Instant.parse(endTimeStr).toEpochMilli();
}
final DXTickDB db = timebaseUser != null ?
TickDBFactory.createFromUrl(timebaseUrl, timebaseUser, timebasePassword) :
TickDBFactory.createFromUrl(timebaseUrl);
db.open(true);
try {
final DXTickStream stream = db.getStream(streamKey);
if (stream == null) {
throw new RuntimeException("Can't find stream " + streamKey);
}
final long[] range = stream.getTimeRange();
if (startTime == Long.MIN_VALUE) {
startTime = range[0];
}
final StringBuilder resultBuilder = new StringBuilder();
LOGGER.info().append("Warmup pass...").commit();
resultBuilder.append(executed(symbol, startTime, startTime + 60 * 60 * 1000, stream, p -> {
}, "Black Hole", new Object()));
LOGGER.info().append("Main pass...").commit();
final OrderBookOptions symbolOptions = new OrderBookOptionsBuilder().symbol(symbol).build();
final OrderBookOptions l1SingleExchangeOptions = new OrderBookOptionsBuilder()
.parent(symbolOptions)
.orderBookType(OrderBookType.SINGLE_EXCHANGE)
.quoteLevels(DataModelType.LEVEL_ONE)
.initialDepth(500)
.initialExchangesPoolSize(1)
.updateMode(UpdateMode.WAITING_FOR_SNAPSHOT).build();
final OrderBook<OrderBookQuote> singleExchangeL1Book = OrderBookFactory.create(l1SingleExchangeOptions);
resultBuilder.append(executed(
symbol,
startTime,
endTime,
stream,
singleExchangeL1Book::update,
singleExchangeL1Book.getDescription(),
singleExchangeL1Book)
);
//
final OrderBookOptions l2CommonOptions = new OrderBookOptionsBuilder()
.parent(symbolOptions)
.quoteLevels(DataModelType.LEVEL_TWO)
.initialDepth(40).initialExchangesPoolSize(1)
.updateMode(UpdateMode.WAITING_FOR_SNAPSHOT).build();
final OrderBookOptions l2ConsolidatedOptions = new OrderBookOptionsBuilder()
.parent(l2CommonOptions)
.orderBookType(OrderBookType.CONSOLIDATED)
.build();
final OrderBook<OrderBookQuote> consolidatedBook = OrderBookFactory.create(l2ConsolidatedOptions);
resultBuilder.append(executed(
symbol,
startTime,
endTime,
stream,
consolidatedBook::update,
consolidatedBook.getDescription(),
consolidatedBook));
final OrderBookOptions l2AggregatedOptions = new OrderBookOptionsBuilder()
.parent(l2CommonOptions)
.orderBookType(OrderBookType.AGGREGATED)
.build();
final OrderBook<OrderBookQuote> aggregatedBook = OrderBookFactory.create(l2AggregatedOptions);
resultBuilder.append(executed(
symbol,
startTime,
endTime,
stream,
aggregatedBook::update,
aggregatedBook.getDescription(),
aggregatedBook)
);
final OrderBookOptions l2SingledExchangeOptions = new OrderBookOptionsBuilder()
.parent(l2CommonOptions)
.orderBookType(OrderBookType.SINGLE_EXCHANGE)
.build();
final OrderBook<OrderBookQuote> singleExchangeBook = OrderBookFactory.create(l2SingledExchangeOptions);
resultBuilder.append(executed(
symbol,
startTime,
endTime,
stream,
singleExchangeBook::update,
singleExchangeBook.getDescription(),
singleExchangeBook)
);
LOGGER.info("\n %s").with(resultBuilder);
} catch (final Throwable t) {
LOGGER.error().append("Failed to test").append(t).commit();
} finally {
db.close();
}
}