Exemple #1
0
        public TimeSeries GetTotalReturnTimeSeries()
        {
            TimeSeries last_ts = this.GetTimeSeries(TimeSeriesType.Close);

            if (last_ts == null || last_ts.Count == 0)
            {
                return(null);
            }

            int count = last_ts.Count;

            DateTime lastDate = last_ts.DateTimes[count - 1];

            if (_trDB.ContainsKey(lastDate))
            {
                return(_trDB[lastDate]);
            }



            TimeSeries tr_ts = new TimeSeries(1);

            tr_ts.AddDataPoint(last_ts.DateTimes[0], last_ts[0]);

            var all_corps = this.CorporateActions();

            for (int i = 1; i < count; i++)
            {
                DateTime date    = last_ts.DateTimes[i];
                DateTime date_1  = last_ts.DateTimes[i - 1];
                double   value   = last_ts[i];
                double   value_1 = last_ts[i - 1];


                double adjustment = 1.0;
                foreach (CorporateAction c in all_corps)
                {
                    if (c.ExDate >= date.Date)
                    {
                        if (c.Type == "Stock Split")
                        {
                            adjustment *= c.Amount;
                        }
                        else if (c.Type == "Scrip" && c.Amount != 0.0)
                        {
                            adjustment /= c.Amount;
                        }
                        else if (c.Type == "Spinoff" && c.Amount != 1.0)
                        {
                            adjustment /= 1 - c.Amount;
                        }
                    }
                }

                var corps = this.CorporateActions(date.Date);
                if (corps != null)
                {
                    foreach (CorporateAction corp in corps)
                    {
                        double amount = corp.Amount;
                        if (corp.Type != "Stock Split" && corp.Type != "Scrip" && corp.Type != "Spinoff")// && corp.Type != "Rights Issue")
                        {
                            value += amount * adjustment;
                        }
                        else if (corp.Type == "Spinoff" && corp.Amount != 1.0)
                        {
                            value /= 1 - amount;
                        }

                        else if (corp.Type == "Stock Split")
                        {
                            value *= amount;
                        }
                        else if (corp.Type == "Scrip" && corp.Amount != 0.0)
                        {
                            value /= amount;
                        }
                    }
                }


                double v_1 = tr_ts[i - 1];
                double v   = v_1 * (value / value_1);
                tr_ts.AddDataPoint(date, v);
            }

            double scale = last_ts[count - 1] / tr_ts[count - 1];

            tr_ts *= scale;

            _trDB.TryAdd(lastDate, tr_ts);

            return(tr_ts);
        }
Exemple #2
0
        public TimeSeries GetPriceReturnTimeSeries()
        {
            TimeSeries last_ts = this.GetTimeSeries(TimeSeriesType.Close);

            if (last_ts == null || last_ts.Count == 0)
            {
                return(null);
            }

            int count = last_ts.Count;

            DateTime lastDate = last_ts.DateTimes[count - 1];

            if (_prDB.ContainsKey(lastDate))
            {
                return(_prDB[lastDate]);
            }



            TimeSeries tr_ts = new TimeSeries(1);

            tr_ts.AddDataPoint(last_ts.DateTimes[0], last_ts[0]);

            for (int i = 1; i < count; i++)
            {
                DateTime date    = last_ts.DateTimes[i];
                DateTime date_1  = last_ts.DateTimes[i - 1];
                double   value   = last_ts[i];
                double   value_1 = last_ts[i - 1];

                //var corps = this.CorporateActions(date_1.Date);
                var corps = this.CorporateActions(date.Date);
                if (corps != null)
                {
                    foreach (CorporateAction corp in corps)
                    {
                        //Console.WriteLine(corp);

                        double amount = corp.Amount;
                        if (corp.Type != "Stock Split" && corp.Type != "Scrip" && corp.Type != "Spinoff")
                        {
                            value += amount * 0;// No Dividend Reinvestment
                        }
                        else if (corp.Type == "Spinoff" && corp.Amount != 1.0)
                        {
                            value /= 1 - amount;
                        }
                        else if (corp.Type == "Stock Split")
                        {
                            value *= amount;
                        }
                        else if (corp.Type == "Scrip" && corp.Amount != 0.0)
                        {
                            value /= amount;
                        }
                    }
                }


                double v_1 = tr_ts[i - 1];
                double v   = v_1 * (value / value_1);
                tr_ts.AddDataPoint(date, v);
            }

            double scale = last_ts[count - 1] / tr_ts[count - 1];

            tr_ts *= scale;

            _prDB.TryAdd(lastDate, tr_ts);

            return(tr_ts);
        }
Exemple #3
0
        public TimeSeries GetTotalReturnTimeSeries()
        {
            TimeSeries _last_ts = this.GetTimeSeries(TimeSeriesType.Close);

            if (_last_ts == null || _last_ts.Count == 0)
            {
                return(null);
            }

            TimeSeries last_ts = _last_ts.RemoveValue(0);

            int count = last_ts.Count;

            DateTime lastDate = last_ts.DateTimes[count - 1];

            if (_trDB.ContainsKey(lastDate))
            {
                return(_trDB[lastDate]);
            }



            TimeSeries tr_ts = new TimeSeries(1);

            tr_ts.AddDataPoint(last_ts.DateTimes[0], last_ts[0]);

            var all_corps = this.CorporateActions();

            if (all_corps == null || all_corps.Count == 0)
            {
                _trDB.TryAdd(lastDate, _last_ts);
                return(_last_ts);
            }

            for (int i = 1; i < count; i++)
            {
                DateTime date    = last_ts.DateTimes[i];
                DateTime date_1  = last_ts.DateTimes[i - 1];
                double   value   = last_ts[i];
                double   value_1 = last_ts[i - 1];


                double adjustment = 1.0;
                foreach (CorporateAction c in all_corps)
                {
                    if (c.ExDate >= date.Date)
                    {
                        // if (c.Type == "Stock Split")
                        //     adjustment *= c.Amount;
                        // else
                        if (c.Type == "Scrip" && c.Amount != 0.0)
                        {
                            adjustment /= c.Amount;
                        }
                        else if (c.Type == "Spinoff" && c.Amount != 1.0)
                        {
                            adjustment /= 1 - c.Amount;
                        }
                    }
                }

                var corps = this.CorporateActions(date.Date);
                if (corps != null)
                {
                    foreach (CorporateAction corp in corps)
                    {
                        double amount = corp.Amount;
                        if (corp.Type != "Stock Split" && corp.Type != "Scrip" && corp.Type != "Spinoff")// && corp.Type != "Rights Issue")
                        {
                            value += amount * adjustment;
                        }
                        else if (corp.Type == "Spinoff" && corp.Amount != 1.0)
                        {
                            value /= 1 - amount;
                        }

                        // else if (corp.Type == "Stock Split")
                        // {

                        //     if(value / value_1 > amount*0.75 && value / value_1 < amount*1.25)
                        //     {
                        //         Console.WriteLine("     --- APPLY STOCK SPLIT(" + this.Name + "): " + date_1 + " - " + date + " -- " + value_1 + " -> " + value + " | " + amount);
                        //         value *= amount;
                        //     }
                        // }
                        else if (corp.Type == "Scrip" && corp.Amount != 0.0)
                        {
                            value /= amount;
                        }
                    }
                }


                double v_1 = tr_ts[i - 1];
                double v   = v_1 * (value_1 == 0.0 ? 1.0 : value / value_1);
                tr_ts.AddDataPoint(date, v);
            }

            double scale = tr_ts[count - 1] == 0.0 ? 1.0 : last_ts[count - 1] / tr_ts[count - 1];

            tr_ts *= scale;

            _trDB.TryAdd(lastDate, tr_ts);

            return(tr_ts);
        }