示例#1
0
        public OrderModel PostBestSellOrder(CurrencyPair currencyPair, bool realTrade, double USDT = 0, ulong previousIdOrder = 0)
        {
            if (!realTrade)
            {
                return(PostBestSellOrderFictive(currencyPair, USDT));
            }

            var        tradeId              = new ulong();
            OrderModel order                = new OrderModel();
            double     bestPricePerCoin     = 0;
            double     bestPricePerCoinTemp = 0;
            double     amountQuote          = 0; // Quantité de la monnaie que je possède

            double profitMade = 0;
            IList <TradingTools.ITrade> trades = null;

            // Procéder à la vente
            do
            {
                try
                {
                    bestPricePerCoin = FindBestPrice(currencyPair, OrderType.Sell);
                    amountQuote      = InitPost(currencyPair, bestPricePerCoin, OrderType.Sell, USDT);

                    if (amountQuote == 0)
                    {
                        Debug.WriteLine(string.Format("\nY'A RIEN À VENDRE !!!"));
                        return(null);
                    }

                    // ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ###
                    // ######################################################################################################
                    tradeId = PostOrder(currencyPair, bestPricePerCoin, amountQuote, OrderType.Sell);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }while (tradeId == 0);

            // Tant que tout n'est pas vendu
            while ((from x in GetBalances() where x.Type == currencyPair.QuoteCurrency select x.QuoteOnOrders).SingleOrDefault() > 0)
            {
                try
                {
                    bestPricePerCoinTemp = FindBestPrice(currencyPair, OrderType.Sell, amountQuote);

                    if (bestPricePerCoin != bestPricePerCoinTemp)   // empêche de me détrôner moi-même
                    {
                        bestPricePerCoin = bestPricePerCoinTemp;
                        Debug.WriteLine($"\nnew bestPrice: {bestPricePerCoin}");

                        amountQuote = (from x in GetBalances() where x.Type == currencyPair.QuoteCurrency select x.QuoteOnOrders).SingleOrDefault();

                        if (amountQuote > 0)
                        {
                            // Si erreur retournée = "Total must be at least 1", le move se fait pas et ça loop......
                            tradeId = MoveOrder(currencyPair, tradeId, bestPricePerCoin, amountQuote);
                        }

                        Debug.WriteLine(string.Format("MoveOrder: amountQuote = {0}", amountQuote));
                    }

                    Thread.Sleep(SLEEP_BETWEEN_MOVEORDER);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }

            System.Media.SystemSounds.Exclamation.Play();
            Debug.WriteLine("SELL COMPLETED!\n");

            //if (previousIdOrder != 0)
            //{
            //    trades = GetTrades(currencyPair);
            //    profitMade = (trades.Where(x => x.IdOrder == tradeId).FirstOrDefault().PricePerCoin -
            //                  trades.Where(x => x.IdOrder == previousIdOrder).FirstOrDefault().PricePerCoin) /
            //                  trades.Where(x => x.IdOrder == previousIdOrder).FirstOrDefault().PricePerCoin;
            //}
            trades     = GetTrades(currencyPair);
            profitMade = (GetLastTrade(trades, OrderType.Sell) - GetLastTrade(trades, OrderType.Buy)) / GetLastTrade(trades, OrderType.Buy);

            PushMessage("SOLD!",
                        $"Currency: {currencyPair}\\n" +
                        $"USDT: {string.Format("{0:0.00}$", (from x in GetBalances() where x.Type == currencyPair.BaseCurrency select x.QuoteAvailable).SingleOrDefault())}\\n" +
                        $"At: {bestPricePerCoin}\\n" +
                        $"Profit: {string.Format("{0:0.00}%", profitMade * 100)}");

            order.CurrencyPair = currencyPair;
            order.OrderType    = OrderType.Buy;
            order.AmountBase   = 0;
            order.AmountQuote  = amountQuote;
            order.PricePerCoin = bestPricePerCoin;
            order.IdOrder      = ulong.Parse(tradeId.ToString());

            return(order);
        }
示例#2
0
        public OrderModel PostBestBuyOrder(CurrencyPair currencyPair, bool realTrade, double USDT = 0)
        {
            if (!realTrade)
            {
                return(PostBestBuyOrderFictive(currencyPair, USDT));
            }

            var        tradeId              = new ulong();
            OrderModel order                = new OrderModel();
            double     bestPricePerCoin     = 0;
            double     bestPricePerCoinTemp = 0;
            double     amountQuote          = 0; // Quantité de la monnaie à acheter

            // Procéder à l'achat
            do
            {
                try
                {
                    bestPricePerCoin = FindBestPrice(currencyPair, OrderType.Buy);
                    amountQuote      = InitPost(currencyPair, bestPricePerCoin, OrderType.Buy, USDT);

                    if (amountQuote == 0)
                    {
                        Debug.WriteLine(string.Format("\nY'A RIEN À ACHETER !!!"));
                        return(null);
                    }

                    // ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ### DANGER ###
                    // ######################################################################################################
                    tradeId = PostOrder(currencyPair, bestPricePerCoin, amountQuote, OrderType.Buy);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }while (tradeId == 0);

            // Tant que tout n'est pas acheté
            while ((from x in GetBalances() where x.Type == currencyPair.BaseCurrency select x.QuoteOnOrders).SingleOrDefault() > 0)
            {
                try
                {
                    bestPricePerCoinTemp = FindBestPrice(currencyPair, OrderType.Buy, amountQuote);

                    if (bestPricePerCoin != bestPricePerCoinTemp)   // empêche de me détrôner moi-même
                    {
                        bestPricePerCoin = bestPricePerCoinTemp;
                        Debug.WriteLine($"\nnew bestPrice {bestPricePerCoin}");

                        amountQuote = Utilities.TruncateDouble((from x in GetBalances() where x.Type == currencyPair.BaseCurrency select x.QuoteOnOrders).SingleOrDefault() / bestPricePerCoin);

                        if (amountQuote > 0)
                        {
                            tradeId = MoveOrder(currencyPair, tradeId, bestPricePerCoin, amountQuote);
                        }

                        Debug.WriteLine(string.Format("MoveOrder: amountQuote = {0}", amountQuote));
                    }

                    Thread.Sleep(SLEEP_BETWEEN_MOVEORDER);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }

            System.Media.SystemSounds.Exclamation.Play();
            Debug.WriteLine("BUY COMPLETED!\n");

            PushMessage("BOUGHT!",
                        $"Currency: {currencyPair}\\n" +
                        $"USDT: {string.Format("{0:0.00}$", (from x in GetBalances() where x.Type == currencyPair.QuoteCurrency select x.USDT_Value).SingleOrDefault())}\\n" +
                        $"At: {bestPricePerCoin}");

            order.CurrencyPair = currencyPair;
            order.OrderType    = OrderType.Buy;
            order.AmountBase   = 0;
            order.AmountQuote  = amountQuote;
            order.PricePerCoin = bestPricePerCoin;
            order.IdOrder      = ulong.Parse(tradeId.ToString());

            return(order);
        }