private decimal GetValueFromIndicator(IStrategyRuleView rule, List <IndicatorResult> values, bool isFirst) { var transform = isFirst ? rule.TransformItemsV1 : rule.TransformItemsV2; switch (transform) { case TransformFunction.First: return(values.Select(i => i.Value).First()); case TransformFunction.Max: return(values.Max(i => i.Value)); case TransformFunction.Sum: return(values.Sum(i => i.Value)); case TransformFunction.Avg: return(values.Average(i => i.Value)); case TransformFunction.Min: return(values.Min(i => i.Value)); default: throw new ArgumentOutOfRangeException(); } }
private void Initialize(IStrategyRuleView rule) { Condition = rule.Condition; RuleName = rule.RuleName; RuleSetName = rule.RuleSetName; RuleSetId = rule.RuleSetId; RuleId = rule.RuleId; }
private decimal GetValueFromHistorical(IStrategyRuleView rule, bool isFirst) { var values = isFirst ? _charts.Periods.First(p => p.Period == rule.Period).Quotes.Skip(rule.SkipItemsV1).Take(rule.TakeItemsV1).ToList() : _charts.Periods.First(p => p.Period == rule.Period).Quotes.Skip(rule.SkipItemsV2).Take(rule.TakeItemsV2).ToList(); var result = CalculateHistoricalValue(values, isFirst ? rule.TransformItemsV1 : rule.TransformItemsV2, isFirst ? (HistoricalDataSeriesType)rule.DataSeriesV1 : (HistoricalDataSeriesType)rule.DataSeriesV2); return(result); }
private decimal GetSecondValue(IStrategyRuleView rule) { switch (rule.DataSourceV2) { case DataSourceType.Indicator: return(GetValueFromIndicator(rule, false)); case DataSourceType.HistoricalData: return(GetValueFromHistorical(rule, false)); case DataSourceType.Constant: return(decimal.Parse(rule.ConstV2)); default: throw new ArgumentOutOfRangeException(); } }
private decimal GetValueFromIndicator(IStrategyRuleView rule, bool isFirst) { var indicator = _charts.Periods.First(p => p.Period == rule.Period).Indicators .Where(i => i.Indicator.IndicatorId == (isFirst ? rule.DataSeriesV1 : rule.DataSeriesV2)) .Select(i => i) .FirstOrDefault(); if (indicator != null) { var values = indicator.IndicatorValues .Skip(isFirst ? rule.SkipItemsV1 : rule.SkipItemsV2) .Take(isFirst ? rule.TakeItemsV1 : rule.TakeItemsV2) .ToList(); return(GetValueFromIndicator(rule, values, isFirst)); } return(decimal.MinValue); }
public StrategyRuleResult(IStrategyRuleView rule) { Initialize(rule); }