/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }