Example #1
0
        private async void PollForUpdates()
        {
            invalidOrder             = false;
            pollingCancellationToken = new CancellationTokenSource();
            while (!pollingCancellationToken.IsCancellationRequested)
            {
                try
                {
                    orderWithStatus = await OrdersClient.GetOrder(OrderId);

                    StateHasChanged();

                    if (orderWithStatus.IsDelivered)
                    {
                        pollingCancellationToken.Cancel();
                    }
                    else
                    {
                        await Task.Delay(4000);
                    }
                }
                catch (AccessTokenNotAvailableException ex)
                {
                    pollingCancellationToken.Cancel();
                    ex.Redirect();
                }
                catch (Exception ex)
                {
                    invalidOrder = true;
                    pollingCancellationToken.Cancel();
                    Console.Error.WriteLine(ex);
                    StateHasChanged();
                }
            }
        }
        static void RunOrdersClient(IMundiAPIClient client)
        {
            //Criação + Consulta
            Console.WriteLine("Criação + consulta");
            var orderId = OrdersClient.CreateCardOrder(client);

            OrdersClient.GetOrder(client, orderId);

            //Listagem
            Console.WriteLine("Listagem");
            OrdersClient.GetOrders(client);
        }
Example #3
0
        public static void Trade(string instrument)
        {
            var client       = new BtcRequestClient();
            var marketClient = new MarketClient(client);
            var orderClient  = new OrdersClient(client);

            var edge = 1;

            var book       = marketClient.GetOrderBook(Currencies.Btc, instrument);
            var lowestAsks = book.Asks
                             .OrderBy(a => a[0])
                             .First()[0];
            var askPrice   = (long)(lowestAsks * TradingAdjustments.ApiPriceMultiplier) - edge;
            var highestBid = book.Bids
                             .OrderByDescending(a => a[0])
                             .First()[0];
            var bidPrice = (long)(highestBid * TradingAdjustments.ApiPriceMultiplier) + edge;

            var fee           = 0.003;
            var sellPrice     = bidPrice * (1 + fee);
            var purchasePrice = askPrice * (1 - fee);

            Console.WriteLine("=====================");
            Console.WriteLine($"Ask: {lowestAsks}");
            Console.WriteLine($"Bid: {highestBid}");
            Console.WriteLine($"Diff: {lowestAsks - highestBid}");
            Console.WriteLine("=====================");
            Console.WriteLine($"Buy: {purchasePrice}");
            Console.WriteLine($"Sell: {sellPrice}");
            Console.WriteLine($"Diff: {purchasePrice - sellPrice}");
            Console.WriteLine($"Profit %: {(purchasePrice - sellPrice) / sellPrice * 100}");
            var riskBuffer = 30000;

            if (purchasePrice - riskBuffer <= sellPrice)
            {
                Console.WriteLine("NO WAY RN'T BUYING NO NOTHING. I RN'T STUPID....");
                return;
            }

            //var askResponse = orderClient.CreateOrder(Currencies.Btc, instrument, askPrice, 100000, TradeSide.Ask);
            var askResponse = new CreateOrderResponse {
                Id = 595124578
            };
            var bidResponse = new CreateOrderResponse {
                Id = 596025673
            };

            //var bidResponse = orderClient.CreateOrder(Currencies.Btc, instrument, bidPrice, 100000, TradeSide.Bid);

            OrderDetail[] orders;
            bool Checker()
            {
                var orderResponse = orderClient
                                    .GetOrder(new[] { askResponse.Id, bidResponse.Id });

                orders = orderResponse.Orders;

                if (orders == null)
                {
                    Console.WriteLine($"They f*****g with it: {orderResponse.ErrorMessage}");
                    Thread.Sleep(3000);
                    client = new BtcRequestClient();
                    return(true);
                }

                return(orders.Length != 2 ||
                       orders.Any(a => a.Status != "Fully Matched"));
            }

            var lastBid = (long)1115926; // bidPrice;
            var lastAsk = (long)1194318; // askPrice;

            while (Checker())
            {
                if (orders == null)
                {
                    continue;
                }

                Thread.Sleep(300);

                var currentBook = marketClient.GetOrderBook(Currencies.Btc, instrument);
                var changed     = false;

                var askOrder = orders.SingleOrDefault(a => a.OrderSide == TradeSide.Ask);
                if (askOrder != null && askOrder.Status != "Fully Matched")
                {
                    var currentLowestAsks = currentBook.Asks
                                            .OrderBy(a => a[0])
                                            .First()[0];
                    var currentAsk = (long)(currentLowestAsks * TradingAdjustments.ApiPriceMultiplier);
                    if (currentAsk < askPrice)
                    {
                        Console.WriteLine("Replacing Ask.");

                        if (currentAsk - edge < lastBid)
                        {
                            return;                              // f**k...
                        }
                        var bidToCancel = askResponse.Id;
                        askResponse = orderClient.CreateOrder(Currencies.Btc, instrument, currentAsk - edge, askOrder.OpenVolume, TradeSide.Ask);
                        orderClient.CancelOrder(new[] { bidToCancel });
                        lastAsk = currentAsk - edge;
                        changed = true;
                    }
                }

                var bidOrder = orders.SingleOrDefault(a => a.OrderSide == TradeSide.Bid);
                if (bidOrder != null && bidOrder.Status != "Fully Matched")
                {
                    var currentHighestBid = currentBook.Bids
                                            .OrderByDescending(a => a[0])
                                            .First()[0];
                    var currentBidPrice = (long)(currentHighestBid * TradingAdjustments.ApiPriceMultiplier);
                    if (currentBidPrice > bidPrice)
                    {
                        Console.WriteLine("Replacing Bid.");
                        if (currentBidPrice + edge > lastAsk)
                        {
                            return;                                   // f**k...
                        }
                        var bidToCancel = bidResponse.Id;
                        bidResponse = orderClient.CreateOrder(Currencies.Btc, instrument, currentBidPrice + edge, bidOrder.OpenVolume, TradeSide.Bid);
                        orderClient.CancelOrder(new[] { bidToCancel });
                        lastBid = currentBidPrice + edge;
                        changed = true;
                    }
                }

                if (changed)
                {
                    var lastSellPrice     = lastBid * (1 + fee);
                    var lastPurchasePrice = lastAsk * (1 - fee);
                    Console.WriteLine("=====================");
                    Console.WriteLine($"Buy: {lastPurchasePrice}");
                    Console.WriteLine($"Sell: {lastSellPrice}");
                    Console.WriteLine($"Diff: {lastPurchasePrice - lastSellPrice}");
                    Console.WriteLine($"Profit %: {(lastPurchasePrice - lastSellPrice) / lastSellPrice * 100}");
                    if (lastPurchasePrice - riskBuffer <= lastSellPrice)
                    {
                        Console.WriteLine("NO WAY RN'T BUYING NO NOTHING. I RN'T STUPID....");
                        orderClient.CancelOrder(new[] { bidResponse.Id, askResponse.Id });
                        return;
                    }
                }
            }
        }