public static IEnumerable <IndicatorPoint> RSI(IList <Rate> rates, Func <Rate, double> price, int period) { Indicore.TickSourceAut source = CreateTicksData(rates, price); Indicore.IndicatorInstanceAut instance = (Indicore.IndicatorInstanceAut)core.CreateIndicatorInstance("RSI", source, period, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Indicore.IndicatorOutputAut output = (Indicore.IndicatorOutputAut)((Indicore.IndicatorOutputCollectionAut)instance.Output)[0]; instance.Update(true); return(output.Cast <double>().Select((d, i) => new IndicatorPoint(rates[i].StartDate, d))); }
private static Indicore.TickSourceAut CreateTicksData(IList <Rate> rates, Func <Rate, double> price) { Indicore.TickSourceAut ticks = (Indicore.TickSourceAut)core.CreateTickSource("XXX", .01); foreach (var r in rates) { ticks.AddLast(r.StartDate, price(r)); } return(ticks); }
public static void CR <T>(this Rate[] rates, Func <Rate, double> sourceLambda, Action <Rate, T> destinationLambda) { Indicore.TickSourceAut source = CreateTicksData(rates, sourceLambda); Indicore.IndicatorInstanceAut instance = (Indicore.IndicatorInstanceAut)core.CreateIndicatorInstance("CR", source, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Indicore.IndicatorOutputAut output = (Indicore.IndicatorOutputAut)((Indicore.IndicatorOutputCollectionAut)instance.Output)[0]; instance.Update(true); var i = 0; output.Cast <T>().ToList().ForEach(d => destinationLambda(rates[i++], d)); }
public static IEnumerable <IndicatorMACD> RsiMACD(Rate[] rates, Func <Rate, double> price, int period) { Indicore.TickSourceAut source = CreateTicksData(rates, price); Indicore.IndicatorInstanceAut instance1 = (Indicore.IndicatorInstanceAut)core.CreateIndicatorInstance("RSI", source, period, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Indicore.IndicatorOutputAut output1 = (Indicore.IndicatorOutputAut)((Indicore.IndicatorOutputCollectionAut)instance1.Output)[0]; Indicore.IndicatorInstanceAut instance2 = (Indicore.IndicatorInstanceAut)core.CreateIndicatorInstance("MACD", output1, 12, 26, 9, Type.Missing, Type.Missing); Indicore.IndicatorOutputCollectionAut _outputs = (Indicore.IndicatorOutputCollectionAut)instance2.Output; List <Indicore.IndicatorOutputAut> outputs = new List <Indicore.IndicatorOutputAut>(); for (int i = 0; i < _outputs.Size; i++) { outputs.Add((Indicore.IndicatorOutputAut)_outputs[i]); } Indicore.IndicatorOutputAut output2 = (Indicore.IndicatorOutputAut)((Indicore.IndicatorOutputCollectionAut)instance2.Output)[0]; instance1.Update(true); instance2.Update(true); for (int i = 0; i < rates.Length; i++) { yield return(new IndicatorMACD(rates[i].StartDate, price(rates[i]), outputs[0][i], outputs[1][i], outputs[2][i])); } }