public virtual void Dispose()
 {
     GoogleSheetsProvider.Dispose();
     GC.SuppressFinalize(this);
 }
Example #2
0
        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;
        }