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));
        }
예제 #4
0
 public IndicatorModel(IIndicatorEntity model)
 {
     IndicatorId = model.IndicatorId;
     Period      = model.Period;
     Params      = model.Params;
     Name        = model.Name;
     JsonParams  = model.JsonParams;
     Description = model.Description;
 }
예제 #5
0
        private int ExtractPeriod(IIndicatorEntity indicator)
        {
            var param = indicator.Params.First(p => p.ParamName == IndicatorParamName.Period.ToString());

            return(param.Value);
        }
예제 #6
0
        public override List <IndicatorResult> Calculate(IIndicatorEntity indicator, List <QuotesModel> quotes)
        {
            Validate(indicator, quotes);

            return(_calculator.Calculate(quotes, ExtractPeriod(indicator)));
        }
예제 #7
0
 public override bool CanCalculate(IIndicatorEntity indicator)
 {
     return(string.Compare(indicator.Name, _calculator.Name, StringComparison.InvariantCultureIgnoreCase) == 0);
 }
예제 #8
0
 public IIndicatorCalculator Create(IIndicatorEntity indicator)
 {
     return(_calculators.FirstOrDefault(calculator => calculator.CanCalculate(indicator)));
 }
예제 #9
0
        private string GenerateName(IIndicatorEntity indicator)
        {
            var parameters = indicator.Params.Select(p => p.Value).ToArray();

            return($"{indicator.Name} ({string.Join(",", parameters)}) - {indicator.Period.ToString()}");
        }
예제 #10
0
 public IndicatorCore(IIndicatorEntity indicator)
 {
     Name   = GenerateName(indicator);
     Id     = indicator.IndicatorId;
     Period = indicator.Period;
 }
 public CompanyIndicatorResults(IIndicatorEntity indicator)
 {
     Indicator = indicator;
 }
예제 #12
0
 public abstract List <IndicatorResult> Calculate(IIndicatorEntity indicator, List <QuotesModel> quotes);
예제 #13
0
 public abstract bool CanCalculate(IIndicatorEntity indicator);