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); } }
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); }
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); }
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 }