예제 #1
0
        /// <summary>
        /// Calculate Typical Price as described here:
        /// <see href="https://en.wikipedia.org/wiki/Typical_price"/>
        /// </summary>
        /// <param name="series">input instrument</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>typical price as time series</returns>
        public static ITimeSeries <double> TypicalPrice(this Instrument series,
                                                        CacheId parentId = null, [CallerMemberName] string memberName = "", [CallerLineNumber] int lineNumber = 0)
        {
            var cacheId = new CacheId(parentId, memberName, lineNumber,
                                      series.GetHashCode());

            return(IndicatorsBasic.Lambda(
                       (t) => (series.High[t] + series.Low[t] + series.Close[t]) / 3.0,
                       cacheId));
        }
예제 #2
0
        /// <summary>
        /// Cast time series to double
        /// </summary>
        /// <param name="series">input series of long</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>output series of double</returns>
        public static ITimeSeries <double> ToDouble(this ITimeSeries <long> series,
                                                    CacheId parentId = null, [CallerMemberName] string memberName = "", [CallerLineNumber] int lineNumber = 0)
        {
            var cacheId = new CacheId(parentId, memberName, lineNumber,
                                      series.GetHashCode());

            return(IndicatorsBasic.Lambda(
                       (t) => (double)series[t],
                       cacheId));
        }
예제 #3
0
        /// <summary>
        /// Calculate subtraction of two time series.
        /// </summary>
        /// <param name="series1">time series #1</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>
        /// <param name="series2">time series #2</param>
        /// <returns>time series #1 - time series #2</returns>
        public static ITimeSeries <double> Subtract(this ITimeSeries <double> series1, ITimeSeries <double> series2,
                                                    CacheId parentId = null, [CallerMemberName] string memberName = "", [CallerLineNumber] int lineNumber = 0)
        {
            var cacheId = new CacheId(parentId, memberName, lineNumber,
                                      series1.GetHashCode(), series2.GetHashCode());

            return(IndicatorsBasic.Lambda(
                       (t) => series1[t] - series2[t],
                       cacheId));
        }
예제 #4
0
        /// <summary>
        /// Calculate addition of time series and constant value.
        /// </summary>
        /// <param name="series">time series</param>
        /// <param name="constValue">constant value</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>time series + constant value</returns>
        public static ITimeSeries <double> Add(this ITimeSeries <double> series, double constValue,
                                               CacheId parentId = null, [CallerMemberName] string memberName = "", [CallerLineNumber] int lineNumber = 0)
        {
            var cacheId = new CacheId(parentId, memberName, lineNumber,
                                      series.GetHashCode(), constValue.GetHashCode());

            return(IndicatorsBasic.Lambda(
                       (t) => series[t] + constValue,
                       cacheId));
        }
예제 #5
0
        /// <summary>
        /// Calculate True Range, non averaged, as described here:
        /// <see href="https://en.wikipedia.org/wiki/Average_true_range"/>.
        /// </summary>
        /// <param name="series">input time series</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>True Range as time series</returns>
        public static ITimeSeries <double> TrueRange(this Instrument series,
                                                     CacheId parentId = null, [CallerMemberName] string memberName = "", [CallerLineNumber] int lineNumber = 0)
        {
            var cacheId = new CacheId(parentId, memberName, lineNumber,
                                      series.GetHashCode());

            return(IndicatorsBasic.Lambda(
                       (t) =>
            {
                double high = Math.Max(series[t].High, series[t + 1].Close);
                double low = Math.Min(series[t].Low, series[t + 1].Close);
                return high - low;
            },
                       cacheId));
        }