private void BuildMeta(IMetaMapping mapping, IEnumerable <IBarDatum> barData) { ValueDatum ave = Bar.Sma(mapping, barData); string propertyBase = mapping.Property; properties.Where(p => p.Name == propertyBase) .First() .SetValue(Datum, ave.Value); properties.Where(p => p.Name == $"D{propertyBase}") .First() .SetValue(Datum, ave.Slope); properties.Where(p => p.Name == $"D2{propertyBase}") .First() .SetValue(Datum, ave.DSlope); }
public static ValueDatum Sma(this IBar bar, IMetaMapping mapping, IEnumerable <IBarDatum> data) { int period = mapping.Value.Value; double ave = double.MinValue; double slope = double.MinValue; double dSlope = double.MinValue; var previousBars = ToSet(data, period - 1); if (period - previousBars.Count <= 1) { ave = (previousBars.Sum(b => b.Close) + bar.Close) / (double)period; IBarDatum previousBar = previousBars[0]; int minutes = (bar.Time - previousBar.Time).Minutes; double prevAve = (double)Properties.Where(p => p.Name == mapping.Property) .First() .GetValue(previousBar, null); prevAve = prevAve == double.MinValue ? 0 : prevAve; slope = (ave - prevAve) / (double)minutes; double prevSlope = (double)Properties.Where(p => p.Name == $"D{mapping.Property}") .First() .GetValue(previousBar, null); prevSlope = prevSlope == double.MinValue ? 0 : prevSlope; dSlope = (slope - prevSlope) / (double)minutes; } ValueDatum newDatum = new ValueDatum(mapping.Property, ave, slope, dSlope); return(newDatum); }
private bool TheseMetaMappingsMatch(IMetaMapping real, IMetaMapping mock) { bool bMatch = true; foreach (var prop in MetaProperties) { object oReal = prop.GetValue(real, null); object oMeta = prop.GetValue(mock, null); if (oReal == null && oMeta != null || oReal != null && oMeta == null) { Debugger.Break(); } bMatch = ObjectEvaluator.IsEqual(prop, prop.GetValue(real, null), prop.GetValue(mock, null)); Debug.WriteLine($"Mappings: Property:{prop.Name}, Result: {bMatch}"); } return(bMatch); }