Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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);
            }
        }