protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (signals != null) { List <Signal> pros = signals.ForIndicatorAndOffset(this, new[] { 0, -3 }); if (pros != null && pros.Count == 2) { Signal pro0 = pros[0]; Signal pro3 = pros[1]; double pro0D = pro0.Value; double pro3D = pro3.Value; result = new SignalInterpretation(this); if (pro0D > 0) { result.Interpretation = (pro0D - pro3D) < 0 ? SignalInterpretationValue.TurningBearish : SignalInterpretationValue.Bullish; } else { result.Interpretation = (pro0D - pro3D) >= 0 ? SignalInterpretationValue.BearishTurningBullish : SignalInterpretationValue.Bearish; } } } return(result); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (signals != null && AvgPeriod == 20) { List <Signal> maxs = signals.ForIndicatorAndOffset(this, new[] { 0, -1 }); if (maxs != null && maxs.Count == 2) { Signal max0 = maxs[0]; Signal max1 = maxs[1]; double max0D = max0.Value; double max1D = max1.Value; result = new SignalInterpretation(this); result.Interpretation = max0D > max1D ? SignalInterpretationValue.Bullish : SignalInterpretationValue.Nothing; } } return(result); }
public TradeIdeasSentiment GetSentiment(TradeIdeaRule ruleMatch, HistoricalData historicalData) { TradeIdeasSentiment tradeIdeasSentiment = TradeIdeasSentiment.Bullish; if (ruleMatch != TradeIdeaRule.None) { tradeIdeasSentiment = ruleMatch.GetSentiment(); return(tradeIdeasSentiment); } if (historicalData == null) { return(tradeIdeasSentiment); } Tuple <int?, int?> sentimentValues = _signalsProxyService.GetSyrahSentimentTermValues(historicalData); Tuple <SignalInterpretation, SignalInterpretation> sentimentInterpretations = _signalsProxyService.MakeInterpretationOfSyrahSentiments(sentimentValues); SignalInterpretation shortTermInterpretation = sentimentInterpretations.Item1; SignalInterpretation longTermInterpretation = sentimentInterpretations.Item2; if (shortTermInterpretation == null || longTermInterpretation == null) { return(tradeIdeasSentiment); } SentimentInterpretationValue shortTermSentimentInterpretationValue = (SentimentInterpretationValue)shortTermInterpretation.Interpretation; SentimentInterpretationValue longTermSentimentInterpretationValue = (SentimentInterpretationValue)longTermInterpretation.Interpretation; if (longTermSentimentInterpretationValue == SentimentInterpretationValue.Neutral) { switch (shortTermSentimentInterpretationValue) { case SentimentInterpretationValue.Bullish: case SentimentInterpretationValue.MildlyBullish: case SentimentInterpretationValue.Neutral: return(TradeIdeasSentiment.Bullish); case SentimentInterpretationValue.Bearish: case SentimentInterpretationValue.MildlyBearish: return(TradeIdeasSentiment.Bearish); default: throw new ArgumentOutOfRangeException(); } } switch (longTermSentimentInterpretationValue) { case SentimentInterpretationValue.Bullish: case SentimentInterpretationValue.MildlyBullish: return(TradeIdeasSentiment.Bullish); case SentimentInterpretationValue.Bearish: case SentimentInterpretationValue.MildlyBearish: return(TradeIdeasSentiment.Bearish); default: throw new ArgumentOutOfRangeException(); } }
public static SignalInterpretation MakeInterpretationBasedOnValue(IIndicator indicator, int value) { SignalInterpretation result = new SignalInterpretation(indicator); SentimentInterpretationValue interpretation = SentimentInterpretationValue.Neutral; switch (value) { case -4: interpretation = SentimentInterpretationValue.Bearish; result.SecondaryTag = SecondaryTagValue.Overextended; break; case -3: interpretation = SentimentInterpretationValue.Bearish; result.SecondaryTag = SecondaryTagValue.Continuation; break; case -2: interpretation = SentimentInterpretationValue.Bearish; result.SecondaryTag = SecondaryTagValue.Start; break; case -1: interpretation = SentimentInterpretationValue.Neutral; result.SecondaryTag = SecondaryTagValue.BearishTurningNeutral; break; case 0: interpretation = SentimentInterpretationValue.MildlyBearish; break; case 1: interpretation = SentimentInterpretationValue.MildlyBullish; break; case 2: interpretation = SentimentInterpretationValue.Neutral; result.SecondaryTag = SecondaryTagValue.BullishTurningNeutral; break; case 3: interpretation = SentimentInterpretationValue.Bullish; result.SecondaryTag = SecondaryTagValue.Start; break; case 4: interpretation = SentimentInterpretationValue.Bullish; result.SecondaryTag = SecondaryTagValue.Continuation; break; case 5: interpretation = SentimentInterpretationValue.Bullish; result.SecondaryTag = SecondaryTagValue.Overextended; break; } result.Interpretation = (SignalInterpretationValue)interpretation; return(result); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (signals != null) { List <Signal> macds = signals.ForIndicatorAndOffset(this, new[] { 0, -3 }); if (macds != null && macds.Count == 2) { Signal macd0 = macds[0]; Signal macd3 = macds[1]; double macd0D = macd0.Value; double macd3D = macd3.Value; result = new SignalInterpretation(this); if (macd0D > 0) { result.Interpretation = (macd0D - macd3D) < 0 ? SignalInterpretationValue.BullishTurningBearish : SignalInterpretationValue.Bullish; } else { result.Interpretation = (macd0D - macd3D) >= 0 ? SignalInterpretationValue.BearishTurningBullish : SignalInterpretationValue.Bearish; } } } return(result); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { if (signals == null) { return(null); } Signal signal = signals.FirstOrDefault(x => x.Name == Name); if (signal == null) { return(null); } SignalInterpretation result = new SignalInterpretation(this); double willrValue = signal.Value; if (willrValue >= -20) { result.Interpretation = SignalInterpretationValue.Overbought; } else if (willrValue > -80 && willrValue < -20) { result.Interpretation = SignalInterpretationValue.Neutral; } else { result.Interpretation = SignalInterpretationValue.Oversold; } return(result); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (signals != null && AvgPeriod == 20) { Signal adxSignal = signals.LatestForIndicator(new Adx(AvgPeriod)); Signal plusDiSignal = signals.LatestForIndicator(new PlusDi(AvgPeriod)); Signal minusDiSignal = signals.LatestForIndicator(new MinusDi(AvgPeriod)); if (adxSignal != null && plusDiSignal != null && minusDiSignal != null) { double adxD = adxSignal.Value; double plusDiD = plusDiSignal.Value; double minusDiD = minusDiSignal.Value; result = new SignalInterpretation(this); if (adxD < 25) { result.Interpretation = SignalInterpretationValue.Neutral; } else if (adxD >= 25 && adxD < 35) { if (plusDiD >= minusDiD) { result.Interpretation = SignalInterpretationValue.TrendingBullish; } else if (plusDiD < minusDiD) { result.Interpretation = SignalInterpretationValue.TrendingBearish; } } else if (adxD >= 35) { if (plusDiD >= minusDiD) { result.Interpretation = SignalInterpretationValue.StrongTrendBullish; } else if (plusDiD < minusDiD) { result.Interpretation = SignalInterpretationValue.StrongTrendBearish; } } } } return(result); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { if (signals == null) { return(null); } Signal signal = signals.FirstOrDefault(x => x.Name == Name); if (signal == null) { return(null); } SignalInterpretation result = MakeInterpretationBasedOnValue(this, (int)signal.Value); return(result); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (signals != null) { Signal cci = signals.LatestForIndicator(this); if (cci != null) { double cciD = cci.Value; result = new SignalInterpretation(this); if (cciD <= -200) { result.Interpretation = SignalInterpretationValue.Overbought; } else if (cciD > -200 && cciD <= -100) { result.Interpretation = SignalInterpretationValue.Bearish; } else if (cciD > -100 && cciD < -0) { result.Interpretation = SignalInterpretationValue.MildlyBearish; } else if (cciD >= 0 && cciD < 100) { result.Interpretation = SignalInterpretationValue.MildlyBullish; } else if (cciD >= 100 && cciD < 200) { result.Interpretation = SignalInterpretationValue.Bullish; } else { result.Interpretation = SignalInterpretationValue.Oversold; } } } return(result); }
public List <SignalInterpretation> GetSignalsInterpretation(HistoricalData historicalData, List <IIndicator> indicators, StockQuoteInfo quote, DateTime?forDate = null) { DependencyScope dependencyScope = indicators.GetDependencies(); DateTime startDate = forDate ?? DateTime.UtcNow.Date; List <Signal> signals = GetSignalsByDependencies(historicalData, dependencyScope, startDate); List <SignalInterpretation> interpretations = new List <SignalInterpretation>(); foreach (ICalculatableIndicator indicator in indicators.OfType <ICalculatableIndicator>()) { SignalInterpretation interpretation = indicator.MakeInterpretation(signals, quote); if (interpretation != null) { interpretations.Add(interpretation); } } return(interpretations); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (signals != null) { Signal stoch = signals.LatestForIndicator(this); if (stoch != null) { double stochD = stoch.Value; result = new SignalInterpretation(this); if (stochD <= 20) { result.Interpretation = SignalInterpretationValue.Oversold; } else if (stochD > 20 && stochD <= 35) { result.Interpretation = SignalInterpretationValue.Bearish; } else if (stochD > 35 && stochD < 50) { result.Interpretation = SignalInterpretationValue.MildlyBearish; } else if (stochD >= 50 && stochD < 65) { result.Interpretation = SignalInterpretationValue.MildlyBullish; } else if (stochD >= 65 && stochD < 80) { result.Interpretation = SignalInterpretationValue.Bullish; } else { result.Interpretation = SignalInterpretationValue.Overbought; } } } return(result); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (signals != null && AvgPeriod == 20) { Signal signal = signals.LatestForIndicator(this); if (signal != null) { result = new SignalInterpretation(this); double rsiD = signal.Value; if (rsiD <= 30) { result.Interpretation = SignalInterpretationValue.Oversold; } else if (rsiD > 30 && rsiD <= 40) { result.Interpretation = SignalInterpretationValue.Bearish; } else if (rsiD > 40 && rsiD < 50) { result.Interpretation = SignalInterpretationValue.MildlyBearish; } else if (rsiD >= 50 && rsiD < 60) { result.Interpretation = SignalInterpretationValue.MildlyBullish; } else if (rsiD >= 60 && rsiD < 70) { result.Interpretation = SignalInterpretationValue.Bullish; } else if (rsiD >= 70) { result.Interpretation = SignalInterpretationValue.Overbought; } } } return(result); }
public Tuple <SignalInterpretation, SignalInterpretation> MakeInterpretationOfSyrahSentiments(Tuple <int?, int?> sentiments) { SignalInterpretation longTermInterpretation = null; SignalInterpretation shortTermInterpretation = null; SyrahSentiment syrahLongTerm = new SyrahSentiment(SyrahSentiment.TermValue.LongTerm); SyrahSentiment syrahShortTerm = new SyrahSentiment(SyrahSentiment.TermValue.ShortTerm); if (sentiments.Item2.HasValue) { longTermInterpretation = SyrahSentiment.MakeInterpretationBasedOnValue(syrahLongTerm, sentiments.Item2.Value); } if (sentiments.Item1.HasValue) { shortTermInterpretation = SyrahSentiment.MakeInterpretationBasedOnValue(syrahShortTerm, sentiments.Item1.Value); } return(Tuple.Create(shortTermInterpretation, longTermInterpretation)); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (signals != null) { Signal mfi = signals.LatestForIndicator(this); if (mfi != null) { double mfiD = mfi.Value; result = new SignalInterpretation(this); if (mfiD <= 10) { result.Interpretation = SignalInterpretationValue.OversoldUnsustainable; } else if (mfiD > 10 && mfiD <= 20) { result.Interpretation = SignalInterpretationValue.Oversold; } else if (mfiD > 20 && mfiD < 80) { result.Interpretation = SignalInterpretationValue.Neutral; } else if (mfiD >= 80 && mfiD < 90) { result.Interpretation = SignalInterpretationValue.Overbought; } else { result.Interpretation = SignalInterpretationValue.OverboughtUnsustainable; } } } return(result); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (quote != null && signals != null) { Signal wma = signals.LatestForIndicator(this); if (wma != null) { double wmaD = wma.Value; double lastPrice = (double)quote.LastPrice.Value; result = new SignalInterpretation(this) { Interpretation = lastPrice > wmaD ? SignalInterpretationValue.Bullish : SignalInterpretationValue.Bearish }; } } return(result); }
protected override SignalInterpretation MakeInterpretation(List <Signal> signals, StockQuoteInfo quote = null) { SignalInterpretation result = null; if (signals != null) { Signal roc = signals.LatestForIndicator(this); if (roc == null) { return(null); } double rocD = roc.Value; switch (AvgPeriod) { case 20: result = new SignalInterpretation(this); if (rocD < -8) { result.Interpretation = SignalInterpretationValue.Oversold; } else if (rocD >= -8 && rocD < 0) { result.Interpretation = SignalInterpretationValue.Bearish; } else if (rocD.Equals(0)) { result.Interpretation = SignalInterpretationValue.Neutral; } else if (rocD > 0 && rocD < 8) { result.Interpretation = SignalInterpretationValue.Bullish; } else { result.Interpretation = SignalInterpretationValue.Overbought; } break; case 125: result = new SignalInterpretation(this); if (rocD < 0) { result.Interpretation = SignalInterpretationValue.Bearish; } else if (rocD.Equals(0)) { result.Interpretation = SignalInterpretationValue.Neutral; } else { result.Interpretation = SignalInterpretationValue.Bullish; } break; } } return(result); }