public void Validate(IIndicatorEntity indicator, List <QuotesModel> quotes) { if (!CanCalculate(indicator)) { throw new NotSupportedException($"Calculator '{_calculator.Name}' does not support indicator '{indicator.Name}'"); } var param = indicator.Params.FirstOrDefault(p => p.ParamName == IndicatorParamName.FastEmaPeriod.ToString()); if (param == null || param.Value == 0) { throw new ArgumentException($"FastEmaPeriod parameter value is not set. Params: {indicator.JsonParams}"); } param = indicator.Params.FirstOrDefault(p => p.ParamName == IndicatorParamName.SlowEmaPeriod.ToString()); if (param == null || param.Value == 0) { throw new ArgumentException($"SlowEmaPeriod parameter value is not set. Params: {indicator.JsonParams}"); } param = indicator.Params.FirstOrDefault(p => p.ParamName == IndicatorParamName.SignalEmaPeriod.ToString()); if (param == null || param.Value == 0) { throw new ArgumentException($"SignalEmaPeriod parameter value is not set. Params: {indicator.JsonParams}"); } param = indicator.Params.FirstOrDefault(p => p.ParamName == IndicatorParamName.EmaPeriod.ToString()); if (param == null || param.Value == 0) { throw new ArgumentException($"EmaPeriod parameter value is not set. Params: {indicator.JsonParams}"); } }
public void Add(IList <IndicatorResult> result, IIndicatorEntity indicator, string ticker) { if (!IndicatorResults.ContainsKey(indicator.IndicatorId)) { IndicatorResults.Add(indicator.IndicatorId, new CompanyIndicatorResults(indicator)); } IndicatorResults[indicator.IndicatorId].Add(new CompanyIndicatorResult(ticker, result)); }
public override List <IndicatorResult> Calculate(IIndicatorEntity indicator, List <QuotesModel> quotes) { Validate(indicator, quotes); var calcParams = ExtractMacdParams(indicator.Params); return(_calculator.Calculate(quotes, calcParams)); }
public IndicatorModel(IIndicatorEntity model) { IndicatorId = model.IndicatorId; Period = model.Period; Params = model.Params; Name = model.Name; JsonParams = model.JsonParams; Description = model.Description; }
private int ExtractPeriod(IIndicatorEntity indicator) { var param = indicator.Params.First(p => p.ParamName == IndicatorParamName.Period.ToString()); return(param.Value); }
public override List <IndicatorResult> Calculate(IIndicatorEntity indicator, List <QuotesModel> quotes) { Validate(indicator, quotes); return(_calculator.Calculate(quotes, ExtractPeriod(indicator))); }
public override bool CanCalculate(IIndicatorEntity indicator) { return(string.Compare(indicator.Name, _calculator.Name, StringComparison.InvariantCultureIgnoreCase) == 0); }
public IIndicatorCalculator Create(IIndicatorEntity indicator) { return(_calculators.FirstOrDefault(calculator => calculator.CanCalculate(indicator))); }
private string GenerateName(IIndicatorEntity indicator) { var parameters = indicator.Params.Select(p => p.Value).ToArray(); return($"{indicator.Name} ({string.Join(",", parameters)}) - {indicator.Period.ToString()}"); }
public IndicatorCore(IIndicatorEntity indicator) { Name = GenerateName(indicator); Id = indicator.IndicatorId; Period = indicator.Period; }
public CompanyIndicatorResults(IIndicatorEntity indicator) { Indicator = indicator; }
public abstract List <IndicatorResult> Calculate(IIndicatorEntity indicator, List <QuotesModel> quotes);
public abstract bool CanCalculate(IIndicatorEntity indicator);