Esempio n. 1
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async("/api/order_books", _params);

#if RAWJSON
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _json_data = publicClient.DeserializeObject <COrderBook>(_json_value.Content);
                    {
                        var _orderbook = new OrderBook {
                            asks = new List <OrderBookItem>(), bids = new List <OrderBookItem>()
                        };

                        foreach (var _ask in _json_data.asks.OrderBy(o => o.price).Take(limits).ToList())
                        {
                            _ask.amount = _ask.price * _ask.quantity;
                            _ask.count  = 1;

                            _orderbook.asks.Add(_ask);
                        }

                        foreach (var _bid in _json_data.bids.OrderByDescending(o => o.price).Take(limits).ToList())
                        {
                            _bid.amount = _bid.price * _bid.quantity;
                            _bid.count  = 1;

                            _orderbook.bids.Add(_bid);
                        }

                        _result.result = _orderbook;

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = CUnixTime.Now;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 2
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    var _limits = limits <= 1 ? 1
                               : limits <= 50 ? limits
                               : 50;

                    _params.Add("count", _limits);
                    _params.Add("group_orders", 1); // group_orders Int Value : 0 또는 1

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async($"/orderbook/{_market.result.symbol}", _params);

#if RAWJSON
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _json_data = publicClient.DeserializeObject <BOrderBooks>(_json_value.Content);
                    if (_json_data.success == true)
                    {
                        _result.result.asks = _json_data.result.asks.OrderBy(o => o.price).Take(limits).ToList();
                        _result.result.bids = _json_data.result.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = _json_data.result.timestamp;
                        _result.result.nonce     = _json_data.result.timestamp / 1000;
                    }
                    else
                    {
                        var _message = publicClient.GetErrorMessage(_json_data.statusCode);
                        _json_result.SetFailure(
                            _message,
                            ErrorCode.ResponseDataError
                            );
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 3
0
 public Trade[] Execute(Order order)
 {
     if (!OrderBooks.TryGetValue(order.Instrument, out var orderBook))
     {
         orderBook = new OrderBook();
         OrderBooks[order.Instrument] = orderBook;
     }
     return(orderBook.Execute(order));
 }
Esempio n. 4
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    _params.Add("currency_pair", _market.result.symbol);
                    _params.Add("category", "all");

                    if (args != null)
                    {
                        foreach (var _a in args)
                        {
                            if (_params.ContainsKey(_a.Key) == true)
                            {
                                _params.Remove(_a.Key);
                            }

                            _params.Add(_a.Key, _a.Value);
                        }
                    }
                }

                var _json_value = await publicClient.CallApiGet1Async("/orderbook", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbook = publicClient.DeserializeObject <KOrderBook>(_json_value.Content);
                    {
                        _result.result.asks = _orderbook.asks.OrderBy(o => o.price).Take(limits).ToList();
                        _result.result.bids = _orderbook.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = _orderbook.timestamp;
                        _result.result.nonce     = _orderbook.timestamp / 1000;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 5
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="symbol"></param>
        /// <param name="count">maximum number of items (optional): default 25</param>
        /// <returns></returns>
        public async ValueTask <OrderBooks> GetOrderBooks(string symbol, int count = 25)
        {
            var _result = new OrderBooks();

            var _params = new Dictionary <string, object>();
            {
                _params.Add("symbol", symbol);
                _params.Add("depth", count);
            }

            var _response = await publicClient.CallApiGet2Async("/api/v1/orderBook/L2", _params);

            if (_response != null)
            {
#if RAWJSON
                _result.rawJson = _response.Content;
#endif
                if (_response.IsSuccessful == true)
                {
                    var _orderbooks = publicClient.DeserializeObject <List <BOrderBookItem> >(_response.Content);
                    if (_orderbooks != null)
                    {
                        _result.result.asks = new List <OrderBookItem>();
                        _result.result.bids = new List <OrderBookItem>();

                        foreach (var _o in _orderbooks)
                        {
                            _o.amount = _o.quantity * _o.price;
                            _o.count  = 1;

                            if (_o.sideType == SideType.Ask)
                            {
                                _result.result.asks.Add(_o);
                            }
                            else
                            {
                                _result.result.bids.Add(_o);
                            }
                        }

                        _result.result.symbol    = symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = CUnixTime.Now;

                        _result.SetSuccess();
                    }
                }
                else
                {
                    var _message = publicClient.GetResponseMessage(_response);
                    _result.SetFailure(_message.message);
                }
            }

            return(_result);
        }
Esempio n. 6
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    var _limits = limits <= 5 ? 5
                                : limits <= 10 ? 10
                                : limits <= 20 ? 20
                                : limits <= 50 ? 50
                                : limits <= 100 ? 100
                                : limits <= 500 ? 500
                                : 1000;

                    _params.Add("symbol", _market.result.symbol);
                    _params.Add("limit", _limits);

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async("/depth", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbook = publicClient.DeserializeObject <BOrderBook>(_json_value.Content);
                    {
                        _result.result.asks = _orderbook.asks.OrderBy(o => o.price).Take(limits).ToList();
                        _result.result.bids = _orderbook.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = _orderbook.lastUpdateId;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 7
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <OrderBooks> FetchOrderBooksAsync(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarketAsync(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    _params.Add("markets", _market.result.symbol);

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async("/orderbook", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbooks = publicClient.DeserializeObject <List <UOrderBook> >(_json_value.Content);
                    {
                        var _orderbook = _orderbooks.FirstOrDefault();
                        if (_orderbook != null)
                        {
                            _orderbook.asks = _orderbook.asks.OrderBy(o => o.price).Take(limits).ToList();
                            _orderbook.bids = _orderbook.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                            _orderbook.nonce = _orderbook.timestamp / 1000;

                            _result.result = _orderbook;
                        }
                        else
                        {
                            _json_result.SetFailure();
                        }
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 8
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    if (limits == 1) // 호가창의 상세정보 수준 (1 = 매수호가 및 매도호가, 2 = 매수 및 매도 주문 각 50개, 기타 = 호가창 전체)
                    {
                        _params.Add("level", 1);
                    }
                    else
                    {
                        _params.Add("level", 2);
                    }

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async($"/trading-pairs/{_market.result.symbol}/book", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbook = publicClient.DeserializeObject <GOrderBook>(_json_value.Content);
                    {
                        _result.result.asks = _orderbook.asks.OrderBy(o => o.price).Take(limits).ToList();
                        _result.result.bids = _orderbook.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = CUnixTime.Now;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 9
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limit">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limit = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    if (limit == 1)
                    {
                        _params.Add("level", 1);        // Only the best bid and ask
                    }
                    else
                    {
                        _params.Add("level", 2);        // Top 50 bids and asks (aggregated)
                    }
                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async($"/products/{_market.result.symbol}/book", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbook = publicClient.DeserializeObject <GOrderBook>(_json_value.Content);
                    {
                        _result.result.asks = _orderbook.asks.OrderBy(o => o.price).Take(limit).ToList();
                        _result.result.bids = _orderbook.bids.OrderByDescending(o => o.price).Take(limit).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = _orderbook.sequence;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 10
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    _params.Add("market", _market.result.symbol);
                    _params.Add("type", "both"); // type required buy, sell or both to identify the type of orderbook to return

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async("/v1.1/public/getorderbook", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbook = publicClient.DeserializeObject <BOrderBooks>(_json_value.Content);
                    if (_orderbook.success == true)
                    {
                        _result.result.asks = _orderbook.result.asks.OrderBy(o => o.price).Take(limits).ToList();
                        _result.result.bids = _orderbook.result.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = CUnixTime.Now;
                    }
                    else
                    {
                        _json_result.SetFailure(_orderbook.message);
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 11
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <OrderBooks> FetchOrderBooksAsync(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarketAsync(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    _params.Add("command", "returnOrderBook");
                    _params.Add("currencyPair", _market.result.symbol);
                    if (limits > 0)
                    {
                        _params.Add("depth", limits);
                    }

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async("", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbook = publicClient.DeserializeObject <POrderBook>(_json_value.Content);
                    {
                        _result.result.asks = _orderbook.asks.OrderBy(o => o.price).Take(limits).ToList();
                        _result.result.bids = _orderbook.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = _orderbook.seq;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 12
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    if (limits > 0)
                    {
                        _params.Add("limit_bids", limits);
                        _params.Add("limit_asks", limits);
                    }
                    _params.Add("group", 1); // group false [0/1] 1 If 1, orders are grouped by price in the orderbook. If 0, orders are not grouped and sorted individually

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async($"/v1/book/{_market.result.symbol}", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbook = publicClient.DeserializeObject <BOrderBook>(_json_value.Content);
                    {
                        _result.result.asks = _orderbook.asks.OrderBy(o => o.price).Take(limits).ToList();
                        _result.result.bids = _orderbook.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = CUnixTime.Now;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 13
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async($"/1/orderBook/{_market.result.symbol}", _params);

#if RAWJSON
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbooks = publicClient.DeserializeObject <GOrderBook>(_json_value.Content);
                    {
                        if (_orderbooks.asks.Count > 0 || _orderbooks.bids.Count > 0)
                        {
                            _orderbooks.symbol = _market.result.symbol;

                            _orderbooks.asks = _orderbooks.asks.OrderBy(o => o.price).Take(limits).ToList();
                            _orderbooks.bids = _orderbooks.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                            _orderbooks.timestamp = CUnixTime.NowMilli;
                            _orderbooks.nonce     = _orderbooks.timestamp / 1000;

                            _result.result = _orderbooks;
                        }
                        else
                        {
                            _json_result.SetFailure();
                        }
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 14
0
        private void ClearOrderBooks(List <int> pertinentContracts)
        {
            OrderBooks.Clear();
            ImpliedOrderBooks.Clear();
            ConsolidatedOrderBooks.Clear();

            int contractCount = pertinentContracts.Count;

            for (int i = 0; i < contractCount; i++)
            {
                int instrument = pertinentContracts[i];

                AddNewOrderBooksFor(instrument);
            }
        }
Esempio n. 15
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange: contract_type(this_week, next_week, month, quarter)</param>
        /// <returns></returns>
        public override async ValueTask <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                okexapiClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    _params.Add("symbol", _market.result.symbol);
                    _params.Add("size", $"{limits}");

                    okexapiClient.MergeParamsAndArgs(_params, args);
                }

                var _end_point = okexapiClient.CheckFuturesUrl(_market.result, "/depth.do", "/future_depth.do", _params);

                var _json_value = await okexapiClient.CallApiGet1Async(_end_point.endPoint, _end_point.args);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = okexapiClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbook = okexapiClient.DeserializeObject <OOrderBook>(_json_value.Content);
                    {
                        _result.result.asks = _orderbook.asks.OrderBy(o => o.price).Take(limits).ToList();
                        _result.result.bids = _orderbook.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = CUnixTime.Now;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 16
0
        public static List <OrderBooks> getOrderBooks(string token, int customerid)
        {
            List <OrderBooks> books = new List <OrderBooks>();

            try
            {
                using (MySqlConnection con = new MySqlConnection(connString))
                {
                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }

                    string       query = " SELECT o.order_id,b.booksID,b.bookname,b.bookauthor,b.image1, b.rating, b.paperprice,o.quantity,os.added_on FROM orderr o JOIN orders os ON os.order_id = o.order_id JOIN books b ON b.booksID = o.book_id WHERE os.order_token = @order and os.user_id = @user";
                    MySqlCommand cmd   = new MySqlCommand(query, con);
                    cmd.Parameters.Add(new MySqlParameter("@order", token));
                    cmd.Parameters.Add(new MySqlParameter("@user", customerid));

                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            OrderBooks book = new OrderBooks();

                            book.order_id    = int.Parse(reader["order_id"].ToString());
                            book.booksID     = int.Parse(reader["booksID"].ToString());
                            book.book_name   = reader["bookname"].ToString();
                            book.book_author = reader["bookauthor"].ToString();
                            book.image       = reader["image1"].ToString();
                            book.rating      = double.Parse(reader["rating"].ToString());
                            book.price       = double.Parse(reader["paperprice"].ToString());
                            book.quantity    = int.Parse(reader["quantity"].ToString());
                            book.added_on    = reader["added_on"].ToString();

                            books.Add(book);
                        }
                    }
                    con.Close();
                }
            }
            catch (MySqlException e)
            {
                string message = e.Message;
            }
            return(books);
        }
Esempio n. 17
0
        public List <OrderBooks> GetOrderBooks(List <JToken> result)
        {
            List <OrderBooks> list = new List <OrderBooks>();
            OrderBooks        or   = new OrderBooks();

            or.updated_at = result[0].First.ToString();
            or.sequence   = result[3].First.ToString();
            //traemos nuevamente los elementos del asks
            string          jsonB    = result[1].First.ToString();
            JArray          arr      = JArray.Parse(jsonB) as JArray;
            dynamic         bids     = arr;
            List <AsksBids> asksBids = new List <AsksBids>();

            foreach (dynamic el in arr)
            {
                AsksBids ab = new AsksBids();
                ab.book   = el.book;
                ab.amount = el.amount;
                ab.price  = el.price;
                ab.oid    = null;
                asksBids.Add(ab);
            }
            or.bids = asksBids;

            string  jsonA = result[1].First.ToString();
            JArray  arrA  = JArray.Parse(result[1].First.ToString());
            dynamic asks  = arrA;

            or.asks = new List <AsksBids>();
            foreach (dynamic el in arrA)
            {
                AsksBids ab = new AsksBids();
                ab.book   = el.book;
                ab.amount = el.amount;
                ab.price  = el.price;
                ab.oid    = null;
                or.asks.Add(ab);
            }

            list.Add(or);

            return(list);
        }
Esempio n. 18
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="symbol"></param>
        /// <param name="count">maximum number of items (optional): default 25</param>
        /// <returns></returns>
        public async ValueTask <OrderBooks> GetOrderBooks(string symbol, int count = 25)
        {
            var _result = new OrderBooks();

            var _params = new Dictionary <string, object>();
            {
                _params.Add("instrument_name", symbol);
                _params.Add("depth", count);
            }

            var _response = await publicClient.CallApiGet2Async("/api/v2/public/get_order_book", _params);

            if (_response != null)
            {
#if RAWJSON
                _result.rawJson = _response.Content;
#endif
                if (_response.IsSuccessful == true)
                {
                    var _orderbooks = publicClient.DeserializeObject <DRResults <DOrderBook> >(_response.Content);
                    if (_orderbooks != null)
                    {
                        _result.result.asks = _orderbooks.result.asks;
                        _result.result.bids = _orderbooks.result.bids;

                        _result.result.symbol    = symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = CUnixTime.Now;

                        _result.SetSuccess();
                    }
                }
                else
                {
                    var _message = publicClient.GetResponseMessage(_response);
                    _result.SetFailure(_message.message);
                }
            }

            return(_result);
        }
Esempio n. 19
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limit">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limit = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = publicClient.MergeParamsAndArgs(args);

                var _json_value = await publicClient.CallApiGet1Async($"{_market.result.symbol}/money/depth/full", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbook = publicClient.DeserializeObject <AOrderBooks>(_json_value.Content);
                    {
                        _result.result.asks = _orderbook.result.asks.OrderBy(o => o.price).Take(limit).ToList();
                        _result.result.bids = _orderbook.result.bids.OrderByDescending(o => o.price).Take(limit).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = _orderbook.result.dataUpdateTime / 1000;
                        _result.result.nonce     = _orderbook.result.now / 1000000;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 20
0
        private void ReconcileExpiredContracts()
        {
            for (int i = 0; i < ConsolidatedOrderBooks.Count; i++)
            {
                bool matchFound = false;
                foreach (int pertinentContract in pertinentContracts)
                {
                    if (ConsolidatedOrderBooks[i].InstrumentId == pertinentContract)
                    {
                        matchFound = true;
                        break;
                    }
                }

                if (!matchFound)
                {
                    OrderBooks.RemoveAt(i);
                    ImpliedOrderBooks.RemoveAt(i);
                    ConsolidatedOrderBooks.RemoveAt(i);
                }
            }
        }
Esempio n. 21
0
        public void CreateOrder(Order order)
        {
            order.OrderPlacedDate = DateTime.Now;

            _appDbContext.Orders.Add(order);

            var cartItems = _cart.StoreCartItems;

            foreach (var cartItem in cartItems)
            {
                var orderDetail = new OrderBooks()
                {
                    Quantity = cartItem.Quantity,
                    BookId   = cartItem.Book.BookId,
                    OrderId  = order.OrderId,
                    Price    = cartItem.Book.Price
                };

                _appDbContext.OrderBooks.Add(orderDetail);
            }

            _appDbContext.SaveChanges();
        }
        public IActionResult CheckOut(int id, Customers c)
        {
            // var cid = (TempData["cid"]).ToString();
            //context.Customers.Add(c);
            //context.SaveChanges();

            Orders ord = new Orders()
            {
                OrderAmount = Convert.ToSingle(TempData["total"]),
                OrderDate   = DateTime.Now,
                CustomerId  = id
            };

            _context.Orders.Add(ord);
            _context.SaveChanges();
            //    return RedirectToAction("Payment");
            //}
            //return View(customers);

            var cart = SessionHelper.GetObjectFromJson <List <Item> >(HttpContext.Session, "cart");
            List <OrderBooks> orderBooks = new List <OrderBooks>();

            for (int i = 0; i < cart.Count; i++)
            {
                OrderBooks orderBook = new OrderBooks()
                {
                    OrderId  = ord.OrderId,
                    BookId   = cart[i].Books.BookId,
                    Quantity = cart[i].Quantity
                };
                orderBooks.Add(orderBook);
            }
            orderBooks.ForEach(n => _context.OrderBooks.Add(n));
            _context.SaveChanges();
            TempData["cust"] = id;
            return(RedirectToAction("Invoice", "Cart"));
        }
Esempio n. 23
0
        public IActionResult CheckOut(int id, Customers c, string stripeEmail, string stripeToken)
        {
            // var cid = (TempData["cid"]).ToString();
            //context.Customers.Add(c);
            //context.SaveChanges();

            Orders ord = new Orders()
            {
                OrderAmount = Convert.ToSingle(TempData["total"]),
                OrderDate   = DateTime.Now,
                CustomerId  = id
            };

            _context.Orders.Add(ord);
            _context.SaveChanges();
            //    return RedirectToAction("Payment");
            //}
            //return View(customers);

            var cart = SessionHelper.GetObjectFromJson <List <Item> >(HttpContext.Session, "cart");
            List <OrderBooks> orderBooks = new List <OrderBooks>();

            for (int i = 0; i < cart.Count; i++)
            {
                OrderBooks orderBook = new OrderBooks()
                {
                    OrderId  = ord.OrderId,
                    BookId   = cart[i].Books.BookId,
                    Quantity = cart[i].Quantity
                };
                orderBooks.Add(orderBook);
            }
            orderBooks.ForEach(n => _context.OrderBooks.Add(n));
            _context.SaveChanges();
            TempData["cust"] = id;
            //return RedirectToAction("Index", "Payment");


            var customers = new CustomerService();
            var charges   = new ChargeService();
            var Amount    = TempData["total"];
            var order     = ord.OrderId;
            var custmr    = TempData["cust"];
            var customer  = customers.Create(new CustomerCreateOptions
            {
                Email       = stripeEmail,
                SourceToken = stripeToken
            });

            var charge = charges.Create(new ChargeCreateOptions
            {
                Amount      = 500,
                Description = "Total Charge",
                Currency    = "usd",
                CustomerId  = customer.Id
            });

            Payments payment = new Payments();

            {
                payment.StripePaymentId    = charge.PaymentMethodId;
                payment.PaymentAmount      = Convert.ToInt32(Amount);
                payment.DateOfPayment      = System.DateTime.Now;
                payment.PaymentDescription = "Payment Initiated";
                payment.CardLastDigit      = Convert.ToInt32(charge.PaymentMethodDetails.Card.Last4);
                payment.OrderId            = Convert.ToInt32(order);
                payment.CustomerId         = Convert.ToInt32(custmr);
            }

            //_context.Add<Payments>(payment);
            _context.Payments.Add(payment);
            _context.SaveChanges();

            return(RedirectToAction("Invoice", "Cart"));
        }
Esempio n. 24
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async Task <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    _params.Add("symbol", _market.result.symbol);
                    _params.Add("size", limits); // type required buy, sell or both to identify the type of orderbook to return

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async("/api/v1/market/depth", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbooks = publicClient.DeserializeObject <BOrderBooks>(_json_value.Content);
                    if (_orderbooks.success == true)
                    {
                        var _ob_asks = _orderbooks.result.asks.OrderBy(o => o.price).Take(limits).ToList();
                        var _ob_bids = _orderbooks.result.bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        var _orderbook = new OrderBook
                        {
                            asks = new List <IOrderBookItem>(),
                            bids = new List <IOrderBookItem>()
                        };

                        foreach (var _ask in _ob_asks)
                        {
                            _ask.amount = _ask.price * _ask.quantity;
                            _ask.count  = 1;

                            _orderbook.asks.Add(_ask);
                        }

                        foreach (var _bid in _ob_bids)
                        {
                            _bid.amount = _bid.price * _bid.quantity;
                            _bid.count  = 1;

                            _orderbook.bids.Add(_bid);
                        }

                        _result.result = _orderbook;

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = CUnixTime.Now;
                    }
                    else
                    {
                        _json_result.SetFailure(_orderbooks.message);
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 25
0
        /// <summary>
        /// Fetch pending or registered order details
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="limits">maximum number of items (optional): default 20</param>
        /// <param name="args">Add additional attributes for each exchange</param>
        /// <returns></returns>
        public override async ValueTask <OrderBooks> FetchOrderBooks(string base_name, string quote_name, int limits = 20, Dictionary <string, object> args = null)
        {
            var _result = new OrderBooks(base_name, quote_name);

            var _market = await this.LoadMarket(_result.marketId);

            if (_market.success == true)
            {
                publicClient.ExchangeInfo.ApiCallWait(TradeType.Public);

                var _params = new Dictionary <string, object>();
                {
                    _params.Add("symbol", _market.result.symbol);
                    _params.Add("depth", limits);

                    publicClient.MergeParamsAndArgs(_params, args);
                }

                var _json_value = await publicClient.CallApiGet1Async("/api/v1/orderBook/L2", _params);

#if DEBUG
                _result.rawJson = _json_value.Content;
#endif
                var _json_result = publicClient.GetResponseMessage(_json_value.Response);
                if (_json_result.success == true)
                {
                    var _orderbooks = publicClient.DeserializeObject <List <BOrderBookItem> >(_json_value.Content);
                    {
                        var _asks = new List <OrderBookItem>();
                        var _bids = new List <OrderBookItem>();

                        foreach (var _o in _orderbooks)
                        {
                            _o.amount = _o.quantity * _o.price;
                            _o.count  = 1;

                            if (_o.side.ToLower() == "sell")
                            {
                                _asks.Add(_o);
                            }
                            else
                            {
                                _bids.Add(_o);
                            }
                        }

                        _result.result.asks = _asks.OrderBy(o => o.price).Take(limits).ToList();
                        _result.result.bids = _bids.OrderByDescending(o => o.price).Take(limits).ToList();

                        _result.result.symbol    = _market.result.symbol;
                        _result.result.timestamp = CUnixTime.NowMilli;
                        _result.result.nonce     = CUnixTime.Now;
                    }
                }

                _result.SetResult(_json_result);
            }
            else
            {
                _result.SetResult(_market);
            }

            return(_result);
        }
Esempio n. 26
0
 private void AddNewOrderBooksFor(int instrumentId)
 {
     OrderBooks.Add(new OrderBook(OUTRIGHT_DEPTH, instrumentId));
     ImpliedOrderBooks.Add(new OrderBook(IMPLIED_DEPTH, instrumentId));
     ConsolidatedOrderBooks.Add(new OrderBook(OUTRIGHT_DEPTH, instrumentId));
 }
Esempio n. 27
0
        /// <summary>
        /// Processes the Spark update event provided in the EventFeedArgs and updates security properties based on the event type
        /// </summary>
        /// <param name="sender">Event sender</param>
        /// <param name="eventFeedArgs">Event feed args</param>
        internal void EventReceived(object sender, EventFeedArgs eventFeedArgs)
        {
            //Process event
            Spark.Event eventItem = eventFeedArgs.Event;
            switch (eventItem.Type)
            {
            //Depth update
            case Spark.EVENT_NEW_DEPTH:
            case Spark.EVENT_AMEND_DEPTH:
            case Spark.EVENT_DELETE_DEPTH:

                //Check if exchange order book exists and create if it doesn't
                LimitOrderBook orderBook;
                if (!OrderBooks.TryGetValue(eventFeedArgs.Exchange, out orderBook))
                {
                    orderBook = new LimitOrderBook(eventFeedArgs.Symbol, eventFeedArgs.Exchange);
                    OrderBooks.Add(eventFeedArgs.Exchange, orderBook);
                }

                //Submit update to appropriate exchange order book
                orderBook.SubmitEvent(eventItem);
                if (OnDepthUpdate != null)
                {
                    OnDepthUpdate(this, new GenericEventArgs <LimitOrderBook>(eventFeedArgs.TimeStamp, orderBook));
                }
                break;

            //Trade update
            case Spark.EVENT_TRADE:

                //Create and store trade record
                Trade trade = eventItem.ToTrade(eventFeedArgs.Symbol, eventFeedArgs.Exchange, eventFeedArgs.TimeStamp);
                Trades.Add(trade);
                if (OnTradeUpdate != null)
                {
                    OnTradeUpdate(this, new GenericEventArgs <Trade>(eventFeedArgs.TimeStamp, trade));
                }
                break;

            //Trade cancel
            case Spark.EVENT_CANCEL_TRADE:

                //Find original trade in trade record and delete
                Trade cancelledTrade = eventItem.ToTrade(eventFeedArgs.TimeStamp);
                Trade originalTrade  = Trades.Find(x => (x.TimeStamp == cancelledTrade.TimeStamp && x.Price == cancelledTrade.Price && x.Volume == cancelledTrade.Volume));
                if (originalTrade != null)
                {
                    Trades.Remove(originalTrade);
                }
                break;

            //Market state update
            case Spark.EVENT_STATE_CHANGE:
                State = ApiFunctions.ConvertToMarketState(eventItem.State);
                if (OnMarketStateUpdate != null)
                {
                    OnMarketStateUpdate(this, new GenericEventArgs <MarketState>(eventFeedArgs.TimeStamp, State));
                }
                break;

            //Market quote update (change to best market bid-ask prices)
            case Spark.EVENT_QUOTE:
                if (OnQuoteUpdate != null)
                {
                    LimitOrderBook depth = OrderBooks[eventFeedArgs.Exchange];
                    MarketQuote    quote = new MarketQuote(eventFeedArgs.Symbol, eventFeedArgs.Exchange, depth.BidPrice, depth.AskPrice, eventFeedArgs.TimeStamp);
                    OnQuoteUpdate(this, new GenericEventArgs <MarketQuote>(eventFeedArgs.TimeStamp, quote));
                }
                break;

            //IAP (Indicative Auction Price) Update
            case Spark.EVENT_AUCTION_PRICE:
                break;

            default:
                //Console.WriteLine(eventItem.ToOutputString());
                break;
            }
        }