private OrderBookLevelNoSql ConvertOrder(OrderBookOrder order) { return(new OrderBookLevelNoSql( Convert.ToDecimal(order.Price), Convert.ToDecimal(order.Volume), order.SequenceNumber, order.WalletId, order.OrderId)); }
public void Test1() { var json = "{\"Header\":{\"MessageType\":4,\"SequenceNumber\":478300,\"MessageId\":\"f0274b527bc34fe48608d67384794434\",\"RequestId\":\"14905114d81546a8b0c90954a2ffbedc\",\"Version\":\"1\",\"Timestamp\":{\"Seconds\":1617371913,\"Nanos\":93000000},\"EventType\":\"MARKET_ORDER\"},\"BalanceUpdates\":[{\"BrokerId\":\"jetwallet\",\"AccountId\":\"alex\",\"WalletId\":\"SP-alex\",\"WalletVersion\":30,\"AssetId\":\"BTC\",\"OldBalance\":\"0.01243\",\"NewBalance\":\"0.01242801\",\"OldReserved\":\"0\",\"NewReserved\":\"0\"},{\"BrokerId\":\"jetwallet\",\"AccountId\":\"alex\",\"WalletId\":\"SP-alex\",\"WalletVersion\":3,\"AssetId\":\"EUR\",\"OldBalance\":\"1000000\",\"NewBalance\":\"1000000.1\",\"OldReserved\":\"0\",\"NewReserved\":\"0\"},{\"BrokerId\":\"jetwallet\",\"AccountId\":\"LPFTX\",\"WalletId\":\"SP-LPFTX\",\"WalletVersion\":1652007,\"AssetId\":\"EUR\",\"OldBalance\":\"101000159.97\",\"NewBalance\":\"101000159.87\",\"OldReserved\":\"501547.02\",\"NewReserved\":\"501546.92\"},{\"BrokerId\":\"jetwallet\",\"AccountId\":\"LPFTX\",\"WalletId\":\"SP-LPFTX\",\"WalletVersion\":1377914,\"AssetId\":\"BTC\",\"OldBalance\":\"10010.79799999\",\"NewBalance\":\"10010.79800198\",\"OldReserved\":\"10\",\"NewReserved\":\"10\"}],\"CashIn\":null,\"CashOut\":null,\"CashTransfer\":null,\"Orders\":[{\"BrokerId\":\"jetwallet\",\"AccountId\":\"LPFTX\",\"WalletId\":\"SP-LPFTX\",\"Id\":\"aeb25951-3f25-45c7-8026-6960b755cc65\",\"ExternalId\":\"635f792a6fb9471aa3e8e49ecbf2590c-7\",\"AssetPairId\":\"BTCEUR\",\"OrderType\":2,\"Side\":1,\"Volume\":\"0.0595\",\"RemainingVolume\":\"0.05949801\",\"Price\":\"50349.6\",\"Status\":2,\"RejectReason\":\"\",\"StatusDate\":{\"Seconds\":1617371913,\"Nanos\":93000000},\"CreatedAt\":{\"Seconds\":1617371912,\"Nanos\":582000000},\"Registered\":{\"Seconds\":1617371912,\"Nanos\":585000000},\"LastMatchTime\":{\"Seconds\":1617371913,\"Nanos\":93000000},\"LowerLimitPrice\":\"\",\"LowerPrice\":\"\",\"UpperLimitPrice\":\"\",\"UpperPrice\":\"\",\"Straight\":false,\"Fees\":[],\"Trades\":[{\"TradeId\":\"a53b38b2-df1d-4e6a-a4a3-9463c5384e14\",\"BaseAssetId\":\"BTC\",\"BaseVolume\":\"0.00000199\",\"Price\":\"50349.6\",\"Timestamp\":{\"Seconds\":1617371913,\"Nanos\":93000000},\"OppositeOrderId\":\"575f6ce9-5bcc-48f8-89f0-88781ddbc7b8\",\"OppositeExternalOrderId\":\"14905114d81546a8b0c90954a2ffbedc\",\"OppositeWalletId\":\"SP-alex\",\"QuotingAssetId\":\"EUR\",\"QuotingVolume\":\"-0.1\",\"Index\":0,\"AbsoluteSpread\":\"162.87\",\"RelativeSpread\":\"0.0032\",\"Role\":1,\"Fees\":[]}],\"TimeInForce\":1,\"ExpiryTime\":null,\"ParentExternalId\":\"\",\"ChildExternalId\":\"\"},{\"BrokerId\":\"jetwallet\",\"AccountId\":\"alex\",\"WalletId\":\"SP-alex\",\"Id\":\"575f6ce9-5bcc-48f8-89f0-88781ddbc7b8\",\"ExternalId\":\"14905114d81546a8b0c90954a2ffbedc\",\"AssetPairId\":\"BTCEUR\",\"OrderType\":1,\"Side\":1,\"Volume\":\"0.1\",\"RemainingVolume\":\"\",\"Price\":\"50349.6\",\"Status\":3,\"RejectReason\":\"\",\"StatusDate\":{\"Seconds\":1617371913,\"Nanos\":93000000},\"CreatedAt\":{\"Seconds\":0,\"Nanos\":0},\"Registered\":{\"Seconds\":1617371913,\"Nanos\":93000000},\"LastMatchTime\":{\"Seconds\":1617371913,\"Nanos\":93000000},\"LowerLimitPrice\":\"\",\"LowerPrice\":\"\",\"UpperLimitPrice\":\"\",\"UpperPrice\":\"\",\"Straight\":false,\"Fees\":[],\"Trades\":[{\"TradeId\":\"a53b38b2-df1d-4e6a-a4a3-9463c5384e14\",\"BaseAssetId\":\"BTC\",\"BaseVolume\":\"-0.00000199\",\"Price\":\"50349.6\",\"Timestamp\":{\"Seconds\":1617371913,\"Nanos\":93000000},\"OppositeOrderId\":\"aeb25951-3f25-45c7-8026-6960b755cc65\",\"OppositeExternalOrderId\":\"635f792a6fb9471aa3e8e49ecbf2590c-7\",\"OppositeWalletId\":\"SP-LPFTX\",\"QuotingAssetId\":\"EUR\",\"QuotingVolume\":\"0.1\",\"Index\":0,\"AbsoluteSpread\":\"162.87\",\"RelativeSpread\":\"0.0032\",\"Role\":2,\"Fees\":[]}],\"TimeInForce\":0,\"ExpiryTime\":null,\"ParentExternalId\":\"\",\"ChildExternalId\":\"\"}]}"; var outgoingEvent = JsonConvert.DeserializeObject <ME.Contracts.OutgoingMessages.OutgoingEvent>(json); foreach (var order in outgoingEvent.Orders) { var e = order; var price = decimal.Parse(e.Price); var volume = string.IsNullOrEmpty(e.RemainingVolume) ? 0 : decimal.Parse(e.RemainingVolume); var item = new OrderBookOrder( e.BrokerId, e.WalletId, e.ExternalId, price, volume, OutgoingEventJob.MapSide(e.Side), outgoingEvent.Header.SequenceNumber, e.AssetPairId, outgoingEvent.Header.Timestamp.ToDateTime(), OutgoingEventJob.OrderIsActive(e.Status)); Assert.NotNull(item); } var updatedOrders = outgoingEvent .Orders .Select(e => new OrderBookOrder( e.BrokerId, e.WalletId, e.ExternalId, decimal.Parse(e.Price), string.IsNullOrEmpty(e.RemainingVolume) ? 0 : decimal.Parse(e.RemainingVolume), OutgoingEventJob.MapSide(e.Side), outgoingEvent.Header.SequenceNumber, e.AssetPairId, outgoingEvent.Header.Timestamp.ToDateTime(), OutgoingEventJob.OrderIsActive(e.Status))) .ToList(); Assert.NotNull(updatedOrders); }
/// <summary> /// Gets the order book. /// </summary> /// <param name="pair">The pair.</param> /// <param name="count">The count.</param> public OrderBook GetOrderBook(string pair) { var param = new Dictionary <string, string>(); param.Add("pair", pair); var res = QueryPublic("Depth", param); var obj = (JObject)JsonConvert.DeserializeObject(res); var ret = new OrderBook(); try { ret.asks = new List <OrderBookOrder>(); ret.bids = new List <OrderBookOrder>(); var result = obj["result"].Value <JObject>(); var pairLevel = result[pair].Value <JObject>(); var asks = pairLevel["asks"].Value <JArray>(); foreach (var o in asks) { var j = 0; var order = new OrderBookOrder(); foreach (var i in o) { if (j == 0) { order.price = (decimal)i; } else if (j == 1) { order.volume = (decimal)i; } else if (j == 2) { order.timestamp = (decimal)i; } j++; } ret.asks.Add(order); } var bids = pairLevel["bids"].Value <JArray>(); foreach (var o in bids) { var j = 0; var order = new OrderBookOrder(); foreach (var i in o) { if (j == 0) { order.price = (decimal)i; } else if (j == 1) { order.volume = (decimal)i; } else if (j == 2) { order.timestamp = (decimal)i; } j++; } ret.bids.Add(order); } } catch (Exception ex) { Console.WriteLine(ex.Message); throw; } return(ret); }