public virtual void Dispose() { GoogleSheetsProvider.Dispose(); GC.SuppressFinalize(this); }
static void Main() { Console.ForegroundColor = ConsoleColor.Gray; var cfg = Config.FromFile("config.json"); var provider = new GoogleSheetsProvider(cfg); var parsers = new ITradeParser[] { new KrakenLedgerParser(), // Kraken Ledger before Trades ALWAYS new KrakenTradesParser(), new BittrexParser(), new BinanceParser() }; var priceProvider = new CoinPaprikaPriceProvider(cfg.FiatProvider); // Parser trades var trades = new List <Trade>(); var dataSource = new TradeDataSource() { Data = provider.GetData().ToArray() }; foreach (var parser in parsers) { foreach (var data in dataSource.Data) { if (data.Parsed || !parser.IsThis(data)) { continue; } trades.AddRange(parser.GetTrades(dataSource, data)); data.Parsed = true; } } // Sort trades by date trades.SortByDate(); // Compute fiat values trades.ComputeFiatValues(priceProvider); // Compute fifo var profits = new Dictionary <int, YearProfit>(); trades.ComputeFifo(out var fifo, (trade, fee) => { if (!profits.TryGetValue(trade.Date.Year, out var profit)) { profit = new YearProfit() { Year = trade.Date.Year }; profits.Add(profit.Year, profit); } profit.Fee += fee; }, (trade, buyPrice, sellPrice, amount) => { if (buyPrice <= 0) { //Console.WriteLine("Buy not found for: " + trade.ToString()); } if (!profits.TryGetValue(trade.Date.Year, out var profit)) { profit = new YearProfit() { Year = trade.Date.Year }; profits.Add(profit.Year, profit); } profit.Buyed += (amount * buyPrice); profit.Sold += (amount * sellPrice); profit.Profit += (amount * sellPrice) - (amount * buyPrice); } ); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(JsonConvert.SerializeObject(profits, Formatting.Indented)); Console.ForegroundColor = ConsoleColor.Gray; }