Ejemplo n.º 1
0
        /// <summary>
        /// Calculate Ehlers' Zero Lag Exponential Moving Average, as described here:
        /// <see href="https://en.wikipedia.org/wiki/Zero_lag_exponential_moving_average"/>
        /// </summary>
        /// <param name="series">input time series</param>
        /// <param name="period">averaging length</param>
        /// <param name="parentId">caller cache id, optional</param>
        /// <param name="memberName">caller's member name, optional</param>
        /// <param name="lineNumber">caller line number, optional</param>
        /// <returns>ZLEMA as time series</returns>
        public static ITimeSeries <double> ZLEMA(this ITimeSeries <double> series, int period,
                                                 CacheId parentId = null, [CallerMemberName] string memberName = "", [CallerLineNumber] int lineNumber = 0)
        {
            var cacheId = new CacheId(parentId, memberName, lineNumber,
                                      series.GetHashCode(), period);

            int lag = (int)Math.Round((period - 1.0) / 2.0);

            return(series
                   .Add(
                       series
                       .Subtract(
                           series
                           .Delay(lag, cacheId),
                           cacheId),
                       cacheId)
                   .EMA(period, cacheId));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Calculate logarithmic momentum: m = Ln(p[0] / p[n])
        /// </summary>
        /// <param name="series">input time series</param>
        /// <param name="n">number of bars for regression</param>
        /// <param name="parentId">caller cache id, optional</param>
        /// <param name="memberName">caller's member name, optional</param>
        /// <param name="lineNumber">caller line number, optional</param>
        /// <returns>log momentum, as time series</returns>
        public static ITimeSeries <double> LogMomentum(this ITimeSeries <double> series, int n = 21,
                                                       CacheId parentId = null, [CallerMemberName] string memberName = "", [CallerLineNumber] int lineNumber = 0)
        {
            var cacheId = new CacheId(parentId, memberName, lineNumber,
                                      series.GetHashCode(), n.GetHashCode());

#if true
            return(IndicatorsBasic.BufferedLambda(
                       prev => Math.Log(series[0] / series[n]),
                       0.0,
                       cacheId));
#else
            // retired 04/02/2019
            return(series
                   .Divide(series
                           .Delay(n, cacheId)
                           .Max(1e-10, cacheId),
                           cacheId)
                   .Log(cacheId)
                   .Divide(n, cacheId));
#endif
        }