Exemplo n.º 1
0
        static void Main(string[] args)
        {
            try
            {
                // Read Stock Sample Data
                string filePath = "./resources/data/stocks_sample_data.csv";
                CsvReader csvR = new CsvReader(new StreamReader(filePath));
                csvR.Configuration.RegisterClassMap<StockCsvMap>();
                TradeOperations.Stocks = csvR.GetRecords<Stock>().ToList();
                csvR.Dispose();

                // Print sample data
                Console.WriteLine("** Stock Sample Data **");
                foreach (var stock in TradeOperations.Stocks)
                    Console.WriteLine(stock);
                Console.WriteLine();

                // Create a pseudo-rand generator to generate trades
                Random rand = new Random(117);

                // Create a DateTime
                DateTime date = new DateTime(2016, 01, 01, 13, 00, 00, 00);

                // Get Indicators
                Array indicators = Enum.GetValues(typeof(Trade.Indicators));

                // Initialize TradeOperations
                ITradeOperations tradeOperations = new TradeOperations();
                // Create 1000 trade operations with randoms
                Console.WriteLine("** Trade Operations **");
                for (int i = 0; i < 1000; i++)
                {
                    // Add random seconds to a date
                    date = date.AddSeconds(rand.Next(1, 120));
                    // Create a trade with randoms
                    Trade trade = new Trade
                    {
                        Indicator = indicators.GetValue(rand.Next(0, indicators.Length)).ToString(),
                        Price = rand.Next(1, 10000) / 100.0,
                        Quantity = rand.Next(1, 1000),
                        Stock = TradeOperations.Stocks.ElementAt(rand.Next(0, TradeOperations.Stocks.Count)),
                        Timestamp = date
                    };

                    // Print the trade with calculated Dividend Yeld and P/E Ratio
                    Console.WriteLine(string.Format("Trade [{0}]: {1}; Dividend Yeld [{2:0.##}], P/E Ratio [{3:0.##}]",
                        i + 1, trade, trade.DividendYeld(), trade.PERatio()));

                    // Record the trade in the list of trades
                    tradeOperations.RecordTrade(trade);

                    // Print Stock Prices
                    StringBuilder sb = new StringBuilder("\tStock Prices: ");
                    foreach (Stock stock in TradeOperations.Stocks)
                        sb.Append(string.Format("[{0} = {1:0.##}]\t", stock.StockSymbol, tradeOperations.StockPrice(stock.StockSymbol)));
                    Console.WriteLine(sb);

                    // Print GBCE All Share Index
                    Console.WriteLine(string.Format("\tGBCE All Share Index = [{0:0.##}]", tradeOperations.StocksGeometricMean()));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadLine();
        }