示例#1
0
        public List <CotizationDay> GenerarListado()
        {
            ListaString = FileManager.OpenCSV(Path);
            bool             firstTimeEnter = true;
            CotizationDay    cotDay         = new CotizationDay();
            NumberFormatInfo nfi            = new NumberFormatInfo();

            nfi.NumberDecimalSeparator = (".");

            foreach (string line in ListaString)
            {
                if (!firstTimeEnter)
                {
                    string[] column   = line.Split(';');
                    DateTime Fecha    = DateTime.ParseExact(column[0], "dd-MMM-yyyy", CultureInfo.CreateSpecificCulture("es-US"));
                    Decimal  Cierre   = Convert.ToDecimal(column[1], nfi);
                    Decimal  Apertura = Convert.ToDecimal(column[2], nfi);
                    ListadoFinal.Add(new CotizationDay(Fecha, Apertura, Cierre));
                }
                else
                {
                    firstTimeEnter = false;
                }
            }
            ListadoFinal.Reverse();
            return(ListadoFinal);
        }
        public decimal Ganancia(decimal inversionInicial, decimal retencion, DateTime fechaVenta)
        {
            List <CotizationDay> ListadoDiasTransacciones = new List <CotizationDay>();
            List <DateTime>      ListadoFechas            = new List <DateTime>();

            foreach (CotizationDay cp in ListadoFinal)
            {
                ListadoFechas.Add(cp.Fecha);
            }

            DateTime diaDeCompra;
            int      mesActual = 0;

            foreach (DateTime dt in ListadoFechas)
            {
                if (mesActual != dt.Month)
                {
                    mesActual   = dt.Month;
                    diaDeCompra = DateTimeUtil.GetLastThursdayOfTheMonth(dt).AddDays(1);

                    while (ListadoFechas.IndexOf(diaDeCompra) == -1 &&
                           DateTime.Compare(diaDeCompra, fechaVenta) < 0)
                    {
                        diaDeCompra = diaDeCompra.AddDays(1);
                    }

                    foreach (CotizationDay cd in ListadoFinal)
                    {
                        if (DateTime.Compare(cd.Fecha, diaDeCompra) == 0 &&
                            DateTime.Compare(diaDeCompra, fechaVenta) < 0)
                        {
                            ListadoDiasTransacciones.Add(cd);
                        }
                    }
                }
            }

            decimal acciones       = 0;
            decimal inversionFinal = inversionInicial - Decimal.Round((Decimal.Round(inversionInicial * retencion) / 100), 3);

            foreach (CotizationDay cd in ListadoDiasTransacciones)
            {
                acciones += Decimal.Round(Decimal.Divide(inversionFinal, cd.Apertura), 3);
            }

            CotizationDay ultimoDiaCotizacion = new CotizationDay();

            foreach (CotizationDay cd in ListadoFinal)
            {
                if (DateTime.Compare(cd.Fecha, fechaVenta) == 0)
                {
                    ultimoDiaCotizacion = cd;
                    break;
                }
            }

            return(Decimal.Round(Decimal.Multiply(acciones, ultimoDiaCotizacion.Cierre), 3));
        }
示例#3
0
        public decimal Ganancia(decimal inversionInicial, decimal retencion, DateTime fechaVenta)
        {
            List <CotizationDay> ListadoDiasTransacciones = new List <CotizationDay>();
            List <DateTime>      ListadoFechas            = new List <DateTime>();

            foreach (CotizationDay cp in ListadoFinal)
            {
                ListadoFechas.Add(cp.Fecha);
            }


            DateTime diaDeCompra;
            int      mesActual = 0;

            foreach (DateTime dt in ListadoFechas)
            {
                if (mesActual != dt.Month)
                {
                    mesActual   = dt.Month;
                    diaDeCompra = DateTimeUtil.GetLastThursdayOfTheMonth(dt).AddDays(1);

                    Console.WriteLine($"\n-----------MES {dt.Month} AÑO {dt.Year}-------------------------");
                    Console.WriteLine($"Dia de compra {diaDeCompra}");

                    while (ListadoFechas.IndexOf(diaDeCompra) == -1 &&
                           DateTime.Compare(diaDeCompra, fechaVenta) < 0)
                    {
                        diaDeCompra = diaDeCompra.AddDays(1);
                        Console.WriteLine($"No hay cotización ese día, siguiente día es {diaDeCompra}");
                    }
                    Console.WriteLine($"Dia {diaDeCompra} válido.");
                    Console.WriteLine($"\n------------------------------------");

                    foreach (CotizationDay cd in ListadoFinal)
                    {
                        if (DateTime.Compare(cd.Fecha, diaDeCompra) == 0 &&
                            DateTime.Compare(diaDeCompra, fechaVenta) < 0)
                        {
                            ListadoDiasTransacciones.Add(cd);
                            Console.WriteLine($"GUARDADO DÍA {diaDeCompra} EN LISTA DE DÍAS DE COMPRA.");
                        }
                    }
                }
            }

            decimal acciones          = 0;
            decimal inversionFinal    = inversionInicial - Decimal.Round((Decimal.Round(inversionInicial * retencion) / 100), 3);
            decimal accCompradasMes   = 0;
            decimal dineroGanadoAnual = 0;

            Console.WriteLine($"\n---------------MOMENTO DE INVERSION---------------------");
            Console.WriteLine($"Retención {retencion} e inversión inicial {inversionInicial}");
            Console.WriteLine($"Inversion final {inversionFinal}");
            int     year               = 2001;
            decimal total2             = 0;
            decimal dineroGanadoMes    = 0;
            decimal accionesAnuales    = 0;
            decimal dineroGanadoAnual2 = 0;

            foreach (CotizationDay cd in ListadoDiasTransacciones)
            {
                if (cd.Fecha.Year != year && !(cd.Fecha.Month == 1 && cd.Fecha.Day < 7))
                {
                    dineroGanadoAnual2 = Decimal.Round(Decimal.Multiply(accionesAnuales, Convert.ToDecimal(29.17)), 3);
                    Console.WriteLine($"\n=======================================");
                    //Console.WriteLine($"Dinero sacado en {year}: {dineroGanadoAnual}");
                    Console.WriteLine($"Acciones totales en {year}: {accionesAnuales}");
                    Console.WriteLine($"Dinero ganado en {year}: {dineroGanadoAnual2}");
                    Console.WriteLine($"\n=======================================");
                    total2            = Decimal.Add(dineroGanadoAnual, total2);
                    dineroGanadoAnual = 0;
                    accionesAnuales   = 0;
                    year = cd.Fecha.Year;
                }

                acciones          = Decimal.Add(Decimal.Round(Decimal.Divide(inversionFinal, cd.Apertura), 3), acciones);
                accCompradasMes   = Decimal.Round(Decimal.Divide(inversionFinal, cd.Apertura), 3);
                dineroGanadoAnual = Decimal.Add(Decimal.Round(Decimal.Multiply(accCompradasMes, Convert.ToDecimal(29.17)), 3), dineroGanadoAnual);
                dineroGanadoMes   = Decimal.Round(Decimal.Multiply(accCompradasMes, Convert.ToDecimal(29.17)), 3);
                accionesAnuales   = Decimal.Add(accCompradasMes, accionesAnuales);


                Console.WriteLine($"\n------------------------------------");
                Console.WriteLine($"Número de acciones Compradas: {accCompradasMes}");
                Console.WriteLine($"Dinero generado este mes a 29,17€: {dineroGanadoMes}");
                Console.WriteLine($"Número de acciones Totales acumuladas: {acciones}");
                Console.WriteLine($"Fecha {cd.Fecha} y precio de la acción de apertura: {cd.Apertura}");
            }

            dineroGanadoAnual2 = Decimal.Round(Decimal.Multiply(accionesAnuales, Convert.ToDecimal(29.17)), 3);
            Console.WriteLine($"\n=======================================");
            //Console.WriteLine($"Dinero sacado en {year}: {dineroGanadoAnual}");
            Console.WriteLine($"Acciones totales en {year}: {accionesAnuales}");
            Console.WriteLine($"Dinero ganado en {year}: {dineroGanadoAnual2}");
            Console.WriteLine($"\n=======================================");
            total2 = Decimal.Add(dineroGanadoAnual, total2);

            CotizationDay ultimoDiaCotizacion = new CotizationDay();

            foreach (CotizationDay cd in ListadoFinal)
            {
                if (DateTime.Compare(cd.Fecha, fechaVenta) == 0)
                {
                    ultimoDiaCotizacion = cd;
                    break;
                }
            }

            Console.WriteLine($"\n---------------MOMENTO DE VENTA FINAL---------------------");
            //Console.WriteLine($"Total acciones: {acciones}");
            Console.WriteLine($"Fecha de venta: {ultimoDiaCotizacion.Fecha}");
            Console.WriteLine($"Precio Cierre: {ultimoDiaCotizacion.Cierre}");
            Console.WriteLine($"TOTAL: {total2}");

            return(Decimal.Round(Decimal.Multiply(acciones, ultimoDiaCotizacion.Cierre), 3));
        }