Beispiel #1
0
 private static bool EqualsByNull(TransformOrders CoinUSD)
 {
     if (CoinUSD.asks == null || CoinUSD.asks.Count() == 0 ||
         CoinUSD.bids == null || CoinUSD.bids.Count() == 0
         )
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Beispiel #2
0
        private static BTCToUSDStrategy USDToBTC(TransformOrders CoinBTC, TransformOrders CoinUSD, TransformOrders BTCUSD, decimal USDBallance, string market, Stock StockEx)
        {
            //bid лево прадают ask покупают право
            //находим количество коинов за BTC
            var COINS = USDBallance / CoinUSD.bids.First().Key;
            //продаем коины за USD
            var USDByCoin = CoinBTC.asks.First().Key *COINS;
            //продаем тоже количество BTC за USD
            var USDByBTC = USDBallance * BTCUSD.bids.First().Key;

            //сравниваем если цена проданых BTC и проданых коинов
            if (USDByBTC < USDByCoin)
            {
                return(new BTCToUSDStrategy()
                {
                    stock = StockEx, MarketName = market, CoinBuyQuantity = COINS, CoinSellPrice = USDByCoin, BTCSellPrice = USDByBTC
                });
            }
            return(null);
        }
Beispiel #3
0
        public static List <BTCToUSDStrategy> CompareByDollar(Dictionary <string, TransformOrders> CoinBTC, Dictionary <string, TransformOrders> CoinUSD, TransformOrders BTCUSD, decimal btcballance, Stock StockEx)
        {
            var list = new List <BTCToUSDStrategy>();

            foreach (var item in CoinUSD)
            {
                if (EqualsByNull(item.Value))
                {
                    continue;
                }
                var ItemCoinBTC = CoinBTC.FirstOrDefault(x => x.Key.Split('-')[1] == item.Key.Split('-')[1]).Value;
                if (EqualsByNull(ItemCoinBTC))
                {
                    continue;
                }
                BTCToUSDStrategy temp = BTCToUSD(ItemCoinBTC, item.Value, BTCUSD, btcballance, item.Key, StockEx);
                if (temp != null)
                {
                    list.Add(temp);
                }
                //temp = USDToBTC(ItemCoinBTC, item.Value, BTCUSD, btcballance, item.Key, StockEx);
                //if (temp != null)
                //{
                //    list.Add(temp);
                //}
            }
            return(list);
        }
Beispiel #4
0
        public static MainStrategy CoinCompare(TransformOrders arg1, TransformOrders arg2, Stock mainStockEx, Stock secoondStockEx, string MarketName)
        {
            if (arg1 == null || arg2 == null)
            {
                return(null);
            }
            TransformOrders main = new TransformOrders()
            {
                asks = arg2.asks.Take(30).ToDictionary(c => c.Key, v => v.Value),
                bids = arg2.bids.Take(30).ToDictionary(c => c.Key, v => v.Value)
            };
            TransformOrders second = new TransformOrders()
            {
                asks = arg1.asks.Take(30).ToDictionary(c => c.Key, v => v.Value),
                bids = arg1.bids.Take(30).ToDictionary(c => c.Key, v => v.Value)
            };

            #region сравнение валют и запись из в стратегию

            if (IsProfit(second.bids.First().Key, main.asks.First().Key))
            {
                MainStrategy TempSt = new MainStrategy();
                TempSt.MarketName  = MarketName;
                TempSt.BuyStockEX  = mainStockEx;
                TempSt.SellStockEX = secoondStockEx;

                //buy on [livecoin] main sell on  [poloniex] several
                while (IsProfit(second.bids.First().Key, main.asks.First().Key))
                {
                    if (main.asks.First().Value > second.bids.First().Value)
                    {
                        //записать в стратегию значение цены и количество в цикле пока профит
                        if (TempSt.StrategyBuy.ContainsKey(main.asks.First().Key))
                        {
                            TempSt.StrategyBuy[main.asks.First().Key] += second.bids.First().Value;
                        }
                        else
                        {
                            TempSt.StrategyBuy.Add(main.asks.First().Key, second.bids.First().Value);
                        }
                        if (TempSt.StrategySell.ContainsKey(second.bids.First().Key))
                        {
                            TempSt.StrategySell[second.bids.First().Key] += second.bids.First().Value;
                        }
                        else
                        {
                            TempSt.StrategySell.Add(second.bids.First().Key, second.bids.First().Value);
                        }

                        //отнять в списках большее значение
                        main.asks[main.asks.First().Key] -= second.bids.First().Value;
                        //удалить из списков меньшее значение
                        second.bids.Remove(second.bids.First().Key);
                    }
                    else if (main.asks.First().Value < second.bids.First().Value)
                    {
                        //записать в стратегию значение цены и количество
                        if (TempSt.StrategyBuy.ContainsKey(main.asks.First().Key))
                        {
                            TempSt.StrategyBuy[main.asks.First().Key] += main.asks.First().Value;
                        }
                        else
                        {
                            TempSt.StrategyBuy.Add(main.asks.First().Key, main.asks.First().Value);
                        }
                        if (TempSt.StrategySell.ContainsKey(second.bids.First().Key))
                        {
                            TempSt.StrategySell[second.bids.First().Key] += main.asks.First().Value;
                        }
                        else
                        {
                            TempSt.StrategySell.Add(second.bids.First().Key, main.asks.First().Value);
                        }
                        //отнять в списках большее значение
                        second.bids[second.bids.First().Key] -= main.asks.First().Value;
                        //удалить из списков меньшее значение
                        main.asks.Remove(main.asks.First().Key);
                    }

                    if (second.asks.Count == 0)
                    {
                        break;
                    }
                    if (second.bids.Count == 0)
                    {
                        break;
                    }
                    if (main.asks.Count == 0)
                    {
                        break;
                    }
                    if (main.bids.Count == 0)
                    {
                        break;
                    }

                    //равные значения будут нужны для возврата валюты
                    //else if (temp.bids.First()[1] == i.Value.asks.First()[1])
                    //{
                    //    //записать в стратегию значение цены и количество
                    //    MainSt.StrategyBuy.Data[temp.bids.First()[0]] += i.Value.asks.First()[1];
                    //    MainSt.StrategySell.Data[i.Value.asks.First()[0]] += i.Value.asks.First()[1];

                    //    //удалить из списков меньшее значение
                    //    temp.bids.First().Clear();
                    //    i.Value.asks.First().Clear();
                    //}
                }
                return(TempSt);
            }
            return(new MainStrategy());

            #endregion
        }