Наследование: IIdNamedItem, ISeries
Пример #1
0
 private static TimeSeries OpTwoTimeSeries(TimeSeries ts1, TimeSeries ts2, string name, Func<double, double, double> op, bool checkZero = false)
 {
     var ts = new TimeSeries(name, "", -1);
     for (int i = 0; i < ts1.Count; ++i)
     {
         var datetime = ts1.GetDateTime(i);
         if (ts2.Contains(datetime))
         {
             var d2 = ts2[datetime, SearchOption.ExactFirst];
             if (!checkZero || d2 != 0.0)
                 ts.Add(datetime, op(ts1[datetime, 0, SearchOption.ExactFirst], d2));
         }
     }
     return ts;
 }
Пример #2
0
 private static TimeSeries OpTimeSeriesAndValue(TimeSeries series, double value, string name, Func<double, double, double> op, bool valueAsSecond = true, bool checkZero = false)
 {
     var ts = new TimeSeries(name, "", -1);
     for (int i = 0; i < series.Count; ++i)
     {
         var dt = series.GetDateTime(i);
         var sv = series[i, 0];
         if (valueAsSecond)
             ts.Add(dt, op(sv, value));
         else
         {
             if (!checkZero || sv != 0.0)
                 ts.Add(dt, op(value, sv));
         }
     }
     return ts;
 }
Пример #3
0
 public virtual TimeSeries GetNegativeSeries()
 {
     var ts = new TimeSeries();
     for (int i = 0; i < Count; i++)
         if (this[i] < 0)
             ts.Add(GetDateTime(i), this[i]);
     return ts;
 }
Пример #4
0
        public virtual TimeSeries GetReturnSeries()
        {
            var ts = new TimeSeries(this.name, this.description + " (return)", -1);
            if (Count <= 1)
                return ts;

            double p0 = this[0];
            for (var i = 0; i < Count; i++)
            {
                var p1 = this[i];
                ts.Add(GetDateTime(i), p0 != 0 ? p1/p0 : 0);
                p0 = p1;
            }
            return ts;
        }
Пример #5
0
 public double GetCovariance(TimeSeries series)
 {
     EnsureNotNull(series);
     var m1 = GetMean();
     var m2 = series.GetMean();
     int count = 0;
     double sum = 0;
     for (int i = 0; i < Count; ++i)
     {
         var dateTime = GetDateTime(i);
         if (series.Contains(dateTime))
         {
             sum += (this[i] - m1) * (series[dateTime, SearchOption.ExactFirst] - m2);
             ++count;
         }
     }
     return count <= 1 ? 0 : sum / (count - 1);
 }
Пример #6
0
 public double GetCorrelation(TimeSeries series) => GetCovariance(series)/(GetStdDev()*series.GetStdDev());
Пример #7
0
        public TimeSeries Shift(int offset)
        {
            var ts = new TimeSeries(this.name, this.description, -1);
            var num = offset < 0 ? Math.Abs(offset) : 0;

            for (var i = num; i < Count; i++)
            {
                var num2 = i + offset;
                if (num2 >= Count)
                {
                    break;
                }
                var dateTime = GetDateTime(num2);
                var value = this[i];
                ts[dateTime] = value;
            }
            return ts;
        }
Пример #8
0
 private TimeSeries MathTransform(string name, Func<double, double> func)
 {
     var ts = new TimeSeries(name, this.description, -1);
     for (int i = 0; i < Count; i++)
         ts.Add(GetDateTime(i), func(this[i, 0]));
     return ts;
 }
Пример #9
0
 public Cross Crosses(TimeSeries series, DateTime dateTime)
 {
     var num = IndexOf(dateTime);
     var num2 = series.IndexOf(dateTime);
     if (num <= 0 || num >= this.series.Count)
     {
         return Cross.None;
     }
     if (num2 > 0 && num2 < series.Count)
     {
         DateTime dateTime2 = GetDateTime(num - 1);
         DateTime dateTime3 = series.GetDateTime(num2 - 1);
         if (dateTime2 == dateTime3)
         {
             if (this.GetValue(num - 1) <= series.GetValue(num2 - 1) && this.GetValue(num) > series.GetValue(num2))
             {
                 return Cross.Above;
             }
             if (this.GetValue(num - 1) >= series.GetValue(num2 - 1) && this.GetValue(num) < series.GetValue(num2))
             {
                 return Cross.Below;
             }
         }
         else
         {
             double value;
             double value2;
             if (dateTime2 < dateTime3)
             {
                 DateTime dateTime4 = this.GetDateTime(num - 1);
                 value = this.GetValue(num - 1);
                 if (series.IndexOf(dateTime4, SearchOption.Next) != num2)
                 {
                     value2 = series.GetValue(series.IndexOf(dateTime4, SearchOption.Next));
                 }
                 else
                 {
                     value2 = series.GetValue(series.IndexOf(dateTime4, SearchOption.Prev));
                 }
             }
             else
             {
                 DateTime dateTime5 = series.GetDateTime(num2 - 1);
                 value2 = series.GetValue(num2 - 1);
                 if (this.IndexOf(dateTime5, SearchOption.Prev) != num)
                 {
                     value = this.GetValue(this.IndexOf(dateTime5, SearchOption.Next));
                 }
                 else
                 {
                     value = this.GetValue(this.IndexOf(dateTime5, SearchOption.Prev));
                 }
             }
             if (value <= value2 && this.GetValue(num) > series.GetValue(num2))
             {
                 return Cross.Above;
             }
             if (value >= value2 && this.GetValue(num) < series.GetValue(num2))
             {
                 return Cross.Below;
             }
         }
         return Cross.None;
     }
     return Cross.None;
 }
Пример #10
0
 public Strategy(Framework framework, string name)
 {
     this.Id = -1;
     this.ClientId = -1;
     this.IsInstance = true;
     this.Enabled = true;
     this.Status = StrategyStatus.Stopped;
     this.Mode = StrategyMode.Backtest;
     this.Strategies = new StrategyList();
     this.Subscriptions = new SubscriptionList();
     this.subscriptionList_1 = new SubscriptionList();
     this.Bars = new BarSeries();
     this.Equity = new TimeSeries();
     this.list_0 = new List<Stop>();
     this.idArray_0 = new IdArray<List<Stop>>(10000);
     Framework = framework;
     Name = name;
     this.parameterHelper_0 = new ParameterHelper();
 }
Пример #11
0
 public double GetCorrelation(TimeSeries series) => GetCovariance(series) / (GetStdDev() * series.GetStdDev());
Пример #12
0
        public Cross Crosses(TimeSeries series, DateTime dateTime)
        {
            var num  = IndexOf(dateTime);
            var num2 = series.IndexOf(dateTime);

            if (num <= 0 || num >= this.series.Count)
            {
                return(Cross.None);
            }
            if (num2 > 0 && num2 < series.Count)
            {
                DateTime dateTime2 = GetDateTime(num - 1);
                DateTime dateTime3 = series.GetDateTime(num2 - 1);
                if (dateTime2 == dateTime3)
                {
                    if (this.GetValue(num - 1) <= series.GetValue(num2 - 1) && this.GetValue(num) > series.GetValue(num2))
                    {
                        return(Cross.Above);
                    }
                    if (this.GetValue(num - 1) >= series.GetValue(num2 - 1) && this.GetValue(num) < series.GetValue(num2))
                    {
                        return(Cross.Below);
                    }
                }
                else
                {
                    double value;
                    double value2;
                    if (dateTime2 < dateTime3)
                    {
                        DateTime dateTime4 = this.GetDateTime(num - 1);
                        value = this.GetValue(num - 1);
                        if (series.IndexOf(dateTime4, SearchOption.Next) != num2)
                        {
                            value2 = series.GetValue(series.IndexOf(dateTime4, SearchOption.Next));
                        }
                        else
                        {
                            value2 = series.GetValue(series.IndexOf(dateTime4, SearchOption.Prev));
                        }
                    }
                    else
                    {
                        DateTime dateTime5 = series.GetDateTime(num2 - 1);
                        value2 = series.GetValue(num2 - 1);
                        if (this.IndexOf(dateTime5, SearchOption.Prev) != num)
                        {
                            value = this.GetValue(this.IndexOf(dateTime5, SearchOption.Next));
                        }
                        else
                        {
                            value = this.GetValue(this.IndexOf(dateTime5, SearchOption.Prev));
                        }
                    }
                    if (value <= value2 && this.GetValue(num) > series.GetValue(num2))
                    {
                        return(Cross.Above);
                    }
                    if (value >= value2 && this.GetValue(num) < series.GetValue(num2))
                    {
                        return(Cross.Below);
                    }
                }
                return(Cross.None);
            }
            return(Cross.None);
        }
Пример #13
0
 public PortfolioStatisticsItem()
 {
     this.totalValues = new TimeSeries(Name, "");
     this.longValues  = new TimeSeries($"{Name} Long", "");
     this.shortValues = new TimeSeries($"{Name} Short", "");
 }