/// <summary> /// Returns an observable sequence of changes in value, except for the first value, which is null. /// </summary> public static IObservable <double?> Change(this IObservable <double> source) { return(ThrowIf.ThrowIfNull(source) .DistinctUntilChanged() .PairWithPrevious() .Select(m => m.Length == 2 && m[0] > 0 && m[1] > 0 ? m[0] - m[1] : (double?)null)); }
public static IObservable <TickOhlc> TickOpenHighLowClose(this IObservable <ITick> source, TimeSpan barSize) => ThrowIf.ThrowIfNull(source) .OfType <TickPrice>() .Where(x => x.TickType == TickType.LastPrice) .Select(x => x.Price) .Window(barSize) .Select(w => w.Aggregate(new TickOhlc(), TickOhlc.Calc)) .SelectMany(x => x);