public override async Task <OrderbookResponse> GetOrderbooks(OrderbookRequest request, ServerCallContext context) { var assetPairResult = await _validationService.ValidateAssetPairAsync(request.AssetPairId); if (assetPairResult != null) { return(new OrderbookResponse { Error = new Error { Code = (int)assetPairResult.Code, Message = assetPairResult.Message } }); } var orderbooks = await _orderbooksService.GetAsync(request.AssetPairId, request.Depth); var result = new OrderbookResponse(); foreach (var orderbook in orderbooks) { var resOrderBook = _mapper.Map <Orderbook>(orderbook); resOrderBook.Asks.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(orderbook.Asks)); resOrderBook.Bids.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(orderbook.Bids)); result.Payload.Add(resOrderBook); } return(result); }
static public void PrintBook(OrderbookResponse orderbook) { Console.WriteLine("New orderbook orders in " + orderbook.market); Console.WriteLine("asks"); foreach (var ask in orderbook.asks) { Console.WriteLine(ask); } Console.WriteLine("bids"); foreach (var bid in orderbook.bids) { Console.WriteLine(bid); } }
public async Task<OrderbookResponse> GetOrderbook(OrderbookRequest request) { var response = new OrderbookResponse (); var client = this.ApiClient (); client.QueryString.Add ("currencypair", request.ExchangeMarketRef); string rawData = await client.DownloadStringTaskAsync (this.OrderbookApiUri); var jsonData = JToken.Parse (rawData); DateTime reportedTime = Utilities.GetDateTimeFromUnixTimestamp( jsonData ["data"] ["now"].Value<long> () / 1000000 ); response.AddRange ( from rawOrder in jsonData["data"]["bids"] select new Order () { ExchangeMarketCD = request.ExchangeMarketCD, Price = Decimal.Parse (rawOrder ["price"].Value<string> ()), Amount = Decimal.Parse (rawOrder ["amount"].Value<string> ()), OrderType = OrderType.BidOrder, RawData = Encoding.ASCII.GetBytes (rawOrder.ToString ()), ReportedTime = reportedTime, LastSeen = DateTimeOffset.UtcNow } ); response.AddRange ( from rawOrder in jsonData["data"]["asks"] select new Order () { ExchangeMarketCD = request.ExchangeMarketCD, Price = Decimal.Parse (rawOrder ["price"].Value<string> ()), Amount = Decimal.Parse (rawOrder ["amount"].Value<string> ()), OrderType = OrderType.AskOrder, RawData = Encoding.ASCII.GetBytes (rawOrder.ToString ()), ReportedTime = reportedTime, LastSeen = DateTimeOffset.UtcNow } ); return response; }
// Получем текущие курсы валют static async Task LoadValuteCurs() { decimal _usd = 0; decimal _eur = 0; decimal _rub = 0; try { Currencies = await GetAsync <CurrencyInstrumentListResponse>(token, "https://api-invest.tinkoff.ru/openapi/market/currencies"); } catch (Exception) { Currencies = null; } if ((Currencies != null) && (Currencies.status == "Ok") && (Currencies.payload != null) && (Currencies.payload.instruments != null)) { foreach (var item in Currencies.payload.instruments) { item.ticker = item.ticker.Substring(0, 3); item.currency = item.ticker; item.lot = 1; switch (item.ticker) { case "USD": if (_usd != 0) { item.ticker = ""; } break; case "EUR": if (_eur != 0) { item.ticker = ""; } break; case "RUB": if (_rub != 0) { item.ticker = ""; } break; default: item.ticker = ""; break; } // заполняем цену OrderbookResponse Price = null; try { Price = await GetAsync <OrderbookResponse>(token, $"https://api-invest.tinkoff.ru/openapi/market/orderbook?figi={item.figi}&depth=1"); } catch (Exception) { } if ((Price != null) && (Price.status == "Ok") && (Price.payload != null)) { item.ValuteCurs = Price.payload.lastPrice; switch (item.ticker) { case "USD": _usd = item.ValuteCurs; break; case "EUR": _eur = item.ValuteCurs; break; case "RUB": item.ValuteCurs = 1; _rub = 1; break; } } } } // в крайнем случае - определяем курсы доллара и евро по данным центробанка if (Currencies == null) { Currencies = new CurrencyInstrumentListResponse(); } if (Currencies.payload == null) { Currencies.payload = new CurrencyInstrumentList(); } if (Currencies.payload.instruments == null) { Currencies.payload.instruments = new List <CurrencyInstrumentList.Position>(); } if (_usd == 0) { string valuteCode = "USD"; _usd = CBRF.GetValuteCurs(valuteCode); Currencies.payload.instruments.Add(new CurrencyInstrumentList.Position() { ticker = valuteCode, name = "Доллары США", currency = valuteCode, lot = 1, ValuteCurs = _usd }); Currencies.payload.total++; Currencies.status = "Ok"; } if (_eur == 0) { string valuteCode = "EUR"; _eur = CBRF.GetValuteCurs(valuteCode); Currencies.payload.instruments.Add(new CurrencyInstrumentList.Position() { ticker = valuteCode, name = "Евро", currency = valuteCode, lot = 1, ValuteCurs = _eur }); Currencies.payload.total++; Currencies.status = "Ok"; } // обязательно добавляем рубль if (_rub == 0) { string valuteCode = "RUB"; _rub = 1; Currencies.payload.instruments.Add(new CurrencyInstrumentList.Position() { ticker = valuteCode, name = "Рубль", currency = valuteCode, lot = 1, ValuteCurs = _rub }); Currencies.payload.total++; Currencies.status = "Ok"; } if ((Currencies != null) && (Currencies.status == "Ok") && (Currencies.payload != null) && (Currencies.payload.instruments != null)) //-V3063 { bool _finish = false; do { _finish = true; foreach (var item in Currencies.payload.instruments) { if (item.ticker == "") { Currencies.payload.instruments.Remove(item); _finish = false; break; } } } while (!_finish); } }
public async Task<OrderbookResponse> GetOrderbook(OrderbookRequest request) { var response = new OrderbookResponse (); var client = this.ApiClient (); client.QueryString.Add ("currencypair", request.ExchangeMarketRef); string rawData = await client.DownloadStringTaskAsync (this.OrderbookApiUri); var jsonData = JToken.Parse (rawData); response.AddRange ( from rawOrder in jsonData["orderbook"]["bids"] select new Order () { ExchangeMarketCD = request.ExchangeMarketCD, Amount = Decimal.Parse (rawOrder [1].Value<string> ()), Price = Decimal.Parse (rawOrder [0].Value<string> ()), OrderType = OrderType.BidOrder, RawData = Encoding.ASCII.GetBytes (rawOrder.ToString ()), LastSeen = DateTimeOffset.UtcNow } ); response.AddRange ( from rawOrder in jsonData["orderbook"]["asks"] select new Order () { ExchangeMarketCD = request.ExchangeMarketCD, Amount = Decimal.Parse (rawOrder[1].Value<string> ()), Price = Decimal.Parse (rawOrder[0].Value<string> ()), OrderType = OrderType.AskOrder, RawData = Encoding.ASCII.GetBytes (rawOrder.ToString ()), LastSeen = DateTimeOffset.UtcNow } ); return response; }