public LocalExecuteContext(IList <double> source, IMemoryContext context) { Source = source; Smooth = context.GetArray <double>(7); Detrender = context.GetArray <double>(7); I1 = context.GetArray <double>(7); Q1 = context.GetArray <double>(7); m_context = context; }
public static IList <double> CalcDIM(ISecurity source, int period, IMemoryContext context = null) { var bars = source.Bars; int count = bars.Count; var trueRange = Series.TrueRange(bars, context); var atr = Series.EMA(trueRange, period, context); context?.ReleaseArray((Array)trueRange); IList <double> diM1 = context?.GetArray <double>(count) ?? new double[count]; for (int i = 1; i < count; i++) { var dmP = bars[i].High - bars[i - 1].High; var dmM = bars[i - 1].Low - bars[i].Low; if ((dmP < 0 && dmM < 0) || dmP == dmM) { dmP = dmM = 0; } if (dmP > dmM) { dmM = 0; } diM1[i] = dmM; } var diM2 = Series.EMA(diM1, period, context); context?.ReleaseArray((Array)diM1); for (int i = 1; i < count; i++) { diM2[i] = atr[i] == 0 ? 0 : diM2[i] / atr[i]; } context?.ReleaseArray((Array)atr); return(diM2); }
public static IList <bool> Calc(IList <bool> source, int period, IMemoryContext context = null) { var res = context?.GetArray <bool>(source.Count) ?? new bool[source.Count]; int savedNum = -1; for (int i = 1; i < source.Count; i++) { res[i] = Calc(source[i], period, i, ref savedNum); } return(res); }
public static IList <bool> Calc(IList <bool> source1, IList <bool> source2, IMemoryContext context = null) { var res = context?.GetArray <bool>(source1.Count) ?? new bool[source1.Count]; for (int i = 1; i < source1.Count; i++) { // TODO: в этой проверке i всегда больше 0, потому что мы внутри фор от 1. var last = i > 0 && res[i - 1]; res[i] = Calc(source1[i], source2[i], last); } return(res); }
public static IList <double> CalcADX(IList <double> source1, IList <double> source2, int period, IMemoryContext context = null) { int count = source1.Count; IList <double> dx1 = context?.GetArray <double>(count) ?? new double[count]; for (int i = 1; i < count; i++) { dx1[i] = source1[i] == 0 && source2[i] == 0 ? 0 : Math.Abs(source1[i] - source2[i]) / (source1[i] + source2[i]) * 100; } var dx2 = Series.EMA(dx1, period, context); context?.ReleaseArray((Array)dx1); return(dx2); }
public static IList <double> CalcVolatility(this ISecurity sec, IMemoryContext context) { var bars = sec.Bars; var count = bars.Count; var res = context?.GetArray <double>(count) ?? new double[count]; for (var i = 1; i < count; i++) { res[i] = Math.Log(bars[i].Close) - Math.Log(bars[i - 1].Close); } var barsPerDay = 1440 / (int)sec.IntervalInstance.ToMinutes(); var stDev = Series.StDev(res, barsPerDay, context); var coef = Math.Sqrt(1.0 / (barsPerDay * 365)); for (var i = 1; i < count; i++) { res[i] = stDev[i] / coef; } return(res); }
public static IList <double> Calc(IList <double> source, int period, IMemoryContext context = null) { if (source == null) { throw new ArgumentNullException(nameof(source)); } if (period <= 0) { throw new ArgumentOutOfRangeException(nameof(period)); } var result = context?.GetArray <double>(source.Count) ?? new double[source.Count]; if (result.Length > 0) { if (period == 1 || result.Length == 1) { source.CopyTo(result, 0); } else { var ema1 = Series.EMA(source, period, context); var ema2 = Series.EMA(ema1, period, context); var ema3 = Series.EMA(ema2, period, context); for (var i = 0; i < result.Length; i++) { result[i] = 3 * ema1[i] - 3 * ema2[i] + ema3[i]; } context?.ReleaseArray((Array)ema1); context?.ReleaseArray((Array)ema2); context?.ReleaseArray((Array)ema3); } } return(result); }
public static IList <double> Calc(IList <double> source, int period, IMemoryContext context = null) { if (source == null) { throw new ArgumentNullException(nameof(source)); } if (period <= 0) { throw new ArgumentOutOfRangeException(nameof(period)); } var result = context?.GetArray <double>(source.Count) ?? new double[source.Count]; if (result.Length > 0) { result[0] = Calc(source, 0, 0, period); for (var i = 1; i < result.Length; i++) { result[i] = Calc(source, result[i - 1], i, period); } } return(result); }