예제 #1
0
        private static List <ImportedCoin> CSVImport_Binance(Stream fileStream)
        {
            string extractSymbolFromMarket(string market, string currency)
            {
                market = market.Replace(currency, string.Empty);
                return($"{currency}-{market}");
            }

            List <ImportedCoin> importedCoins = new List <ImportedCoin>();

            //0Date	1Market	2Type	3Price	4Amount	5Total	6Fee	7Fee Coin
            using (var stream = new StreamReader(fileStream))
            {
                using (var reader = ExcelDataReader.ExcelReaderFactory.CreateReader(fileStream))
                {
                    do
                    {
                        while (reader.Read())
                        {
                            string date = reader.GetString(0);
                            if (!string.IsNullOrEmpty(date) && date.ToUpperInvariant() != "DATE")
                            {
                                string market = reader.GetString(1).ToUpperInvariant(); // market: ETHBTC -> Symbol|Currency, bought ETH with BTC
                                string symbol = string.Empty;
                                if (market.EndsWith("BTC"))
                                {
                                    symbol = extractSymbolFromMarket(market, "BTC");
                                }
                                else if (market.EndsWith("USDT"))
                                {
                                    symbol = extractSymbolFromMarket(market, "USDT");
                                }
                                else if (market.EndsWith("ETH"))
                                {
                                    symbol = extractSymbolFromMarket(market, "ETH");
                                }

                                if (!string.IsNullOrEmpty(symbol))
                                {
                                    ImportedCoin coin = new ImportedCoin
                                    {
                                        Symbol    = symbol,
                                        OrderType = reader.GetString(2),
                                        Shares    = decimal.Parse(reader.GetString(4)),
                                        TotalPricePaidInCurrency = decimal.Parse(reader.GetString(5)),
                                        OrderDate = DateTime.Parse(reader.GetString(0)),
                                        Exchange  = Types.Exchanges.Binance
                                    };

                                    importedCoins.Add(coin);
                                }
                            }
                        }
                    } while (reader.NextResult());
                }
            }

            return(importedCoins);
        }
예제 #2
0
 public static CryptoCoin ToPOCO(this ImportedCoin item)
 {
     return(new CryptoCoin
     {
         Symbol = item.Symbol.Replace("USDT-", "USD-"),
         CoinCurrency = CryptoLogic.GenerateCoinCurrencyFromSymbol(item.Symbol),
         PricePerUnit = (item.TotalPricePaidInCurrency / item.Shares),
         Shares = item.Shares,
         Exchange = item.Exchange,
         OrderDate = item.OrderDate, // Closed/Order completed date
         OrderType = CryptoLogic.GetProperOrderTypeFromString(item.OrderType)
     });
 }
예제 #3
0
        // CSV Import Logic for different Exchanges
        private static List <ImportedCoin> CSVImport_Custom(Stream fileStream)
        {
            List <ImportedCoin> importedCoins = new List <ImportedCoin>();

            // 0Symbol(Currency-Coin), 1.OrderType, 2Quantity, 3TotalPricePaid, 4OrderDate
            using (var reader = new StreamReader(fileStream, System.Text.Encoding.Default))
            {
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    if (!line.Contains(',') || line.ToLower().StartsWith("symbol"))
                    {
                        continue;
                    }

                    try
                    {
                        string[]     values = line.Split(',').Select(x => x.Trim()).ToArray();
                        ImportedCoin coin   = new ImportedCoin
                        {
                            Symbol    = values[0],
                            OrderType = values[1],
                            Shares    = decimal.Parse(values[2]),
                            TotalPricePaidInCurrency = decimal.Parse(values[3]),
                            OrderDate = DateTime.Parse(values[4]),
                            Exchange  = Types.Exchanges.Custom
                        };

                        importedCoins.Add(coin);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }

            return(importedCoins);
        }
예제 #4
0
        private static List <ImportedCoin> CSVImport_GDax(Stream fileStream)
        {
            List <ImportedCoin> importedCoins = new List <ImportedCoin>();

            // 0-trade id	1-product	2-side	3-created at	4-size	5-size unit	6-price	7-fee	8-total	price/fee/total unit
            using (var reader = new StreamReader(fileStream, System.Text.Encoding.ASCII))
            {
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    if (!line.Contains(',') || line.ToLower().StartsWith("trade"))
                    {
                        continue;
                    }

                    try
                    {
                        string[]     values = line.Split(',').Select(x => x.Trim()).ToArray();
                        ImportedCoin coin   = new ImportedCoin
                        {
                            Symbol    = "USD-" + values[1].Replace("-USD", string.Empty),
                            OrderType = values[2],
                            Shares    = decimal.Parse(values[4]),
                            TotalPricePaidInCurrency = decimal.Parse(values[6]) * decimal.Parse(values[4]),
                            OrderDate = DateTime.Parse(values[3]),
                            Exchange  = Types.Exchanges.GDax
                        };

                        importedCoins.Add(coin);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }

            return(importedCoins);
        }
예제 #5
0
        private static List <ImportedCoin> CSVImport_BitTrex(Stream fileStream)
        {
            List <ImportedCoin> importedCoins = new List <ImportedCoin>();

            // 0.OrderUuid,1.Exchange,2.Type,3.Quantity,4.Limit,5.CommissionPaid,6.Price,7.Opened,8.Closed
            using (var reader = new StreamReader(fileStream, System.Text.Encoding.Unicode))
            {
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    if (!line.Contains(',') || line.ToLower().StartsWith("orderuuid"))
                    {
                        continue;
                    }

                    try
                    {
                        string[]     values = line.Split(',').Select(x => x.Trim()).ToArray();
                        ImportedCoin coin   = new ImportedCoin
                        {
                            Symbol    = values[1],
                            OrderType = values[2],
                            Shares    = decimal.Parse(values[3]),
                            TotalPricePaidInCurrency = decimal.Parse(values[6]),
                            OrderDate = DateTime.Parse(values[8]),
                            Exchange  = Types.Exchanges.BitTrex
                        };

                        importedCoins.Add(coin);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }

            return(importedCoins);
        }
예제 #6
0
        private static List <ImportedCoin> CSVImport_Kraken(Stream fileStream)
        {
            List <ImportedCoin> importedCoins = new List <ImportedCoin>();

            // 0txid	1ordertxid	2pair	3time	4type	5ordertype	6price	7cost	8fee 9vol	10margin	11misc	12ledgers
            using (var reader = new StreamReader(fileStream, System.Text.Encoding.Default)) // ANSI
            {
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    if (!line.Contains(',') || line.ToLower().StartsWith("\"txid\""))
                    {
                        continue;
                    }

                    try
                    {
                        string[] values = line.Split(',').Select(x => x.Replace("\"", string.Empty).Trim()).ToArray();

                        string unformattedSymbol = values[2];
                        string appendAtTheFront  = string.Empty;

                        unformattedSymbol = unformattedSymbol.Replace("XX", "X");
                        if (unformattedSymbol.EndsWith("XBT"))
                        {
                            unformattedSymbol = unformattedSymbol.Replace("XBT", string.Empty);
                            appendAtTheFront  = "BTC-";
                        }
                        else if (unformattedSymbol.EndsWith("USD") || unformattedSymbol.EndsWith("USDT"))
                        {
                            unformattedSymbol = unformattedSymbol.Replace("USD", string.Empty).Replace("USDT", string.Empty);
                            appendAtTheFront  = "USD-";
                        }

                        if (unformattedSymbol.Length == 4 && unformattedSymbol.EndsWith("X") || unformattedSymbol.EndsWith("Z"))
                        {
                            unformattedSymbol = unformattedSymbol.Substring(0, (unformattedSymbol.Length - 1)); // Remove last character. X:BTC, Z:Cash
                        }
                        if (unformattedSymbol.Length == 4 && unformattedSymbol.StartsWith("X") || unformattedSymbol.StartsWith("Z"))
                        {
                            unformattedSymbol = unformattedSymbol.Substring(1); // Remove first character.
                        }
                        unformattedSymbol = unformattedSymbol.Replace("XBT", "BTC");

                        string formattedSymbol = appendAtTheFront + unformattedSymbol;
                        if (formattedSymbol.Length != 7)
                        {
                            continue;
                        }

                        ImportedCoin coin = new ImportedCoin
                        {
                            Symbol    = formattedSymbol,
                            OrderType = values[4],
                            Shares    = decimal.Parse(values[9]),
                            TotalPricePaidInCurrency = decimal.Parse(values[7]),
                            OrderDate = DateTime.Parse(values[3]),
                            Exchange  = Types.Exchanges.Kraken
                        };

                        importedCoins.Add(coin);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }

            return(importedCoins);
        }