Ejemplo n.º 1
0
            private IndicatorResult GenerateResult(IPriceSeries shortTermPoints, IPriceSeries longTermPoints)
            {
                var signals = Indicator.SignalGenerationStrategy.Generate(shortTermPoints, longTermPoints);

                var reportData = new GenericIndicatorReport.Data()
                {
                    SignalOfDayUnderAnalysis = GetCurrentSignal(signals, longTermPoints),
                    Prices  = myPrices,
                    Signals = signals
                };

                reportData.Points[Indicator.ShortTerm.Name] = shortTermPoints;
                reportData.Points[Indicator.LongTerm.Name]  = longTermPoints;

                var result = new IndicatorResult(Indicator.Name, Stock, reportData.SignalOfDayUnderAnalysis);

                if (Context.GenerateHistoricSignals)
                {
                    result.Signals = signals;
                }

                result.Report = new DoubleCrossoverReport(Indicator, Stock, reportData);

                return(result);
            }
Ejemplo n.º 2
0
        private void RenderIndicatorResult(IndicatorResult result, IRenderingContext context)
        {
            context.Document.WriteLine("<h2>Indicators</h2>");

            RenderIndicatorSummary(result, context);
            RenderIndicatorDetails(result.Report, context);
        }
Ejemplo n.º 3
0
        private IndicatorResult GenerateMissingDataResult(IIndicatorContext context)
        {
            var result = new IndicatorResult(Name, context.Stock, Signal.None);

            result.Report = new MissingDataReport(Name);

            return(result);
        }
Ejemplo n.º 4
0
        public virtual IndicatorResult Merge(KeyValuePair <DateTime, List <IndicatorResult> > groupedItems)
        {
            var result = new IndicatorResult(groupedItems.Key);
            var value  = groupedItems.Value.Sum(v => v.Value);

            result.Value = Math.Round(value, 4);

            return(result);
        }
Ejemplo n.º 5
0
        private static void RenderIndicatorSummary(IndicatorResult result, IRenderingContext context)
        {
            context.Document.WriteLine("<table>");

            context.Document.WriteLine("<tr><td>Signal</td><td>{0}</td></tr>", HtmlRenderingUtils.GetDisplayText(result.Signal));
            context.Document.WriteLine("<tr><td>Gain/Risk ratio</td><td>{0}</td></tr>", HtmlRenderingUtils.GetDisplayText(result.GainRiskRatio));
            context.Document.WriteLine("<tr><td>Expected gain</td><td>{0}</td></tr>", HtmlRenderingUtils.GetDisplayText(result.ExpectedGain));

            context.Document.WriteLine("</table>");
        }
        private void RenderIndicatorSummeryRow(IndicatorResult result, IRenderingContext context)
        {
            context.Document.WriteLine("<tr>");

            context.Document.WriteLine("<td>{0}</td>", result.Indicator);
            RenderSignal(result, context);
            context.Document.WriteLine("<td align=\"right\">{0}</td>", HtmlRenderingUtils.GetDisplayText(result.GainRiskRatio));
            context.Document.WriteLine("<td align=\"right\">{0}</td>", HtmlRenderingUtils.GetDisplayText(result.ExpectedGain));

            context.Document.WriteLine("</tr>");
        }
Ejemplo n.º 7
0
        public SystemResult(string system, StockHandle stock, IPriceSeries prices, IndicatorResult indicatorResult)
        {
            System = system;
            Stock  = stock;
            Prices = prices;

            Signal        = indicatorResult.Signal;
            ExpectedGain  = indicatorResult.ExpectedGain;
            GainRiskRatio = indicatorResult.GainRiskRatio;
            Signals       = indicatorResult.Signals;
        }
Ejemplo n.º 8
0
 public void Calculate()
 {
     IndicatorResult = new IndicatorResult(new HandIndicator(new ObservableCollection <FingerIndicator>()
     {
         FingerL1, FingerL2, FingerL3, FingerL4, FingerL5
     }, ATDL),
                                           new HandIndicator(new ObservableCollection <FingerIndicator>()
     {
         FingerR1, FingerR2, FingerR3, FingerR4, FingerR5
     }, ATDR), Year, SelectedGender);
     RaisePropertyChanged(nameof(IndicatorResult));
 }
Ejemplo n.º 9
0
        /// <summary>
        ///   Record High Percent = {New Highs / (New Highs + New Lows)} x 100
        ///   High-Low Index = 10 - day SMA of Record High Percent
        /// </summary>
        /// <returns></returns>
        public override IndicatorResult Merge(KeyValuePair <DateTime, List <IndicatorResult> > groupedItems)
        {
            var newHigh = groupedItems.Value.Select(v => v.AsNHNLIndicatorResult()).Sum(r => r.NewHigh);
            var newLow  = groupedItems.Value.Select(v => v.AsNHNLIndicatorResult()).Sum(r => r.NewLow);

            var result = new IndicatorResult(groupedItems.Key).AsNHNLIndicatorResult();

            result.NewLow  = newLow;
            result.NewHigh = newHigh;

            return(result.Result);
        }
        private void RenderSignal(IndicatorResult result, IRenderingContext context)
        {
            if (result.Report == null)
            {
                context.Document.WriteLine("<td>{0}</td>", HtmlRenderingUtils.GetDisplayText(result.Signal));
            }
            else
            {
                using (var childCtx = context.CreateChildContext(result.Indicator, result.Report.Name + ".html"))
                {
                    childCtx.Render(result.Report);

                    context.Document.WriteLine("<td><a href=\"{0}\">{1}</a></td>",
                                               childCtx.RelativeDocumentUrl(context), HtmlRenderingUtils.GetDisplayText(result.Signal));
                }
            }
        }
Ejemplo n.º 11
0
        public override List <IndicatorResult> Combine(List <IndicatorResult> indicatorResults)
        {
            var result = new List <IndicatorResult>();

            foreach (var indicatorResult in indicatorResults)
            {
                var item   = new IndicatorResult(indicatorResult.Date);
                var values = indicatorResult.AsNHNLIndicatorResult();

                item.Value = Math.Round(CalculateNHNL(values.NewHigh, values.NewLow), 4);
                result.Add(item);
            }

            var sma       = new SMA();
            var smaResult = sma.Calculate(result.Select(c => new QuotesModel
            {
                Date  = c.Date,
                Close = c.Value
            }).ToList(), 10);

            return(smaResult);
        }
Ejemplo n.º 12
0
        public bool CheckRuleSets(IEnumerable <RuleSet> ruleSets, List <Candle> candles)
        {
            int passedRuleSets = 0; // if one of the rulesets pass then we got a signal

            foreach (RuleSet ruleSet in ruleSets)
            {
                int passedRules = 0;

                List <IIndicatorResult> passedResults = new List <IIndicatorResult>();

                foreach (Rule rule in ruleSet.Rules)
                {
                    IndicatorResult result = GetInidcatorResult(rule, candles);

                    if (result.Result)
                    {
                        passedResults.Add(result);
                        ++passedRules;
                    }
                }

                if (passedRules == ruleSet.Rules.Count)
                {
                    _logger.Info("");
                    ++passedRuleSets;

                    Log($"All rules for {ruleSet.RuleSide.ToString().ToUpper()} ruleset passed { ruleSet.Indicator.IndicatorType.ToString() }, {ruleSet.Indicator.Bot.Name} ..");

                    foreach (IIndicatorResult indicatorResult in passedResults)
                    {
                        Log(indicatorResult.Message);
                    }
                    _logger.Info("");
                }
            }

            return(passedRuleSets > 0);
        }
Ejemplo n.º 13
0
            private IndicatorResult GenerateResult(IPriceSeries points)
            {
                var signals = Indicator.SignalGenerationStrategy.Generate(myPrices, points);

                var reportData = new GenericIndicatorReport.Data()
                {
                    SignalOfDayUnderAnalysis = GetCurrentSignal(signals, points),
                    Prices  = myPrices,
                    Signals = signals
                };

                reportData.Points[Indicator.Name] = points;

                var result = new IndicatorResult(Indicator.Name, Stock, reportData.SignalOfDayUnderAnalysis);

                if (Context.GenerateHistoricSignals)
                {
                    result.Signals = signals;
                }

                result.Report = new SmaReport(Indicator, Stock, reportData);

                return(result);
            }
Ejemplo n.º 14
0
 public OrderManager(IndicatorResult indicatorResult)
 {
     _indicatorResult = indicatorResult;
 }
        public Task <Result <EditIndicatorResponse> > Handle(EditIndicatorResultsCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var reportingPeriod = _airUnitOfWork.Repository <ReportingPeriod>()
                                      .Get(x => x.Id == request.ReportingPeriodId).SingleOrDefault();
                if (reportingPeriod == null)
                {
                    return(Task.FromResult(Result <EditIndicatorResponse> .Invalid($"Reporting Period Id {request.ReportingPeriodId} not found")));
                }

                reportingPeriod.Update(request.ReportingDate);
                _airUnitOfWork.Repository <ReportingPeriod>().Update(reportingPeriod);

                var indicatorResults = _airUnitOfWork.Repository <IndicatorResult>()
                                       .Get(x => x.ReportingPeriodId == request.ReportingPeriodId).AsEnumerable();

                if (!indicatorResults.Any())
                {
                    return(Task.FromResult(Result <EditIndicatorResponse> .Invalid($"Indicator results for period Id {request.ReportingPeriodId} not found")));
                }

                if (request.IndicatorResults == null || !request.IndicatorResults.Any())
                {
                    return(Task.FromResult(Result <EditIndicatorResponse> .Invalid("Indicator Results to be edited not found")));
                }

                var updatedIndicatorResults = indicatorResults.Where(x =>
                                                                     request.IndicatorResults.Any(i => i.Id == x.IndicatorId && (x.ResultNumeric != i.ResultNumeric || x.ResultText != x.ResultText)))
                                              .AsEnumerable();

                foreach (var result in updatedIndicatorResults)
                {
                    var newResultValue = request.IndicatorResults.SingleOrDefault(x => x.Id == result.IndicatorId);
                    if (newResultValue == null)
                    {
                        var IndicatorResult = new IndicatorResult(reportingPeriod.Id, result.Id, result.ResultText, result.ResultNumeric, reportingPeriod.CreatedBy);

                        _airUnitOfWork.Repository <IndicatorResult>().AddRangeAsync(indicatorResults);
                        _airUnitOfWork.SaveAsync();
                    }
                    else
                    {
                        result.UpdateResult(newResultValue.ResultNumeric, newResultValue.ResultText);
                        _airUnitOfWork.Repository <IndicatorResult>().Update(result);
                    }
                }

                _airUnitOfWork.Save();

                return(Task.FromResult(Result <EditIndicatorResponse> .Valid(new EditIndicatorResponse
                {
                    Message = $"Indicator results for report periodId:   {request.ReportingPeriodId}  and report month of  {request.ReportingDate.Month} and reporting year of " +
                              $" {request.ReportingDate.Year} updated succesfully",
                    ReportingPeriodId = request.ReportingPeriodId
                })));
            }
            catch (Exception ex)
            {
                string message = $"An error occured while editing indicator results for reporting periodId {request.ReportingPeriodId}";

                _logger.Error(ex, message);
                return(Task.FromResult(Result <EditIndicatorResponse> .Invalid(message)));
            }
        }