private static async Task OutputTrades(CoinTrackingAPI api) { //var response = await api.GetTrades(tradePrices: true); var response = await File.ReadAllTextAsync("MockTrades.json"); var json = JsonConvert.DeserializeObject <Dictionary <string, object> >(response); var accountCurrency = json.ContainsKey("account_currency") ? json["account_currency"] : null; var tradeObjects = json.Skip(3).Select(i => i.Value).ToList(); var trades = tradeObjects.Select(i => JsonConvert.DeserializeObject <Trade>(i.ToString())).ToList(); var incomes = trades.Where(i => i.Type.Equals(EntryType.Income.ToString(), StringComparison.InvariantCultureIgnoreCase) && i.Timestamp < purgeUntil).ToList(); var incomeCurrencies = incomes.Select(i => i.BuyCurrency).Distinct().ToList(); foreach (string currency in incomeCurrencies) { Console.WriteLine(); var income = incomes.Where(i => i.BuyCurrency.Equals(currency)).ToList(); Console.WriteLine($"purging for {currency}, found {income.Count} entries"); var lastDate = income.Max(i => i.Timestamp).ToString(); Console.WriteLine($"Last income date on {lastDate}"); var totalIncome = income.Sum(i => i.BuyAmount); var totalIncomeInAccountCurrency = income.Sum(i => i.BuyValueInCur); var totalIncomeInBTC = income.Sum(i => i.BuyValueInBtc); Console.WriteLine($"Total income {totalIncome} {currency}"); Console.WriteLine($"Buy value in {accountCurrency} {totalIncomeInAccountCurrency}"); Console.WriteLine($"Total income in BTC {totalIncomeInBTC}"); } }
static async Task Main(string[] args) { if (args.Any()) { purgeUntil = DateTime.Parse(args[0]); } // use your own dev configuration file to import your Cointracking API Keys var config = new ConfigurationBuilder() .AddJsonFile("appsettings.development.json", true, true) .Build(); var apiKey = config["apiKey"]; var apiSecret = config["apiSecret"]; //REAL DATA var api = new CoinTrackingAPI(apiKey, apiSecret); await OutputBalancesUntil(api, purgeUntil); }
private static async Task OutputBalancesUntil(CoinTrackingAPI api, DateTime until) { var untilLong = until.ToUnixTimeSeconds(); //var response = await api.GetHistoricalCurrency(); var response = await File.ReadAllTextAsync("MockHistoricalCurrency.json"); var json = JsonConvert.DeserializeObject <Dictionary <string, object> >(response); var accountCurrency = json.ContainsKey("account_currency") ? json["account_currency"] : null; var values = json.Skip(3).Select(i => i.Value).ToList(); var coinData = values.SelectMany(i => JsonConvert.DeserializeObject <Dictionary <string, Dictionary <long, HistoricAmount> > >(i.ToString()) ).ToList(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine($"Portfolio amounts until {until}"); foreach (var coinEntry in coinData) { var coinName = coinEntry.Key; var timestampKeyValues = coinEntry.Value; var results = timestampKeyValues.Where(i => i.Key <= untilLong).ToList(); if (!results.Any()) { continue; } var key = results.Max(i => i.Key); var amount = results.First(i => i.Key == key).Value.Amount; if (amount <= 0) { continue; } Console.WriteLine($"Token: {coinName}, Amount: {results.First(i => i.Key == key).Value.Amount}"); } }