public Order[] GetNextActions(LimitOrderBookSnapshot limitOrderBook) { var order = base.GetNextAction(limitOrderBook); var orders = new List<Order>(); if (order != null) { if (_lastOrder != null) { //cancel previous var cancelOrder = new Order(); cancelOrder.Type = OrderType.Cancel; cancelOrder.ID = _lastOrder.ID; orders.Add(cancelOrder); } orders.Add(order); _lastOrder = order; } return orders.ToArray(); }
public virtual Order GetNextAction(LimitOrderBookSnapshot limitOrderBook) { var size = Math.Ceiling(_maxOrderSize * _rng.GetRandomDouble()); var priceDiff = _maxPriceDifferential * Math.Abs(_normal.Sample()); Order order; var randomNumber = _rng.GetRandomDouble(); if (randomNumber > (0.5 + (_doNothingProbability/2))) { //buylimitorder var price = Math.Round(limitOrderBook.BestAskPrice.Value - priceDiff, _decimals); order = new Order { Price = price, Quantity = size, Side = OrderSide.Buy,Type = OrderType.LimitOrder, Valid = true}; } else if (randomNumber < (0.5 - (_doNothingProbability/2))) { //selllimitorder var price = Math.Round(limitOrderBook.BestBidPrice.Value + priceDiff, _decimals); order = new Order { Price = price, Quantity = size, Side = OrderSide.Sell, Type = OrderType.LimitOrder, Valid = true }; } else { //donothing order = null; } return order; }
// [TestMethod] public void GetPriceDistribution() { var lob = new LimitOrderBookSnapshot(); lob.BestAskPrice = 101; lob.BestBidPrice = 99; var buyPrices = new SortedDictionary<double, int>(); var sellPrices = new SortedDictionary<double, int>(); var agent = new RandomLiquidityMaker(new CSharpRandomNumberGenerator(), 100, 10, 0, new Normal(0,0.2),2); for (int i = 0; i < 100000000; i++) { var order = agent.GetNextAction(lob); if (order.Side == OrderSide.Buy) { if (!buyPrices.ContainsKey(order.Price)) { buyPrices.Add(order.Price, 0); } buyPrices[order.Price]++; } else { if (!sellPrices.ContainsKey(order.Price)) { sellPrices.Add(order.Price, 0); } sellPrices[order.Price]++; } } var lines = new List<string>(); foreach (var price in buyPrices) { lines.Add(string.Format("{0},{1}", price.Key, price.Value)); } foreach (var price in sellPrices) { lines.Add(string.Format("{0},{1}", price.Key, price.Value)); } File.WriteAllLines(@"c:\temp\test.csv", lines); }
public Order GetNextAction(LimitOrderBookSnapshot limitOrderBook) { Order order; var size = Math.Ceiling(_maxOrderSize * _rng.GetRandomDouble()); var randomNumber = _rng.GetRandomDouble(); if (randomNumber < (0.5 - (_doNothingProbability / 2))) { //buymarketdorder order = new Order() {Quantity = size,Type = OrderType.MarketOrder, Side = OrderSide.Buy }; } else if (randomNumber > (0.5 + (_doNothingProbability / 2))) { order = new Order() { Quantity = size, Type = OrderType.MarketOrder, Side = OrderSide.Sell }; } else { //do nothing order = null; } return order; }
private static void UpdateLimitOrderBook(LimitOrderBookSnapshot data) { if (data.BestAskPrice != null) { data.BestAskPrice = data.BestAskPrice ?? _lob.BestAskPrice; data.BestBidPrice = data.BestBidPrice ?? _lob.BestBidPrice; _lob = data; System.Console.WriteLine(data.BestBidPrice + "\t\t\t" + data.BestAskPrice); System.IO.File.AppendAllLines(@"c:\temp\test.csv", new string[] { DateTime.Now.Ticks + "," + data.BestBidPrice + "," + data.BestAskPrice }); } }
private static void UpdateLimitOrderBook(LimitOrderBookSnapshot data) { if (data != null) { _currentLimitOrderBook = data; } }
public bool PushUpdate(ILimitOrderBook limitOrderBook) { var orderBookSnapshot = new LimitOrderBookSnapshot(); orderBookSnapshot.BestAskPrice = limitOrderBook.BestAsk != null ? (double?)limitOrderBook.BestAsk.Price : null; orderBookSnapshot.BestAskQuantity = limitOrderBook.BestAsk != null ? (double?)limitOrderBook.BestAsk.Quantity : null; orderBookSnapshot.BestBidPrice = limitOrderBook.BestBid != null ? (double?)limitOrderBook.BestBid.Price : null; orderBookSnapshot.BestBidQuantity = limitOrderBook.BestBid != null ? (double?)limitOrderBook.BestBid.Quantity : null; var dataConnections = ConnectionIDs.Where(c => DataListeners.Contains(c.Key)).Select(c => c.Value); foreach (var connID in dataConnections) { _clientsInstance.Value.Client(connID).Update(orderBookSnapshot); } return true; }