/// <summary> /// Place Order Async /// </summary> /// <param name="symbol">trade symbol</param> /// <param name="type">type</param> /// <param name="amount">buy/sell amout, when use market price, this is amout to sell, or amout used to by</param> /// <param name="price">price, -1 to use market price</param> /// <param name="retryNum">retry if failed</param> /// <param name="callback">order if suc</param> public void PlaceOrder(string symbol, Order.Type type, float amount, float price = -1, int retryNum = 0, System.Action <System.Nullable <Order> > callback = null) { if (accountId != "") { var request = new Huobi.SDK.Model.Request.Order.PlaceOrderRequest() { AccountId = accountId, amount = amount,//.ToString("0.0000"), source = "spot-api", price = price < 0 ? /*"0"*/ 0 : price /*.ToString("0.0000")*/, symbol = symbol, type = type.ToString() + (price < 0 ? "-market" : "-limit") }; System.Action <int> task = null; task = (remain) => { orderClient.PlaceOrderAsync(request, (id, ec, em) => { if (ec == null && em == null) { Order order = new Order(this, long.Parse(id)) { amount = amount, price = price, symbol = symbol, type = type, }; callback?.Invoke(order); } else if (remain-- > 0) { UnityEngine.Debug.Log(ec + "\n" + em + "\nretry: " + remain); task(remain); } else { UnityEngine.Debug.Log(ec + "\n" + em); callback?.Invoke(null); } }); }; task(retryNum); } else { UnityEngine.Debug.Log("connection is invalid, try later"); callback?.Invoke(null); } }
/// <summary> /// Used to get retrieve the orderbook for a given market /// </summary> /// <param name="market">requires a string literal for the market (ex: BTC-LTC)</param> /// <param name="orderType">requires a Order.Type enum to pick the type of order (e.g buy, sell or both)</param> /// <returns>The order book for the specified market</returns> public static OrderBook GetOrderBook(string market, Order.Type orderType) { dynamic response = JsonConvert.DeserializeObject(HTTPMethods.HttpGet(Constants.baseUrl + "/public/getorderbook?market=" + market + "&type=" + orderType.ToString())); if (response.success == false) { throw new Exception("Unable to get data from API: " + response.message.ToString()); } if (response.message == "INVALID_MARKET") { throw new ArgumentException("This is not a valid market. Use GetMarkets() to get a list of valid markets."); } List <Order> buyList = new List <Order>(); List <Order> sellList = new List <Order>(); if (orderType == Order.Type.buy) { foreach (var item in response.result) { Order order = new Order(Convert.ToDouble(item.Quantity), Convert.ToDouble(item.Rate)); buyList.Add(order); } OrderBook orderBook = new OrderBook(buyList, orderType); return(orderBook); } else if (orderType == Order.Type.sell) { foreach (var item in response.result) { Order order = new Order(Convert.ToDouble(item.Quantity), Convert.ToDouble(item.Rate)); sellList.Add(order); } OrderBook orderBook = new OrderBook(sellList, orderType); return(orderBook); } else //else the order type will be 'both' { foreach (var item in response.result.buy) { Order order = new Order(Convert.ToDouble(item.Quantity), Convert.ToDouble(item.Rate)); buyList.Add(order); } foreach (var item in response.result.sell) { Order order = new Order(Convert.ToDouble(item.Quantity), Convert.ToDouble(item.Rate)); sellList.Add(order); } //Sort by descending order buyList.Reverse(); OrderBook orderBook = new OrderBook(buyList, sellList); return(orderBook); } throw new Exception("Error: Should not have got to this point"); }