예제 #1
0
파일: ARMAXModel.cs 프로젝트: lulzzz/ARIMA
        /// <summary>
        /// performs adjustment to the original data based on exogenous time series,
        /// so that we can use the original likelihood function
        /// </summary>
        /// <returns></returns>
        protected TimeSeries ComputeAdjustedValues()
        {
            if (values == null)
                return null;
            if (exogenous == null)
                return values;
            for (int i=0 ; i<numExogenous ; ++i)
                if (exogenous[i] == null || exogenous[i].Count != values.Count)
                    return values;

            var adjustments = new TimeSeries();
            adjustments.Add(values.TimeStamp(0), 0, false);
            for (int t=1 ; t<values.Count ; ++t)
            {
                double tx = 0;
                for (int i=0 ; i<numExogenous ; ++i)
                    tx += exogenous[i][t - 1]*GetGamma(i);
                for (int i = 0; i < AROrder; ++i)
                    tx += t - i - 1 >= 0 ? ARCoeff(i)*adjustments[t - i - 1] : 0;
                adjustments.Add(values.TimeStamp(t), tx, false);
            }
            var adjusted = new TimeSeries();
            for (int t=0 ; t<values.Count ; ++t)
                adjusted.Add(adjustments.TimeStamp(t), values[t] - adjustments[t], false);
            return adjusted;
        }
예제 #2
0
파일: KDJ.cs 프로젝트: zjtan1992/OpenQuant
        public override double Calculate(int index)
        {
            int i = index - length + 1;

            if (i == 0)
            {
                // 将前一天初始化为50
                DateTime dt1 = Input.GetDateTime(index - 1);
                K.Add(dt1, 50);
                D.Add(dt1, 50);
            }
            else if (i < 0)
            {
                return(double.NaN);
            }

            double KValue = K[i];
            double DValue = D[i];

            KValue = (2.0 * KValue + rsv[i]) / 3.0;
            DValue = (2.0 * DValue + KValue) / 3.0;

            DateTime dt = Input.GetDateTime(index);

            K.Add(dt, KValue);
            D.Add(dt, DValue);

            return(3 * KValue - 2 * DValue);
        }
        protected override TimeSeries _BuildOutput(TimeSeries simulatedData, object userState = null)
        {
            int predictFuture = 0;


            double[] fstar;
            double[] Vfsar;
            double   logpyX;

            double[] targets = GetDataArray(simulatedData);
            Predict(targets, predictFuture, mSigma0, mLambda, mSigmaN, out fstar, out Vfsar, out logpyX);

            TimeSeries ft = new TimeSeries();

            for (int i = 0; i < targets.Length; ++i)
            {
                if (mBuildOutputType == BuildOutputType.Mean)
                {
                    ft.Add(simulatedData.TimeStamp(i), fstar[i], true);
                }
                else
                {
                    ft.Add(simulatedData.TimeStamp(i), Vfsar[i], true);
                }
            }
            return(ft);
        }
예제 #4
0
        //public override Icon GetIcon()
        //{
        //    var x = Images.ResourceManager.GetObject("ThresholdIcon") as Icon;
        //    return x;
        //}

        public override void Recompute()
        {
            var ins = GetInputBundle();

            outputs = new List <TimeSeries>();
            foreach (var ts in ins)
            {
                var ots = new TimeSeries()
                {
                    Title = ts.Title
                };
                for (int t = 0; t < ts.Count; ++t)
                {
                    if (ts[t] > Maximum)
                    {
                        ots.Add(ts.TimeStamp(t), Maximum, false);
                    }
                    else if (ts[t] < Minimum)
                    {
                        ots.Add(ts.TimeStamp(t), Minimum, false);
                    }
                    else
                    {
                        ots.Add(ts.TimeStamp(t), ts[t], false);
                    }
                }
                outputs.Add(ots);
            }
            IsValid = true;
        }
예제 #5
0
        private TimeSeries DoUnivariateSampling(TimeSeries ofTS)
        {
            var retval = new TimeSeries();

            retval.Title = ofTS.Title;

            if (SamplingInterval.Ticks == 0)
            {
                int  i0, i1;
                bool gotHit;
                i0 = ofTS.IndexAtOrBefore(StartTime, out gotHit);
                if (!gotHit)
                {
                    ++i0;
                }
                i1 = ofTS.IndexAtOrBefore(EndTime, out gotHit);
                ++i1;
                if (i1 > ofTS.Count)
                {
                    i1 = ofTS.Count;
                }
                for (int t = i0; t < i1; ++t)
                {
                    retval.Add(ofTS.TimeStamp(t), ofTS[t], false);
                }
            }
            else
            {
                for (var current = new DateTime(StartTime.Ticks); current < EndTime; current = new DateTime((current + SamplingInterval).Ticks))
                {
                    foreach (var sampleOffset in SamplingBaseOffsets)
                    {
                        var  adjusted = current + sampleOffset;
                        bool skipping = false;
                        if (SkipWeekends)
                        {
                            if (adjusted.DayOfWeek == DayOfWeek.Saturday || adjusted.DayOfWeek == DayOfWeek.Sunday)
                            {
                                skipping = true;
                            }
                        }
                        if (IsWithinSkipIntervals(adjusted))
                        {
                            skipping = true;
                        }

                        if (!skipping)
                        {
                            double sampled = ofTS.ValueAtTime(adjusted);
                            retval.Add(adjusted, sampled, false);
                        }
                    }
                }
            }

            return(retval);
        }
예제 #6
0
        //public override Icon GetIcon()
        //{
        //    return null;
        //}

        public override void Recompute()
        {
            IsValid = false;

            var tsList = GetInputBundle();

            if (tsList != null)
            {
                outputs = new List <TimeSeries>(tsList.Count);

                foreach (var ts in tsList)
                {
                    var stripped = new TimeSeries()
                    {
                        Title = ts.Title
                    };
                    for (int t = 0; t < ts.Count; ++t)
                    {
                        if (!(ts[t] < LowerValue || ts[t] > UpperValue))
                        {
                            stripped.Add(ts.TimeStamp(t), ts[t], true);
                        }
                    }

                    outputs.Add(stripped);
                }
                if (outputs.Count > 0)
                {
                    IsValid = true;
                }
            }
        }
예제 #7
0
        private static void Creating()
        {
            #region creating
            TimeSeries <Quarter, decimal> timeSeriesFromConstructor1 = new TimeSeries <Quarter, decimal>(
                Quarter.CreateQuarter1(2020),
                new [] { 21.3M, 42.4M, 42.5M });
            Console.WriteLine(timeSeriesFromConstructor1);
            Console.WriteLine();

            var timeSeriesFromConstructor2 = new TimeSeries <Day, double>(
                new [] { new Day(2019, 9, 17), new Day(2019, 9, 18), new Day(2019, 9, 19) },
                new [] { 242.4, 224.42, 262.04 });
            Console.WriteLine(timeSeriesFromConstructor2);
            Console.WriteLine();

            var builder = new TimeSeries <Month, int> .Builder
            {
                { Month.CreateJanuary(2019), 1 },
                { Month.CreateFebruary(2019), 2 },
                { Month.CreateMarch(2019), 3 }
            };

            builder.Add(Month.CreateApril(2019), 4);

            TimeSeries <Month, int> timeSeriesFromBuilder = builder.Build();
            Console.WriteLine(timeSeriesFromBuilder);
            Console.WriteLine();

            TimeSeries <Day, string> emptyTimeSeries = TimeSeries <Day, String> .Empty;
            Console.WriteLine(emptyTimeSeries);

            #endregion
        }
예제 #8
0
        public TimeSeries <string> historySeries(DateTime sDate, DateTime eDate)
        {
            TimeSeries <string> hist = new TimeSeries <string>();

            INDEX_DATA_Table_DAOManager dao_m = new INDEX_DATA_Table_DAOManager();

            dao_m.INDEX_CODE_ = this.Code_;

            dao_m.selectInterval(DataBaseConnectManager.ConnectionFactory("myDB"), sDate, eDate);

            foreach (var item in dao_m.DAOList_)
            {
                string date = item.INDEX_DATE_;

                int year  = Convert.ToInt32(date.Substring(0, 4));
                int month = Convert.ToInt32(date.Substring(4, 2));
                int day   = Convert.ToInt32(date.Substring(6, 2));

                string value = item.INDEX_VALUE_;

                hist.Add(new Date(new DateTime(year, month, day)), value);
            }

            return(hist);
        }
예제 #9
0
        public TimeSeries <string> historyCurveSeriesMRO(DateTime sDate, DateTime eDate)
        {
            TimeSeries <string> hist = new TimeSeries <string>();

            IRCurveMarketDataLoader irCurveLoader = IRCurveMarketDataLoader.CreateMarketDataLoader("MRO");

            ObservableCollection <Excel_irCurveDataViewModel> e_ircdvmList = new ObservableCollection <Excel_irCurveDataViewModel>();

            irCurveLoader.loadInterval(sDate, eDate, this.LinkedCurveCode_, e_ircdvmList);

            //TD_MRSTOCKFACTOR_Table_DAOManager dao_m = new TD_MRSTOCKFACTOR_Table_DAOManager();

            //dao_m.STOCK_ID_ = this.Code_;

            //dao_m.selectInterval(DataBaseConnectManager.ConnectionFactory("MRO"), sDate, eDate);

            int tenorIndex = e_ircdvmList[0].getTenorIndex(this.Tenor_);

            if (tenorIndex != -1)
            {
                foreach (var item in e_ircdvmList)
                {
                    string value = item.Excel_rateDataViewModelList_[tenorIndex].Value_;

                    hist.Add(new Date(item.ReferenceDate_), value);
                }
            }

            return(hist);
        }
예제 #10
0
        public TimeSeries <string> historySeriesMRO(DateTime sDate, DateTime eDate)
        {
            TimeSeries <string> hist = new TimeSeries <string>();

            TD_MRSTOCKFACTOR_Table_DAOManager dao_m = new TD_MRSTOCKFACTOR_Table_DAOManager();

            dao_m.STOCK_ID_ = this.Code_;

            dao_m.selectInterval(DataBaseConnectManager.ConnectionFactory("MRO"), sDate, eDate);

            foreach (var item in dao_m.DAOList_)
            {
                string date = item.STD_DATE_;

                int year  = Convert.ToInt32(date.Substring(0, 4));
                int month = Convert.ToInt32(date.Substring(4, 2));
                int day   = Convert.ToInt32(date.Substring(6, 2));

                string value = item.CURR_PRICE_;

                hist.Add(new Date(new DateTime(year, month, day)), value);
            }

            return(hist);
        }
예제 #11
0
        public double SharpeRatio(double RiskFreeRate)
        {
            int        Days         = Solution.Performance.PnLSeries.Count;
            TimeSeries ReturnSeries = new TimeSeries();
            double     Portfolio0   = Solution.Cash;
            double     Portfolio1;

            for (int t = 0; t < Days; ++t)
            {
                DateTime date = Solution.Performance.PnLSeries.GetDateTime(t);
                Portfolio1 = Solution.Performance.PnLSeries[t] + Portfolio0;
                double DailyReturn = Portfolio1 / Portfolio0 - 1;
                Portfolio0 = Portfolio1;
                ReturnSeries.Add(date, DailyReturn);
            }

            double Mean = ReturnSeries.GetMean(0, Days - 1);
            double Std  = ReturnSeries.GetStdDev(0, Days - 1);

            //年化收益均值、波动率
            Mean = Mean * 250;
            Std  = Std * Math.Sqrt(250);

            double SR = (Mean - RiskFreeRate) / Std;

            return(SR);
        }
예제 #12
0
        //public override Icon GetIcon()
        //{
        //    return null;
        //}

        public override void Recompute()
        {
            IsValid = false;
            if (GetInputType(-1) != InputType.UnivariateTS)
            {
                return;
            }

            var series = GetInputBundle();

            if (series.Count != 1)
            {
                return;  // something wrong!
            }
            var input = series[0];

            var    agg         = new TimeSeries();
            double accumulated = 0;

            for (int t = 0; t < input.Count; ++t)
            {
                accumulated += input[t];
                if (t % Period == Period - 1)
                {
                    agg.Add(input.TimeStamp(t), accumulated, false);
                    accumulated = 0;
                }
            }

            outputs = new List <TimeSeries>();
            outputs.Add(agg);
            IsValid = true;
        }
예제 #13
0
        public override void OnBarSlice(long size)
        {
            if (Instrument1 == Instrument)
            {
                return;
            }

            if (BarSeries1.Count < 1 || BarSeries2.Count < 1)
            {
                return;
            }

            DateTime dt = BarSeries1.Last.DateTime;

            if (dt.CompareTo(BarSeries2.Last.DateTime) < 0)
            {
                dt = BarSeries2.Last.DateTime;
            }
            spreadSeries.Add(dt, Calculate(BarSeries1.Last, BarSeries2.Last));

            if (sma.Count < 1)
            {
                return;
            }

            //操作
            //Sell(Instrument2,Qty2,"O|卖开");
            //Buy(Instrument1,Qty1,"O|买开");
        }
예제 #14
0
        public void TestEMA()
        {
            long ticks = 1000;
            var  data  = new double[] { 20, 40, 22, 35, 33, 78, 21, 45, 33, 5, 67, 22, 98, 22, 34, 54 };
            var  input = new TimeSeries();
            var  ema   = new EMA(input, 10);

            foreach (var d in data)
            {
                input.Add(new DateTime().AddTicks(ticks++), d);
            }
            for (var i = 0; i < ema.Count; i++)
            {
                output.WriteLine(ema[i].ToString());
            }


            Assert.Equal(ema[0], 20, precision);
            Assert.Equal(ema[1], 23.6363636363636, precision);
            Assert.Equal(ema[2], 23.3388429752066, precision);
            Assert.Equal(ema[3], 25.4590533433509, precision);
            Assert.Equal(ema[4], 26.8301345536507, precision);
            Assert.Equal(ema[5], 36.1337464529869, precision);
            Assert.Equal(ema[6], 33.3821561888075, precision);
            Assert.Equal(ema[7], 35.4944914272061, precision);
            Assert.Equal(ema[8], 35.0409475313505, precision);
            Assert.Equal(ema[9], 29.5789570711049, precision);
            Assert.Equal(ema[10], 36.3827830581768, precision);
            Assert.Equal(ema[11], 33.7677315930537, precision);
            Assert.Equal(ema[12], 45.4463258488621, precision);
            Assert.Equal(ema[13], 41.1833575127054, precision);
            Assert.Equal(ema[14], 39.8772925103953, precision);
            Assert.Equal(ema[15], 42.4450575085053, precision);
        }
예제 #15
0
        public void TestEMA()
        {
            long ticks = 1000;
            var data = new double[] { 20, 40, 22, 35, 33, 78, 21, 45, 33, 5, 67, 22, 98, 22, 34, 54 };
            var input = new TimeSeries();
            var ema = new EMA(input, 10);
            foreach (var d in data)
                input.Add(new DateTime().AddTicks(ticks++), d);
            for (var i = 0; i < ema.Count; i++)
                output.WriteLine(ema[i].ToString());


            Assert.Equal(ema[0], 20, precision);
            Assert.Equal(ema[1], 23.6363636363636, precision);
            Assert.Equal(ema[2], 23.3388429752066, precision);
            Assert.Equal(ema[3], 25.4590533433509, precision);
            Assert.Equal(ema[4], 26.8301345536507, precision);
            Assert.Equal(ema[5], 36.1337464529869, precision);
            Assert.Equal(ema[6], 33.3821561888075, precision);
            Assert.Equal(ema[7], 35.4944914272061, precision);
            Assert.Equal(ema[8], 35.0409475313505, precision);
            Assert.Equal(ema[9], 29.5789570711049, precision);
            Assert.Equal(ema[10], 36.3827830581768, precision);
            Assert.Equal(ema[11], 33.7677315930537, precision);
            Assert.Equal(ema[12], 45.4463258488621, precision);
            Assert.Equal(ema[13], 41.1833575127054, precision);
            Assert.Equal(ema[14], 39.8772925103953, precision);
            Assert.Equal(ema[15], 42.4450575085053, precision);
        }
예제 #16
0
        public override void Recompute()
        {
            IsValid = false;
            var inputs = GetInputBundle();

            outputs = new List <TimeSeries>(inputs.Count);

            bool failure = false;

            for (int i = 0; i < inputs.Count; ++i)
            {
                var lrs = new TimeSeries();
                for (int t = 1; t < inputs[i].Count; ++t)
                {
                    double x1 = inputs[i][t - 1];
                    double x2 = inputs[i][t];
                    if (x1 > 0 && x2 > 0)
                    {
                        lrs.Add(inputs[i].TimeStamp(t), Math.Log(x2) - Math.Log(x1), false);
                    }
                    else
                    {
                        failure = true;
                    }
                }
                lrs.Title = inputs[i].Title;
                outputs.Add(lrs);
            }
            multivariateOutputPrefix = "LR";
            IsValid = true;
            if (failure)
            {
                MessageBox.Show("One or more values was non-positive, corresponding log-returns were left out.", "Warning");
            }
        }
예제 #17
0
            public static TimeSeries <T> Hourly(Func <T> empty, T initialValue)
            {
                var ts = new TimeSeries <T>(60, empty);

                ts.Add(initialValue);
                return(ts);
            }
예제 #18
0
        public TimeSeries Predict(SupportVectorMachine network, NormalizeArray norm, TimeSeries simulatedData)
        {
            double[] data = GenerateData(simulatedData);

            int        data_count = simulatedData.Count;
            TimeSeries ts         = new TimeSeries();
            double     input_val  = 0;

            for (int idx = 0; idx < data_count; ++idx)
            {
                var input = new BasicMLData(WindowSize);
                for (var i = 0; i < WindowSize; i++)
                {
                    int idx2 = (idx - WindowSize) + i;
                    if (idx2 < 0)
                    {
                        input_val = 0;
                    }
                    else
                    {
                        input_val = norm.Stats.Normalize(data[idx2]);
                    }
                    input[i] = input_val;
                }
                IMLData output     = network.Compute(input);
                double  prediction = norm.Stats.DeNormalize(output[0]);
                ts.Add(simulatedData.TimeStamp(idx), prediction, false);
            }

            return(ts);
        }
예제 #19
0
파일: GARCHModel.cs 프로젝트: lulzzz/ARIMA
        public override object SimulateData(object inputs, int simSeed)
        {
            var times = inputs as List <DateTime>;

            if (times == null)
            {
                return(null); // inputs should be a list of DateTimes
            }
            int n         = times.Count;
            var simulated = new TimeSeries();

            var randomSource = new Palf(simSeed);
            var stdnormal    = new Normal();

            stdnormal.RandomSource = randomSource;

            double          mVar = GetVariance(Parameters);
            Vector <double> ss   = Vector <double> .Build.Dense(n);

            for (int i = 0; i < n; ++i)
            {
                double variance = GetConditionalSig2(i, simulated, ss, Parameters, mVar);
                double simLR    = stdnormal.RandomSource.NextDouble() * Math.Sqrt(variance);
                simulated.Add(times[i], simLR, false);
            }

            simulated.Title       = "Simulation";
            simulated.Description = "Simulation from " + Description;
            return(simulated);
        }
예제 #20
0
        public TimeSeries BuildForecasts(List <DateTime> x_values, List <double> y_values, int day_interval, int future_count)
        {
            TimeSeries simulatedData   = new TimeSeries();
            int        used_data_count = x_values.Count;

            //Create the data
            for (int t = 0; t < used_data_count; ++t)
            {
                double   s1      = y_values[t];
                DateTime current = x_values[t];
                simulatedData.Add(current, s1, false);
            }


            var nextTime    = simulatedData.GetLastTime();
            var futureTimes = new List <DateTime>();

            for (int t = 0; t < future_count; ++t)                    // go eight days into the future beyond the end of the data we have
            {
                nextTime = nextTime.AddDays(day_interval);
                futureTimes.Add(nextTime);
            }

            return(BuildForecasts(simulatedData, futureTimes));
        }
예제 #21
0
        public List <double> BuildForecasts(List <double> data, int future_count)
        {
            TimeSeries simulatedData = new TimeSeries();
            DateTime   current       = DateTime.UtcNow;

            //Create the data
            for (int t = 0; t < data.Count; ++t)
            {
                double s1 = data[t];
                simulatedData.Add(current, s1, false);
                current = current.AddDays(1);
            }

            var nextTime    = simulatedData.GetLastTime();
            var futureTimes = new List <DateTime>();

            for (int t = 0; t < future_count; ++t)                    // go eight days into the future beyond the end of the data we have
            {
                nextTime = nextTime.AddDays(1);
                futureTimes.Add(nextTime);
            }

            TimeSeries    preds1 = BuildForecasts(simulatedData, futureTimes);
            List <double> preds2 = new List <double>();

            for (int i = 0; i < future_count; ++i)
            {
                preds2.Add(preds1[i]);
            }

            return(preds2);
        }
예제 #22
0
        public void TimeSeriesBasics()
        {
            TimeSeries series = new TimeSeries();

            Assert.IsTrue(series.Count == 0);

            series.Add(3.0, 2.0, 1.0);

            Assert.IsTrue(series[0] == 3.0);
            Assert.IsTrue(series[1] == 2.0);
            Assert.IsTrue(series[2] == 1.0);

            Assert.IsTrue(series.Count == 3);
            Assert.IsFalse(series.Contains(0.0));
            Assert.IsTrue(series.Contains(1.0));
            Assert.IsTrue(series.IndexOf(0.0) == -1);
            Assert.IsTrue(series.IndexOf(1.0) == 2);

            Assert.IsTrue(TestUtilities.IsNearlyEqual(series.Mean, 2.0));

            series[2] = 0.0;
            Assert.IsTrue(series.Count == 3);
            Assert.IsTrue(series.Contains(0.0));
            Assert.IsFalse(series.Contains(1.0));
            Assert.IsTrue(series.IndexOf(0.0) == 2);
            Assert.IsTrue(series.IndexOf(1.0) == -1);

            Assert.IsTrue(TestUtilities.IsNearlyEqual(series.Mean, 5.0 / 3.0));

            series.Clear();
            Assert.IsTrue(series.Count == 0);
            Assert.IsFalse(series.Contains(0.0));
            Assert.IsTrue(series.IndexOf(0.0) == -1);
        }
예제 #23
0
        protected override TimeSeries _BuildOutput(TimeSeries simulatedData, object userState = null)
        {
            if (mModel == null)
            {
                mModel = BuildModel(simulatedData, out mScaleFactor);
            }

            TimeSeries preds = new TimeSeries();

            for (int i = 0; i < simulatedData.Count; ++i)
            {
                double[] input = new double[mWindowSize];
                for (int j = 0; j < mWindowSize; ++j)
                {
                    int index = i - (mWindowSize - j);
                    if (index >= 0)
                    {
                        input[j] = simulatedData[index] / mScaleFactor;
                    }
                }

                double[] output = new double[1];
                mModel.Compute(input, output);
                preds.Add(simulatedData.TimeStamp(i), output[0] * mScaleFactor, false);
            }

            return(preds);
        }
예제 #24
0
 public override void OnBar(Bar bar)
 {
     if (bar.DateTime.Day != day)
     {
         day = bar.DateTime.Day;
         ts.Add(bar.DateTime, bar.High + 1);
     }
 }
예제 #25
0
        public override void OnBar(Bar bar)
        {
            DateTime time     = Clock.Now;
            int      dateTime = time.Hour * 10000 + time.Minute * 100 + time.Second;

            if (dateTime > closeTime)
            {
                ClosePosition("T|尾盘平仓");
                return;
            }

            if (86400 == bar.Size)
            {
                return;
            }

            if (double.IsNaN(UpLine))
            {
                return;
            }

            UpSeries.Add(bar.DateTime, UpLine);
            DownSeries.Add(bar.DateTime, DownLine);
            RangeSeries.Add(bar.DateTime, Range);

            if (Mode == StrategyMode.Simulation)
            {
                // 从模拟切换实盘时用
                //return;
            }

            if (HasPosition)
            {
                if (Position.Amount < 0 &&
                    bar.Close > UpLine)
                {
                    ClosePosition("T|反手");
                    Buy(Qty, "O|");
                }
                if (Position.Amount > 0 &&
                    bar.Close < DownLine)
                {
                    ClosePosition("T|反手");
                    Sell(Qty, "O|");
                }
            }
            else
            {
                if (bar.Close > UpLine)
                {
                    Buy(Qty, "O|");
                }
                else if (bar.Close < DownLine)
                {
                    Sell(Qty, "O|");
                }
            }
        }
예제 #26
0
        public void TestAdd()
        {
            object   obj1 = new Object();
            DateTime dt   = new DateTime(2014, 1, 1, 8, 8, 8);

            ts.Add(dt, obj1);
            Assert.AreSame(obj1, ts[dt]);
            Assert.AreSame(obj1, ts[0]);
        }
예제 #27
0
        public void TimeSeriesAutocovariance()
        {
            TimeSeries series1 = new TimeSeries();

            series1.Add(0.0, -1.0, 2.0, -3.0);

            double[] acv1 = series1.Autocovariance();
            TestAutocovariance(acv1);
        }
 public static void Load(this TimeSeries s, Stream stream)
 {
     using (var reader = new BinaryReader(stream)) {
         while (reader.PeekChar() != -1)
         {
             s.Add(new DateTime(reader.ReadInt64()), reader.ReadDouble());
         }
     }
 }
예제 #29
0
        //public override Icon GetIcon()
        //{
        //    return null;
        //}

        private TimeSeries ApplyFilterTo(TimeSeries ts)
        {
            var retval = new TimeSeries();

            int maOrder = maCoeffs.Length;
            int arOrder = arCoeffs.Length;

            double arSum = 0;

            for (int i = 1; i < arOrder; ++i)
            {
                arSum += arCoeffs[i];
            }
            double maSum = 0;

            for (int i = 0; i < maOrder; ++i)
            {
                maSum += maCoeffs[i];
            }

            // now go through and apply filter
            for (int t = 0; t < ts.Count; ++t)
            {
                double tx = 0.0;
                if (TimeInterval.Ticks == 0)     // apply the filter to successive data points
                {
                    // get MA part
                    for (int i = 0; i < maOrder; ++i)
                    {
                        tx += t >= i ? maCoeffs[i] * ts[t - i] : ts[0];
                    }
                    // get AR part
                    for (int i = 1; i < arOrder; ++i)
                    {
                        tx += t >= i ? arCoeffs[i] * retval[t - i] : ts[0];
                    }
                    tx /= (arSum + maSum);
                }
                else     // apply the filter to data points at specified sampling interval
                {
                    // get MA part
                    for (int i = 0; i < maOrder; ++i)
                    {
                        tx += maCoeffs[i] * ts.ValueAtTime(ts.TimeStamp(t) - new TimeSpan(i * TimeInterval.Ticks));
                    }
                    // get AR part
                    for (int i = 1; i < arOrder; ++i)
                    {
                        tx += arCoeffs[i] * retval.ValueAtTime(ts.TimeStamp(t) - new TimeSpan(i * TimeInterval.Ticks));
                    }
                    tx /= (arSum + maSum);
                }
                retval.Add(ts.TimeStamp(t), tx, false);
            }

            return(retval);
        }
예제 #30
0
파일: Index.cs 프로젝트: akasolace/qlnet
        public void addFixings(List<Date> d, List<double> v, bool forceOverwrite) {
            if ((d.Count != v.Count) || d.Count == 0)
                throw new ArgumentException("Wrong collection dimensions when creating index fixings");

            TimeSeries<double> t = new TimeSeries<double>();
            for(int i=0; i<d.Count; i++)
                t.Add(d[i], v[i]);
            addFixings(t, forceOverwrite);
        }
예제 #31
0
 void UpdateAtBar_RBreaker(Bar bar)
 {
     ssetup.Add(bar.DateTime, _ssetup);
     bsetup.Add(bar.DateTime, _bsetup);
     senter.Add(bar.DateTime, _senter);
     benter.Add(bar.DateTime, _benter);
     bbreak.Add(bar.DateTime, _bbreak);
     sbreak.Add(bar.DateTime, _sbreak);
 }
예제 #32
0
        public override void OnBar(Bar bar)
        {

            // 这个地方是关键
            lengths.Add(bar.DateTime, 5);

            // 别的就自己写吧

        }
예제 #33
0
 public static double Value(ISeries input, int index, int length1, int length2)
 {
     if (index >= length1 - 1 && index >= length2 - 1)
     {
         var ts = new TimeSeries();
         for (var i = index - Math.Max(length1, length2) + 1; i <= index; i++)
             ts.Add(input.GetDateTime(i), input[i, BarData.Volume]);
         return SMA.Value(ts, length1 - 1, length1) - SMA.Value(ts, length2 - 1, length2);
     }
     return double.NaN;
 }
예제 #34
0
        public EstimationResult Estimate(IEnumerable<IDateValue> dateValues)
        {
            var series = new TimeSeries();
            dateValues.ForEach(x => series.Add(x.Date, x.Value, true));

            armaModel.SetInput(0, series, null);
            armaModel.FitByMLE(200, 100, 0, null);
            armaModel.ComputeResidualsAndOutputs();

            var result = armaModel.GetOutput(3) as TimeSeries;
            return EstimationResult.Create(result[0], this);
        }
예제 #35
0
 public static double Value(ISeries input, int index, int length1, int length2)
 {
     if (index >= length2 - 1)
     {
         var ts = new TimeSeries();
         for (var i = 0; i <= index; i++)
             ts.Add(input.GetDateTime(i), input[i, BarData.High] - input[i, BarData.Low]);
         var ema = new EMA(ts, length1);
         return (ema[index] - ema[index - length2 + 1])/ema[index - length2 + 1]*100;
     }
     return double.NaN;
 }
예제 #36
0
 public static double Value(ISeries input, int index, int length, int order)
 {
     if (index >= length - 1)
     {
         var ts = new TimeSeries();
         for (int i = 0; i <= index; i++)
             ts.Add(input.GetDateTime(i), input[i, BarData.High] - input[i, BarData.Low]);
         var ema = new EMA(ts, order);
         var ema_ema = new EMA(ema, order);
         return Enumerable.Range(index - length + 1, length).Reverse().Sum(i => ema[i]/ema_ema[i]);
     }
     return double.NaN;
 }
예제 #37
0
파일: VOSC.cs 프로젝트: ForTrade/CSharp
		public static double Value(ISeries input, int index, int length1, int length2)
		{
			if (index >= length1 - 1 && index >= length2 - 1)
			{
				TimeSeries timeSeries = new TimeSeries();
				for (int i = index - Math.Max(length1, length2) + 1; i <= index; i++)
				{
					timeSeries.Add(input.GetDateTime(i), input[i, BarData.Volume]);
				}
				double num = SMA.Value(timeSeries, length1 - 1, length1, BarData.Close);
				double num2 = SMA.Value(timeSeries, length2 - 1, length2, BarData.Close);
				return num - num2;
			}
			return double.NaN;
		}
예제 #38
0
 public void TestWMA()
 {
     long ticks = 1000;
     var data = new double[] { 20, 40, 22, 35, 33, 78, 21, 45, 33, 5, 67, 22, 98, 22, 34, 54 };
     var input = new TimeSeries();
     var wma = new WMA(input, 10);
     foreach (var d in data)
         input.Add(new DateTime().AddTicks(ticks++), d);
     Assert.Equal(wma[0], 32.6, precision);
     Assert.Equal(wma[1], 38.7454545454545, precision);
     Assert.Equal(wma[2], 35.8545454545455, precision);
     Assert.Equal(wma[3], 47.1090909090909, precision);
     Assert.Equal(wma[4], 43.1636363636364, precision);
     Assert.Equal(wma[5], 41.6363636363636, precision);
     Assert.Equal(wma[6], 43.7272727272727, precision);
 }
예제 #39
0
파일: TRIX.cs 프로젝트: ForTrade/CSharp
		public static double Value(ISeries input, int index, int length, BarData barData = BarData.Close)
		{
			if (index >= 1)
			{
				TimeSeries timeSeries = new TimeSeries();
				for (int i = 0; i <= index; i++)
				{
					timeSeries.Add(input.GetDateTime(i), input[i, barData]);
				}
				EMA input2 = new EMA(timeSeries, length, barData);
				EMA input3 = new EMA(input2, length, barData);
				EMA eMA = new EMA(input3, length, barData);
				return (eMA[index] - eMA[index - 1]) / eMA[index - 1] * 100.0;
			}
			return double.NaN;
		}
        public TimeSeries<string> historyCurveSeriesMRO(DateTime sDate, DateTime eDate)
        {
            TimeSeries<string> hist = new TimeSeries<string>();

            IRCurveMarketDataLoader irCurveLoader = IRCurveMarketDataLoader.CreateMarketDataLoader("MRO");

            ObservableCollection<Excel_irCurveDataViewModel> e_ircdvmList = new ObservableCollection<Excel_irCurveDataViewModel>();

            irCurveLoader.loadInterval(sDate, eDate, this.LinkedCurveCode_, e_ircdvmList);

            //TD_MRSTOCKFACTOR_Table_DAOManager dao_m = new TD_MRSTOCKFACTOR_Table_DAOManager();

            //dao_m.STOCK_ID_ = this.Code_;

            //dao_m.selectInterval(DataBaseConnectManager.ConnectionFactory("MRO"), sDate, eDate);

            int tenorIndex = e_ircdvmList[0].getTenorIndex(this.Tenor_);

            if (tenorIndex != -1)
            {
                foreach (var item in e_ircdvmList)
                {
                    string value = item.Excel_rateDataViewModelList_[tenorIndex].Value_;

                    hist.Add(new Date(item.ReferenceDate_), value);
                }

            }

            return hist;
        }
        public TimeSeries<string> historySeries(DateTime sDate, DateTime eDate )
        {
            TimeSeries<string> hist = new TimeSeries<string>();

            INDEX_DATA_Table_DAOManager dao_m = new INDEX_DATA_Table_DAOManager();

            dao_m.INDEX_CODE_ = this.Code_;
            
            dao_m.selectInterval(DataBaseConnectManager.ConnectionFactory("myDB"),sDate,eDate);

            foreach (var item in dao_m.DAOList_)
            {
                string date = item.INDEX_DATE_;

                int year =  Convert.ToInt32(date.Substring(0, 4));
                int month = Convert.ToInt32(date.Substring(4, 2));
                int day = Convert.ToInt32(date.Substring(6, 2));

                string value = item.INDEX_VALUE_;

                hist.Add(new Date(new DateTime(year,month, day)), value);

            }

            return hist;
        }
        public TimeSeries<string> historySeriesMRO(DateTime sDate, DateTime eDate)
        {
            TimeSeries<string> hist = new TimeSeries<string>();

            TD_MRSTOCKFACTOR_Table_DAOManager dao_m = new TD_MRSTOCKFACTOR_Table_DAOManager();

            dao_m.STOCK_ID_ = this.Code_;

            dao_m.selectInterval(DataBaseConnectManager.ConnectionFactory("MRO"), sDate, eDate);

            foreach (var item in dao_m.DAOList_)
            {
                string date = item.STD_DATE_;

                int year = Convert.ToInt32(date.Substring(0, 4));
                int month = Convert.ToInt32(date.Substring(4, 2));
                int day = Convert.ToInt32(date.Substring(6, 2));

                string value = item.CURR_PRICE_;

                hist.Add(new Date(new DateTime(year, month, day)), value);

            }

            return hist;
        }
예제 #43
0
파일: VCH.cs 프로젝트: ForTrade/CSharp
		public static double Value(ISeries input, int index, int length1, int length2)
		{
			if (index >= length2 - 1)
			{
				TimeSeries timeSeries = new TimeSeries();
				for (int i = 0; i <= index; i++)
				{
					timeSeries.Add(input.GetDateTime(i), input[i, BarData.High] - input[i, BarData.Low]);
				}
				EMA eMA = new EMA(timeSeries, length1, BarData.Close);
				return (eMA[index] - eMA[index - length2 + 1]) / eMA[index - length2 + 1] * 100.0;
			}
			return double.NaN;
		}
예제 #44
0
파일: MASS.cs 프로젝트: ForTrade/CSharp
		public static double Value(ISeries input, int index, int length, int order)
		{
			if (index >= length - 1)
			{
				TimeSeries timeSeries = new TimeSeries();
				for (int i = 0; i <= index; i++)
				{
					timeSeries.Add(input.GetDateTime(i), input[i, BarData.High] - input[i, BarData.Low]);
				}
				EMA eMA = new EMA(timeSeries, order, BarData.Close);
				EMA eMA2 = new EMA(eMA, order, BarData.Close);
				double num = 0.0;
				for (int j = index; j > index - length; j--)
				{
					num += eMA[j] / eMA2[j];
				}
				return num;
			}
			return double.NaN;
		}