コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: Anx.cs プロジェクト: RemitJet/LibRJ.ExchangeData
		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;
		}
コード例 #4
0
ファイル: TinkoffCurs.cs プロジェクト: sprokushev/CSharp
        // Получем текущие курсы валют
        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);
            }
        }
コード例 #5
0
		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;
		}