public async Task <BaseTypes.TradeResult> GetOrderAmount(string OrderID, InvokePrint Print) { try { string[] arrtmp = OrderID.Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries); long orderID = Convert.ToInt64(arrtmp[1]); var ResOrder = await binanceClient.GetOrder(arrtmp[0], orderID); var tresult = new BaseTypes.TradeResult { IsFilled = ResOrder.Status == "FILLED" }; tresult.BaseQty = ResOrder.ExecutedQty; tresult.MarketQty = ResOrder.СummulativeQuoteQty; tresult.AveragePrice = ResOrder.Price; return(tresult); } catch (Exception ex) { System.Media.SystemSounds.Beep.Play(); Print("Ошибка BinanceApi OrderAmount: " + ex.Message); return(null); } }
public async Task <BaseTypes.TradeResult> ExecuteMarket(BaseTypes.Market Market, double Amount, bool DirectionBuy, InvokePrint Print) { decimal rate = 0; decimal amount = 0; try { BaseTypes.Ticker ticker = await GetMarketPrice(Market, Print); if (DirectionBuy) { rate = (decimal)ticker.Ask; if (rate < 0.00001M) { rate += (decimal)((double)rate * 0.1); } else { rate += (decimal)((double)rate * 0.01); } } else { rate = (decimal)ticker.Bid; rate -= (decimal)((double)rate * 0.25); } rate = Math.Round(rate, 8); if (DirectionBuy) { amount = (decimal)Amount; } else { amount = Math.Round((decimal)Amount * (decimal)ticker.Bid, 8); } string uuid = await ExecuteOrder(Market, amount, rate, DirectionBuy, Print); BaseTypes.TradeResult tresult = new BaseTypes.TradeResult() { Symbol = Market.MarketName, OrderId = uuid, IsFilled = false }; return(tresult); } catch (Exception ex) { System.Media.SystemSounds.Beep.Play(); Print(String.Format("Ошибка BittrexApi ExecuteMarket: {0}.\r\nMarket: {1}, Amount: {2}, DirectionBuy: {3}.\r\nrate: {4}, amount: {5}.", ex.Message, Market.ToString(), Amount, DirectionBuy, rate, amount)); return(null); } }
public async Task <BaseTypes.TradeResult> GetOrderAmount(string OrderID, InvokePrint Print) { try { string[] arrtmp = OrderID.Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries); BaseTypes.Market market = BaseTypes.Market.LoadFromString(arrtmp[0]); string Uuid = arrtmp[1]; decimal amount = -1; int MaxRepeat = 10; int CurRepeat = 0; BaseTypes.TradeResult tresult = new BaseTypes.TradeResult(); while (amount == -1 && CurRepeat < MaxRepeat) { try { List <HistoricOrder> OrderHistory = await GetOrderHistory(market, Print); HistoricOrder needOrder = OrderHistory.Find(x => x.OrderUuid == Uuid); if (needOrder != null) { tresult.BaseQty = needOrder.Quantity; tresult.AveragePrice = needOrder.Price; tresult.IsFilled = true; amount = 2; } else { amount = 0; } } catch { CurRepeat++; Thread.Sleep(500); //что бы обновилась история ордеров на сервере } } if (amount == -1) { throw new Exception("Не удалось получить информацию про ордер!"); } if (amount == 0) { throw new Exception("Не удалось получить информацию про ордер, ордер не найдено!"); } return(tresult); } catch (Exception ex) { System.Media.SystemSounds.Beep.Play(); Print("Ошибка BittrexApi OrderAmount: " + ex.Message); return(null); } }
public async Task <BaseTypes.TradeResult> ExecuteMarket(BaseTypes.Market Market, double Amount, bool DirectionBuy, InvokePrint Print) { decimal amount = 0; try { decimal tamount = (decimal)Amount; int lsize = LotSizes[Market.MarketName.Replace("-", "")]; amount = Math.Round(tamount, lsize); var oside = DirectionBuy ? OrderSide.BUY : OrderSide.SELL; var MarketOrder = await binanceClient.PostNewOrder(Market.MarketName.Replace("-", ""), amount, 0m, oside, OrderType.MARKET); var tresult = new BaseTypes.TradeResult() { Symbol = MarketOrder.Symbol, OrderId = MarketOrder.OrderId.ToString(), IsFilled = MarketOrder.Status == "FILLED", BaseQty = MarketOrder.ExecutedQty, MarketQty = MarketOrder.СummulativeQuoteQty }; decimal sum1 = 0; decimal sum2 = 0; foreach (var fill in MarketOrder.Fills) { sum1 += fill.Qty * fill.Price; sum2 += fill.Qty; } tresult.AveragePrice = Math.Round(sum1 / sum2, 8); return(tresult); } catch (Exception ex) { System.Media.SystemSounds.Beep.Play(); Print(String.Format("Ошибка BinanceApi ExecuteMarket: {0}.\r\nMarket: {1}, Amount: {2}, DirectionBuy: {3}.\r\namount: {4}.", ex.Message, Market.MarketName, Amount, DirectionBuy, amount)); return(null); } }