Example #1
0
        public void TestTimeFactoryApplyRuleC()
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-Hans");
            TimeSeriesFactory ts = new TimeSeriesFactory(new[] {
                new DateTime(2017, 5, 10),
                new DateTime(2017, 5, 11),
                new DateTime(2017, 5, 13),
                new DateTime(2017, 7, 10),
                new DateTime(2017, 8, 10),
                new DateTime(2017, 9, 10),
            });

            ts.Apply(new RulePeriodSequence(PeriodType.Month, 3, TimeUnit.Day));
            ts.Apply(new RuleDistinct());
            ts.Apply(new RuleConditionShift(DateType.TradingDay, -1, TimeUnit.TradingDay));

            var resultA = string.Join(",", ts.DateTimes.Select(x => x.ToShortDateString()));
            var resultB = string.Join(",", new[] {
                "2017/5/3",
                "2017/7/3",
                "2017/8/3",
                "2017/9/1",
            });

            Assert.AreEqual(resultA, resultB);
        }
        public void CanCreateWaterLevelSeries()
        {
            var waterLevelSeries = TimeSeriesFactory.CreateWaterLevelTimeSeries();

            Assert.IsTrue(waterLevelSeries.IsWaterLevelSeries());
            Assert.AreEqual("m AD", waterLevelSeries.Components[0].Unit.Symbol);
        }
        public void ZeroChangeData()
        {
            var ts = TimeSeriesFactory <double> .Create(Enumerable.Repeat(10.0, 100), 1, DataFrequency.Daily);

            var sd = PortfolioAnalytics.AnnualisedStdDev(ts);

            Assert.AreEqual(0, sd);
        }
        public void ZeroStdDev()
        {
            // Create zero std dev time series object
            var ts = TimeSeriesFactory <double> .Create(Enumerable.Repeat(10.0, 100), 1, DataFrequency.Daily);

            var res = PortfolioEngine.PortfolioAnalytics.SharpeRatio(ts, 0.04);

            Assert.IsTrue(double.IsInfinity(res));
        }
Example #5
0
        private List <string> CalculateTimeByTimeRule(TimeRuleViewModel timeRule, TimeSeriesFactory timeSeries)
        {
            if (!timeRule.IsExistRule)
            {
                return(timeSeries.DateTimes.Select(x => Toolkit.DateToString(x)).ToList());
            }

            var order = 0;

            foreach (var item in timeRule.TimeRuleOrder)
            {
                order++;
                var timeRuleType = CommUtils.ParseEnum <TimeRuleType>(item);
                switch (timeRuleType)
                {
                case TimeRuleType.MoveAppointDate:
                    var shiftRule         = timeRule.ShiftList.Single(x => x.Ranking == order);
                    var shiftRuleUnitType = CommUtils.ParseEnum <TimeUnit>(shiftRule.ConditionUnitType);
                    var shiftRuleInterval = shiftRule.TimeMoveDirection == TimeMoveDirection.Minus.ToString()
                            ? shiftRule.Interval * -1 : shiftRule.Interval;

                    timeSeries.Apply(new RuleShift(shiftRuleInterval, shiftRuleUnitType));
                    break;

                case TimeRuleType.FindAppointDate:
                    var periodSequence         = timeRule.PeriodSequenceList.Single(x => x.Ranking == order);
                    var periodSequenceUnitType = CommUtils.ParseEnum <TimeUnit>(periodSequence.ConditionUnitType);
                    var periodType             = CommUtils.ParseEnum <PeriodType>(periodSequence.PeriodType);

                    timeSeries.Apply(new RulePeriodSequence(periodType, periodSequence.Interval, periodSequenceUnitType));
                    break;

                case TimeRuleType.ReplaceAppointDate:
                    var conditionShift         = timeRule.ConditionShiftList.Single(x => x.Ranking == order);
                    var conditionShiftUnitType = CommUtils.ParseEnum <TimeUnit>(conditionShift.ConditionUnitType);
                    var conditionShiftInterval = conditionShift.TimeMoveDirection == TimeMoveDirection.Minus.ToString()
                            ? conditionShift.Interval * -1 : conditionShift.Interval;
                    var conditionShiftDateType = CommUtils.ParseEnum <DateType>(conditionShift.DateType);

                    timeSeries.Apply(new RuleConditionShift(conditionShiftDateType, conditionShiftInterval, conditionShiftUnitType));
                    break;

                case TimeRuleType.RemoveRepeatDate:
                    timeSeries.Apply(new RuleDistinct());
                    break;

                default:
                    break;
                }
            }
            return(timeSeries.DateTimes.Select(x => Toolkit.DateToString(x)).ToList());
        }
Example #6
0
        public TimeSeriesFactory Transform(TimeSeriesFactory timeSeries)
        {
            return(new TimeSeriesFactory(timeSeries.DateTimes
                                         .Select(x => {
                var time = PeriodStart(x);

                if (CheckCondition(time))
                {
                    return time.AddTimeUnit(m_sequence - 1, m_unitType);
                }
                return time.AddTimeUnit(m_sequence, m_unitType);
            })));
        }
        public void FirstDifferenceTest()
        {
            var tsl = new List <TSDataPoint <double> >();

            tsl.Add(new TSDataPoint <double>(DateTime.Now.AddDays(2), 10));
            tsl.Add(new TSDataPoint <double>(DateTime.Now.AddDays(1), 11));
            tsl.Add(new TSDataPoint <double>(DateTime.Now.AddDays(3), 13));
            tsl.Add(new TSDataPoint <double>(DateTime.Now.AddDays(5), 11));
            tsl.Add(new TSDataPoint <double>(DateTime.Now.AddDays(8), 12));
            tsl.Add(new TSDataPoint <double>(DateTime.Now.AddDays(7), 14));
            tsl.Add(new TSDataPoint <double>(DateTime.Now.AddDays(11), 15));

            var ts = TimeSeriesFactory <double> .Create(tsl, "Lala", frequency : DataFrequency.Daily);

            var ret = ts.FirstDifference(ReturnMethod.Arithmetic);
        }
Example #8
0
        public void TestTimeFactoryConstructD()
        {
            TimeSeriesFactory ts = new TimeSeriesFactory(
                new DateTime(2017, 5, 5),
                new TimeStep {
                Interval = 1, Unit = TimeUnit.Year
            },
                new DateTime(2019, 5, 10));

            var resultA = string.Join(",", ts.DateTimes.Select(x => x.ToShortDateString()));
            var resultB = string.Join(",", new[] {
                "2017/5/5",
                "2018/5/5",
                "2019/5/5",
            });

            Assert.AreEqual(resultA, resultB);
        }
Example #9
0
        private List <string> GetTimeListByTimeRuleOrigin(TimeRuleViewModel timeRule, TimeOriginViewModel timeOrigin)
        {
            var timeOriginType = CommUtils.ParseEnum <TimeOriginType>(timeOrigin.TimeOriginType);
            TimeSeriesFactory timeSeriesFactory;
            var result = new List <string>();

            if (timeOriginType == TimeOriginType.CustomInput)
            {
                var customTimeList = CommUtils.Split(timeOrigin.CustomInput.CustomTimeList).Select(x => DateTime.Parse(x));
                timeSeriesFactory = new TimeSeriesFactory(customTimeList);
                result            = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }

            if (timeOriginType == TimeOriginType.Loop)
            {
                var startTime    = DateTime.Parse(timeOrigin.Loop.BeginTime);
                var endTime      = DateTime.Parse(timeOrigin.Loop.EndTime);
                var ruleUnitType = CommUtils.ParseEnum <TimeUnit>(timeOrigin.Loop.RuleUnitType);

                timeSeriesFactory = new TimeSeriesFactory(
                    new DateTime(startTime.Year, startTime.Month, startTime.Day),
                    new TimeStep {
                    Interval = timeOrigin.Loop.Interval, Unit = ruleUnitType
                },
                    new DateTime(endTime.Year, endTime.Month, endTime.Day));
                result = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }

            if (timeOriginType == TimeOriginType.MetaTask)
            {
                result = GetTimeListByPrevMetaTask(timeRule, timeOrigin.PrevMetaTask.MetaTaskGuid, timeOrigin.PrevMetaTask.MetaTaskTimeType);
            }

            if (timeOriginType == TimeOriginType.TaskSelfTime)
            {
                var timeSeries     = m_dbAdapter.TimeSeries.GetByGuid(timeOrigin.TaskSelfTime.TimeSeriesGuid);
                var CurrTimeRule   = GetTimeRuleDetail(timeSeries.Id);
                var CurrTimeOrigin = GetTimeOriginDetail(timeSeries.Guid, timeSeries.Id);
                var timeList       = GetTimeListByTimeRuleOrigin(CurrTimeRule, CurrTimeOrigin).Select(x => DateTime.Parse(x));
                timeSeriesFactory = new TimeSeriesFactory(timeList);
                result            = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }
            return(result);
        }
Example #10
0
        public void TestTimeFactoryConstructB()
        {
            TimeSeriesFactory ts = new TimeSeriesFactory(new[] {
                new DateTime(2017, 5, 10),
                new DateTime(2017, 5, 11),
                new DateTime(2017, 5, 13),
                new DateTime(2017, 7, 10),
                new DateTime(2017, 8, 10),
            });

            var resultA = string.Join(",", ts.DateTimes.Select(x => x.ToShortDateString()));
            var resultB = string.Join(",", new[] {
                "2017/5/10",
                "2017/5/11",
                "2017/5/13",
                "2017/7/10",
                "2017/8/10",
            });

            Assert.AreEqual(resultA, resultB);
        }
Example #11
0
        public void TestTimeFactoryApplyRuleA()
        {
            TimeSeriesFactory ts = new TimeSeriesFactory(
                new DateTime(2017, 5, 5),
                new TimeStep {
                Interval = 1, Unit = TimeUnit.TradingDay
            },
                new DateTime(2017, 5, 10));

            ts.Apply(new RuleShift(3, TimeUnit.Day));

            var resultA = string.Join(",", ts.DateTimes.Select(x => x.ToShortDateString()));
            var resultB = string.Join(",", new[] {
                "2017/5/8",
                "2017/5/11",
                "2017/5/12",
                "2017/5/13",
            });

            Assert.AreEqual(resultA, resultB);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="portfolio"></param>
        /// <param name="timeseries"></param>
        public static ITimeSeries <double> GetTimeSeries(this fPortfolio portfolio)
        {
            string[] timevector;
            double[,] timeseries;

            var expr       = fPortfolio.Engine.CallFunction("getSeries", portfolio.Expression);
            var timeexpr   = fPortfolio.Engine.CallFunction("time", expr);
            var timestring = fPortfolio.Engine.CallFunction("as.character", timeexpr);

            var mat  = expr.AsNumericMatrix();
            var time = timestring.AsCharacter();

            timevector = time.ToArray <string>();

            int numrows = mat.RowCount;
            int numcols = mat.ColumnCount;

            timeseries = new double[numrows, numcols];
            mat.CopyTo(timeseries, numrows, numcols);

            return(TimeSeriesFactory <double> .Create(timeseries, timevector));
        }
Example #13
0
        public void TestTimeFactoryApplyRuleB()
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-Hans");

            TimeSeriesFactory ts = new TimeSeriesFactory(
                new DateTime(2017, 5, 5),
                new TimeStep {
                Interval = 1, Unit = TimeUnit.TradingDay
            },
                new DateTime(2017, 5, 10));

            ts.Apply(new RuleShift(3, TimeUnit.TradingDay));

            var resultA = string.Join(",", ts.DateTimes.Select(x => x.ToShortDateString()));
            var resultB = string.Join(",", new[] {
                "2017/5/10",
                "2017/5/11",
                "2017/5/12",
                "2017/5/15",
            });

            Assert.AreEqual(resultA, resultB);
        }
Example #14
0
        private List <string> GetTimeListByPrevMetaTask(TimeRuleViewModel timeRule, string metaTaskGuid, string metaTaskTimeType)
        {
            var metaTask = m_dbAdapter.MetaTask.GetByGuid(metaTaskGuid);
            var timeType = CommUtils.ParseEnum <MetaTaskTimeType>(metaTaskTimeType);
            var result   = new List <string>();
            TimeSeriesFactory timeSeriesFactory;

            if (timeType == MetaTaskTimeType.StartTime)
            {
                if (!metaTask.StartTimeSeriesId.HasValue || metaTask.StartTimeSeriesId.Value == 0)
                {
                    return(null);
                }
                var timeSeries       = m_dbAdapter.TimeSeries.GetById(metaTask.StartTimeSeriesId.Value);
                var timeRuleDetail   = GetTimeRuleDetail(timeSeries.Id);
                var timeOriginDetail = GetTimeOriginDetail(timeSeries.Guid, timeSeries.Id);

                var timeStrList = GetTimeListByTimeRuleOrigin(timeRuleDetail, timeOriginDetail);
                var timeList    = timeStrList.ConvertAll(x => DateTime.Parse(x));
                timeSeriesFactory = new TimeSeriesFactory(timeList);
                result            = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }

            if (timeType == MetaTaskTimeType.EndTime)
            {
                var timeSeries       = m_dbAdapter.TimeSeries.GetById(metaTask.EndTimeSeriesId);
                var timeRuleDetail   = GetTimeRuleDetail(timeSeries.Id);
                var timeOriginDetail = GetTimeOriginDetail(timeSeries.Guid, timeSeries.Id);

                var timeStrList = GetTimeListByTimeRuleOrigin(timeRuleDetail, timeOriginDetail);
                var timeList    = timeStrList.ConvertAll(x => DateTime.Parse(x));
                timeSeriesFactory = new TimeSeriesFactory(timeList);
                result            = CalculateTimeByTimeRule(timeRule, timeSeriesFactory);
            }
            return(result);
        }
Example #15
0
 public TimeSeriesFactory Transform(TimeSeriesFactory timeSeries)
 {
     return(new TimeSeriesFactory(timeSeries.DateTimes.Distinct()));
 }
Example #16
0
 public TimeSeriesFactory Transform(TimeSeriesFactory timeSeries)
 {
     return(new TimeSeriesFactory(timeSeries.DateTimes
                                  .Select(x => x.AddTimeUnit(m_interval, m_timeUnit))));
 }
 public void CreateFromVector()
 {
     var data = TimeSeriesFactory <double> .Create(new[] { 0, 0.02, -0.03, 0.02, -0.015, 0, 0.02, 0.03, 0.02, -0.015, 0, -0.02, 0.03, 0.02, -0.015 }, 0, DataFrequency.Monthly);
 }