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; }
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; }
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; }
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; }
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); }
public double GetCorrelation(TimeSeries series) => GetCovariance(series)/(GetStdDev()*series.GetStdDev());
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; }
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; }
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; }
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(); }
public double GetCorrelation(TimeSeries series) => GetCovariance(series) / (GetStdDev() * series.GetStdDev());
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); }
public PortfolioStatisticsItem() { this.totalValues = new TimeSeries(Name, ""); this.longValues = new TimeSeries($"{Name} Long", ""); this.shortValues = new TimeSeries($"{Name} Short", ""); }