private async Task ProcessParse(CoinPair pair) { HtmlNode bestObmen; try { //var idFrom = GetIdPair(pair.CoinFrom); //var idTo = GetIdPair(pair.CoinTo); //var html = await _web.GetInfoOnPairs(idFrom, idTo); //bestObmen = html.DocumentNode.SelectNodes("//tr").Where(x => x.Attributes["onclick"] != null).Select(x => x).FirstOrDefault(); //var data = new MarketData(); //data.Pair = pair; ////data.Reserv = Convert.ToDecimal(bestObmen.SelectSingleNode(".//td[@class='ar']").InnerText); //data.Price = Convert.ToDecimal(bestObmen.SelectNodes(".//td[@class='bi']")[1].InnerText.Split(' ')[0]); //data.UrlObmenik = bestObmen.SelectSingleNode(".//td[@class='bj']/div/a").Attributes["href"].Value; //data.NameObmenik = bestObmen.SelectSingleNode(".//td[@class='bj']/div/div").InnerText; //Market.Add(data); //var listObmen = html.DocumentNode.SelectNodes("//tr").Where(x => x.Attributes["onclick"] != null).Select(x => x); //foreach (var item in listObmen) //{ // var url = item.SelectSingleNode(".//td[@class='bj']/div[@class='pa']/a").Attributes["href"].Value; // var name = item.SelectSingleNode(".//td[@class='bj']/div[@class='pa']/div[@class='pc']").InnerText; // var curse = item.SelectNodes(".//td[@class='bi']")[1].InnerText.Split(' ')[0]; // var reserv = item.SelectSingleNode(".//td[@class='ar arp']").InnerText; //} } catch (Exception e) { } }
static float TotalWealth(Yobit.YobitApiClient yobitApiClient, string resultCoin) { resultCoin = resultCoin.ToLower(); var accountInfo = yobitApiClient.GetInfo(); if (accountInfo.success == 0) { throw new Exception("Метод GetInfo возвратил ошибку: " + accountInfo.error); } var accountCoinPairs = new CoinsPairs([email protected]_incl_orders.Select(pair => new CoinPair(pair.Key, resultCoin))); var ticker = yobitApiClient.Ticker(accountCoinPairs); float sumWealth = 0; foreach (var coin in [email protected]_incl_orders.Keys) { if (coin == resultCoin) { sumWealth += [email protected]_incl_orders[coin]; Console.WriteLine($"On balance: {[email protected]_incl_orders[resultCoin]}{resultCoin}"); continue; } var coinPair = new CoinPair(coin, resultCoin); var coinSumPrice = [email protected]_incl_orders[coin] * ticker[coinPair.ToString()].sell; if (coinPair.Reverted) { coinSumPrice = [email protected]_incl_orders[coin] / ticker[coinPair.ToString()].sell; // на случай usd_rur } sumWealth += coinSumPrice; Console.WriteLine($"{[email protected]_incl_orders[coin]}{coin} {(!coinPair.Reverted ? "*" : "/")} {ticker[coinPair.ToString()].sell}{resultCoin} = {coinSumPrice}{resultCoin}"); } Console.WriteLine($"Total: {sumWealth}{resultCoin}"); return(sumWealth); }
public void BnbSelectPairsOfInterest(List <CoinPair> tickers) { try { //foreach (var pair in tickers) //{ // if (Config.PairsToMonitor.ContainsKey(pair.Symbol)) // Config.PairsOfInterest.Add(pair); //} //if (Config.PairsToMonitor.ContainsKey("ETHBTC")) // Config.PairsOfInterest.Add(new CoinPair { Symbol = "ETHBTC" }); foreach (var symbol in Config.PairsToMonitor) { var pair = new CoinPair { Symbol = symbol.Key }; Config.PairsOfInterest.Add(pair); } StartupComplete = true; } catch (Exception e) { _logger.Error("Failed to update Pairs of interest, importer startup failed.\n" + e.ToString()); throw; } }
private decimal GetPriceFromCoinPair(CoinPair coinPair) { var needCoinPairs = Container.CoinContainer.Where(x => x.Pair.CoinFrom.Name == coinPair.CoinFrom.Name && x.Pair.CoinTo.Name == coinPair.CoinTo.Name).Select(x => x).ToList(); if (needCoinPairs.Count == 0) { return(0); } else if (needCoinPairs.Count == 1) { return(needCoinPairs[0].Price); } MarketData tempMarket = needCoinPairs[0]; for (int i = 1; i < needCoinPairs.Count; i++) { if (needCoinPairs[i].Price > tempMarket.Price) { tempMarket = needCoinPairs[i]; } } return(tempMarket.Price); }
//Load all coinpairs from Bnb private async Task GetKlines(CoinPair pair, List <string> intervals) { foreach (var interval in intervals) { try { var now = Calculator.CalculateEpochNow(); //Get last update from db for this pair-kline combo var lastTask = CheckPairLastUpdate(pair, interval, now); var last = lastTask.Result; var IsUpdateRequired = Calculator.CheckIfUpdateRequired(now, last, metaData.Intervals[interval]); if (IsUpdateRequired) { var klineListTask = DownloadKlinesFromBnb(pair.Symbol, interval, last, now); var klineList = klineListTask.Result; //Save klines to KlinesQueue. var maxClose = GetMaxCloseTimeFromList(klineList); saveKlines(klineList); pair.LastUpdate[interval] = maxClose; _logger.Info(String.Format("Kline data for {0} {1} saved successfully", pair.Symbol, interval)); } else { await _logger.LogAsync(String.Format("{0} {1} is up to date, moving to next interval", pair.Symbol, interval)); } } catch (Exception e) { await _logger.LogAsync(String.Format("Failed to get kline data.\n{0}", e.ToString()), 4); } } }
public CoinLine(CoinPair el1, CoinPair el2, CoinPair el3, CoinPair el4) { EL1 = el1; EL2 = el2; EL3 = el3; EL4 = el4; }
public CoinLine(CoinPair el1, CoinPair el2, CoinPair el3, CoinPair el4, CoinPair el5) { EL1 = el1; EL2 = el2; EL3 = el3; EL4 = el4; EL5 = el5; }
public void Run() { var pairsCoin = CoinPair.GetAllPairsCoin(); foreach (var pair in pairsCoin) { var kod = _web.GetInfoOnPairs(pair.CoinFrom.Id, pair.CoinTo.Id).Result; } }
private async Task <long> CheckPairLastUpdate(CoinPair pair, string interval, long now) { long last = 0; if (Config.UseSql) { last = _dbHandler.FindKlineLastUpdate(pair.Symbol, interval); } else { last = Config.BnbMinimumUpdateDate; } var diff = metaData.Intervals[interval] + 1000; //If not get historical data if (!Config.BnbGetHistoricalData) { if (!pair.LastUpdate.ContainsKey(interval)) { pair.LastUpdate.Add(interval, now - diff); } } //When we want historical data else { if (pair.LastUpdate.ContainsKey(interval)) { if (Config.UseSql) { pair.LastUpdate[interval] = await LoadKlineLastUpdate(pair.Symbol, interval); } else { pair.LastUpdate[interval] = last; } if (last > Config.BnbMinimumUpdateDate) { pair.LastUpdate[interval] = last; } else { pair.LastUpdate[interval] = Config.BnbMinimumUpdateDate; } } else { pair.LastUpdate.Add(interval, Config.BnbMinimumUpdateDate); if (last > Config.BnbMinimumUpdateDate) { pair.LastUpdate[interval] = last; } } } _logger.Info(string.Format("{0} {1} last update: {2}", pair.Symbol, interval, pair.LastUpdate[interval])); return(pair.LastUpdate[interval]); }
public static async Task <CoinPair> GetCoinPair(string pUri) { _client = new HttpClient { BaseAddress = new Uri(pUri) }; _client.DefaultRequestHeaders.Accept.Clear(); CoinPair coinPair = null; var response = await _client.GetAsync(pUri, HttpCompletionOption.ResponseContentRead); if (response.IsSuccessStatusCode) { coinPair = await response.Content.ReadAsAsync <CoinPair>(); } return(coinPair); }
private List <CoinPair> GetAllTickers(BinanceClient publicRestClient) { //Get All Ticker Information var tickers = publicRestClient.TickerAllPrices().Result; var pairList = new List <CoinPair>(); foreach (var ticker in tickers) { var pair = new CoinPair(); pair.Symbol = ticker.Symbol; pair.Value = ticker.Price; pairList.Add(pair); } return(pairList); }
private void ParseData(string str) { if (Container.StateCalculated) { return; } try { // var pairsCoin = CoinPair.GetAllPairsCoin(); // var namesPairsCoin = pairsCoin.Select(x => x.ToString()).ToList(); var obj = JToken.Parse(str); if (!obj["stream"].ToString().Equals("!miniTicker@arr@3000ms")) { return; } var listObj = (JArray)obj["data"]; foreach (var item in listObj) { var name = item["s"].ToString(); var coinPair = CoinPair.GetCoinPairForName(name); if (coinPair == null) { continue; } //if (!namesPairsCoin.Contains(name) || usedCoin.Contains(name)) //{ // continue; //} MarketData market = new MarketData(); market.Pair = coinPair; market.NameObmenik = "Binance"; market.Price = Convert.ToDecimal(item["c"].ToString()); Container.AddBinanceMarket(market); } } catch (Exception e) { } }
/// <summary> /// Метод, с помощью которого создаются новые ордера для торговли на бирже /// </summary> /// <param name="pair">пара (пример: ltc_btc)</param> /// <param name="type">тип операции (пример: buy или sell)</param> /// <param name="rate">курс, по которому необходимо купить или продать (значение: числовое)</param> /// <param name="amount">количество, которое необходимо купить или продать (значение: числовое)</param> /// <returns>Ответ биржи</returns> public TradeResponse Trade(CoinPair pair, TradeOperationType type, double rate, double amount) { Logger.Log("Called 'Trade' method"); var methodUri = new Uri(TradeApiUrl); var parameters = new Dictionary <string, string> { { "method", "Trade" }, { "pair", pair.ToString() }, { "type", TradeOperationTypeNames[type] }, { "rate", rate.ToString("0.00000000", System.Globalization.CultureInfo.InvariantCulture) }, { "amount", amount.ToString("0.00000000", System.Globalization.CultureInfo.InvariantCulture) }, { "nonce", ((int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds).ToString() } }; var _res = ProcessTradeRequest(methodUri, parameters).Result; var response = JsonConvert.DeserializeObject <TradeResponse>(_res); return(response); }
private Dictionary <int, List <CoinLine> > CreateLine() { Dictionary <int, List <CoinLine> > list = new Dictionary <int, List <CoinLine> >(); List <CoinLine> zepochki3 = new List <CoinLine>(); List <CoinLine> zepochki4 = new List <CoinLine>(); List <CoinLine> zepochki5 = new List <CoinLine>(); //var pairsCoin = CoinPair.GetAllPairsCoin(); var pairsCoin = CoinPair.listCoinPairs; foreach (var el1 in pairsCoin) { List <Coin> exclusion = new List <Coin>(); exclusion.Add(el1.CoinFrom); var pairs1 = CoinPair.GetPairsFromCoinFrom(el1.CoinTo).Where(x => !exclusion.Contains(x.CoinTo)).Select(x => x); foreach (var el2 in pairs1) { var coin = CoinPair.CheckPair(el2.CoinTo, el1.CoinFrom); if (coin != null) { zepochki3.Add(new CoinLine(el1, el2, coin)); } } } list.Add(3, zepochki3); foreach (var el1 in pairsCoin) { List <Coin> exclusion = new List <Coin>(); exclusion.Add(el1.CoinFrom); var pairs1 = CoinPair.GetPairsFromCoinFrom(el1.CoinTo).Where(x => !exclusion.Contains(x.CoinTo)).Select(x => x); foreach (var el2 in pairs1) { exclusion.Add(el2.CoinFrom); var pairs2 = CoinPair.GetPairsFromCoinFrom(el2.CoinTo).Where(x => !exclusion.Contains(x.CoinTo)).Select(x => x); foreach (var el3 in pairs2) { var coin = CoinPair.CheckPair(el3.CoinTo, el1.CoinFrom); if (coin != null) { zepochki4.Add(new CoinLine(el1, el2, el3, coin)); } } } } list.Add(4, zepochki4); foreach (var el1 in pairsCoin) { List <Coin> exclusion = new List <Coin>(); exclusion.Add(el1.CoinFrom); var pairs1 = CoinPair.GetPairsFromCoinFrom(el1.CoinTo).Where(x => !exclusion.Contains(x.CoinTo)).Select(x => x); foreach (var el2 in pairs1) { exclusion.Add(el2.CoinFrom); var pairs2 = CoinPair.GetPairsFromCoinFrom(el2.CoinTo).Where(x => !exclusion.Contains(x.CoinTo)).Select(x => x); foreach (var el3 in pairs2) { exclusion.Add(el3.CoinFrom); var pairs3 = CoinPair.GetPairsFromCoinFrom(el3.CoinTo).Where(x => !exclusion.Contains(x.CoinTo)).Select(x => x); foreach (var el4 in pairs3) { var coin = CoinPair.CheckPair(el4.CoinTo, el1.CoinFrom); if (coin != null) { zepochki5.Add(new CoinLine(el1, el2, el3, el4, coin)); } } } } } list.Add(5, zepochki5); return(list); }
public CoinLine(CoinPair el1, CoinPair el2, CoinPair el3) { EL1 = el1; EL2 = el2; EL3 = el3; }