コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Max.cs プロジェクト: soldiers1989/OptionsPlay
        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);
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: Macd.cs プロジェクト: soldiers1989/OptionsPlay
        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);
        }
コード例 #6
0
ファイル: WillR.cs プロジェクト: soldiers1989/OptionsPlay
        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);
        }
コード例 #7
0
ファイル: Adx.cs プロジェクト: soldiers1989/OptionsPlay
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
ファイル: Cci.cs プロジェクト: soldiers1989/OptionsPlay
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
ファイル: Stoch.cs プロジェクト: soldiers1989/OptionsPlay
        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);
        }
コード例 #12
0
ファイル: Rsi.cs プロジェクト: soldiers1989/OptionsPlay
        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);
        }
コード例 #13
0
        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));
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        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);
        }