コード例 #1
0
 public Indicator()
 {
     InitializeComponent();
     dataViewModel    = new IndicatorStockViewModel(0);
     this.DataContext = dataViewModel.Stocks;
     this.sfchart.Series[0].ItemsSource = dataViewModel.Stocks[0].Datas;
     string[] technicalIndicators = { "MACD",                "Average True Range", "Accumulation Distribution", "Bollinger Band",
                                      "Exponential Average", "Momentum",           "RSI",                       "Simple Average","Stochastic",
                                      "Triangular Average" };
     Indicators.ItemsSource  = technicalIndicators;
     Indicators.SelectedItem = technicalIndicators[0];
 }
コード例 #2
0
        private FinancialTechnicalIndicator Addindicator(string value, int rowIndex)
        {
            FinancialTechnicalIndicator indicator;
            string a   = "";
            object obj = a;
            string b   = (obj as string);

            switch (value)
            {
            case "Accumulation Distribution":
                IndicatorStockViewModel model = new IndicatorStockViewModel(1);

                DataContext = model.Stocks;
                indicator   = new AccumulationDistributionIndicator()
                {
                    SignalLineColor = new SolidColorBrush(Colors.Blue)
                };
                sfchart.Annotations.Clear();
                LineAnnotation annotationAD = new LineAnnotation {
                    Text = "High in Prices", HorizontalTextAlignment = HorizontalAlignment.Center, VerticalTextAlignment = VerticalAlignment.Top, CoordinateUnit = CoordinateUnit.Axis, X1 = 22, Y1 = 30, X2 = 26, Y2 = 40
                };
                LineAnnotation annotation2AD = new LineAnnotation {
                    Text = "Decline in Prices", CoordinateUnit = CoordinateUnit.Axis, X1 = 38, Y1 = 28, X2 = 46, Y2 = 15
                };
                LineAnnotation annotation3AD = new LineAnnotation {
                    Text = "Price is Trending Down", CoordinateUnit = CoordinateUnit.Axis, X1 = 0.1, Y1 = 41.5, X2 = 14, Y2 = 13
                };

                sfchart.Annotations.Add(annotationAD);
                sfchart.Annotations.Add(annotation2AD);
                sfchart.Annotations.Add(annotation3AD);
                break;

            case "Average True Range":
                IndicatorStockViewModel model9 = new IndicatorStockViewModel(1);

                DataContext = model9.Stocks;
                sfchart.Annotations.Clear();
                indicator = new AverageTrueRangeIndicator()
                {
                    SignalLineColor = new SolidColorBrush(Colors.Blue),
                    Period          = 2
                };
                TextAnnotation annotationAT = new TextAnnotation {
                    Text = "Buy Signal", CoordinateUnit = CoordinateUnit.Axis, X1 = 6, Y1 = 37
                };
                TextAnnotation annotationAT1 = new TextAnnotation {
                    Text = "Buy Signal", CoordinateUnit = CoordinateUnit.Axis, X1 = 8, Y1 = 18
                };
                TextAnnotation annotationAT2 = new TextAnnotation {
                    Text = "Sell Signal", CoordinateUnit = CoordinateUnit.Axis, X1 = 20, Y1 = 24
                };
                TextAnnotation annotationAT3 = new TextAnnotation {
                    Text = "Sell Signal", CoordinateUnit = CoordinateUnit.Axis, X1 = 27.3, Y1 = 41
                };
                TextAnnotation annotationAT4 = new TextAnnotation {
                    Text = "Average True Range" + "\n" + "Trailing Stops", CoordinateUnit = CoordinateUnit.Axis, X1 = 35, Y1 = 22
                };
                sfchart.Annotations.Add(annotationAT);
                sfchart.Annotations.Add(annotationAT1);
                sfchart.Annotations.Add(annotationAT2);
                sfchart.Annotations.Add(annotationAT3);
                sfchart.Annotations.Add(annotationAT4);

                break;

            case "Bollinger Band":
                IndicatorStockViewModel model1 = new IndicatorStockViewModel(0);

                DataContext = model1.Stocks;

                indicator = new BollingerBandIndicator()
                {
                    UpperLineColor  = new SolidColorBrush(Colors.Green),
                    LowerLineColor  = new SolidColorBrush(Colors.Red),
                    SignalLineColor = new SolidColorBrush(Colors.Transparent),
                    Period          = 2
                };

                sfchart.Annotations.Clear();
                TextAnnotation annotation = new TextAnnotation {
                    Text = "Upper Bollinger Band", CoordinateUnit = CoordinateUnit.Axis, X1 = 6, Y1 = 650
                };
                TextAnnotation annotation1 = new TextAnnotation {
                    Text = "Sell Signal", CoordinateUnit = CoordinateUnit.Axis, X1 = 33.7, Y1 = 660
                };
                TextAnnotation annotation2 = new TextAnnotation {
                    Text = "Lower Bollinger Band", CoordinateUnit = CoordinateUnit.Axis, X1 = 40, Y1 = 390
                };
                TextAnnotation annotation3 = new TextAnnotation {
                    Text = "Buy Signal", CoordinateUnit = CoordinateUnit.Axis, X1 = 7, Y1 = 230
                };

                sfchart.Annotations.Add(annotation);
                sfchart.Annotations.Add(annotation1);
                sfchart.Annotations.Add(annotation2);
                sfchart.Annotations.Add(annotation3);
                break;

            case "Exponential Average":
                IndicatorStockViewModel model8 = new IndicatorStockViewModel(0);

                DataContext = model8.Stocks;
                indicator   = new ExponentialAverageIndicator()
                {
                    SignalLineColor = new SolidColorBrush(Colors.Blue)
                };
                sfchart.Annotations.Clear();
                TextAnnotation annotationE = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 0.3, Y1 = 700
                };
                TextAnnotation annotationE1 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 2, Y1 = 605
                };
                TextAnnotation annotationE2 = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 8, Y1 = 260
                };
                TextAnnotation annotationE3 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 20, Y1 = 580
                };
                TextAnnotation annotationE4 = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 26, Y1 = 450
                };
                TextAnnotation annotationE5 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 35, Y1 = 660
                };
                TextAnnotation annotationE6 = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 40, Y1 = 460
                };
                TextAnnotation annotationE7 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 54, Y1 = 760
                };

                sfchart.Annotations.Add(annotationE);
                sfchart.Annotations.Add(annotationE1);
                sfchart.Annotations.Add(annotationE2);
                sfchart.Annotations.Add(annotationE3);
                sfchart.Annotations.Add(annotationE4);
                sfchart.Annotations.Add(annotationE5);
                sfchart.Annotations.Add(annotationE6);
                sfchart.Annotations.Add(annotationE7);
                break;

            case "MACD":
                IndicatorStockViewModel model7 = new IndicatorStockViewModel(2);

                DataContext = model7.Stocks;
                sfchart.Annotations.Clear();
                indicator = new MACDTechnicalIndicator()
                {
                    Period      = 5,
                    LongPeriod  = 8,
                    ShortPeriod = 3,

                    SignalLineColor      = new SolidColorBrush(Colors.Blue),
                    ConvergenceLineColor = new SolidColorBrush(Colors.Green),
                    DivergenceLineColor  = new SolidColorBrush(Colors.Red)
                };
                TextAnnotation annotationMA = new TextAnnotation {
                    Text = "MACD" + "\n" + "Sell Signals", CoordinateUnit = CoordinateUnit.Axis, X1 = 17, Y1 = 700
                };
                TextAnnotation annotationMA1 = new TextAnnotation {
                    Text = "MACD" + "\n" + "Buy Signals", CoordinateUnit = CoordinateUnit.Axis, X1 = 2, Y1 = 400
                };
                TextAnnotation annotationMA2 = new TextAnnotation {
                    Text = "Buy", CoordinateUnit = CoordinateUnit.Axis, X1 = 10, Y1 = 250
                };
                TextAnnotation annotationMA3 = new TextAnnotation {
                    Text = "Sell", CoordinateUnit = CoordinateUnit.Axis, X1 = 24, Y1 = 620
                };
                TextAnnotation annotationMA4 = new TextAnnotation {
                    Text = "Buy", CoordinateUnit = CoordinateUnit.Axis, X1 = 30, Y1 = 450
                };
                TextAnnotation annotationMA5 = new TextAnnotation {
                    Text = "Sell", CoordinateUnit = CoordinateUnit.Axis, X1 = 48, Y1 = 650
                };

                sfchart.Annotations.Add(annotationMA);
                sfchart.Annotations.Add(annotationMA1);
                sfchart.Annotations.Add(annotationMA2);
                sfchart.Annotations.Add(annotationMA3);
                sfchart.Annotations.Add(annotationMA4);
                sfchart.Annotations.Add(annotationMA5);
                break;

            case "Momentum":
                sfchart.Annotations.Clear();
                IndicatorStockViewModel model6 = new IndicatorStockViewModel(2);

                DataContext = model6.Stocks;
                indicator   = new MomentumTechnicalIndicator()
                {
                    MomentumLineColor = new SolidColorBrush(Colors.Blue),

                    Period = 4
                };
                LineAnnotation annotationM = new LineAnnotation {
                    Text = "Downtrend", CoordinateUnit = CoordinateUnit.Axis, X1 = 2, Y1 = 463, X2 = 12, Y2 = 245
                };
                TextAnnotation annotationM1 = new TextAnnotation {
                    Text = "Buy", CoordinateUnit = CoordinateUnit.Axis, X1 = 8, Y1 = 450
                };
                TextAnnotation annotationM2 = new TextAnnotation {
                    Text = "Sell", CoordinateUnit = CoordinateUnit.Axis, X1 = 21, Y1 = 530
                };
                LineAnnotation annotationM3 = new LineAnnotation {
                    Text = "Divergence of Price" + "\n" + "& Momentum", CoordinateUnit = CoordinateUnit.Axis, X1 = 36.5, Y1 = 468, X2 = 47.5, Y2 = 394
                };

                sfchart.Annotations.Add(annotationM);
                sfchart.Annotations.Add(annotationM1);
                sfchart.Annotations.Add(annotationM2);
                sfchart.Annotations.Add(annotationM3);
                break;

            case "RSI":
                IndicatorStockViewModel model5 = new IndicatorStockViewModel(2);

                DataContext = model5.Stocks;
                sfchart.Annotations.Clear();
                indicator = new RSITechnicalIndicator()
                {
                    SignalLineColor = new SolidColorBrush(Colors.Blue),
                    LowerLineColor  = new SolidColorBrush(Colors.Red),
                    Period          = 5,
                    UpperLineColor  = new SolidColorBrush(Colors.Green)
                };
                TextAnnotation annotationRS = new TextAnnotation {
                    Text = "Oversold", CoordinateUnit = CoordinateUnit.Axis, X1 = 42, Y1 = 645
                };
                TextAnnotation annotationRS1 = new TextAnnotation {
                    Text = "Overbought", CoordinateUnit = CoordinateUnit.Axis, X1 = 0.3, Y1 = 380
                };
                TextAnnotation annotationRS2 = new TextAnnotation {
                    Text = "Seller Territory" + "\n" + "(over 500)", CoordinateUnit = CoordinateUnit.Axis, X1 = 10, Y1 = 600
                };
                TextAnnotation annotationRS3 = new TextAnnotation {
                    Text = "Buyers Territory" + "\n" + "(below 500)", CoordinateUnit = CoordinateUnit.Axis, X1 = 50, Y1 = 450
                };

                sfchart.Annotations.Add(annotationRS);
                sfchart.Annotations.Add(annotationRS1);
                sfchart.Annotations.Add(annotationRS2);
                sfchart.Annotations.Add(annotationRS3);
                break;

            case "Simple Average":
                IndicatorStockViewModel model4 = new IndicatorStockViewModel(0);

                DataContext = model4.Stocks;
                sfchart.Annotations.Clear();
                indicator = new SimpleAverageIndicator()
                {
                    SignalLineColor = new SolidColorBrush(Colors.Blue)
                };
                TextAnnotation annotationSA = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 0, Y1 = 405
                };
                TextAnnotation annotationSA1 = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 8, Y1 = 250
                };
                TextAnnotation annotationSA2 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 21, Y1 = 620
                };
                TextAnnotation annotationSA3 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 31, Y1 = 630
                };

                TextAnnotation annotationSA6 = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 40, Y1 = 475
                };
                TextAnnotation annotationSA7 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 54, Y1 = 760
                };

                sfchart.Annotations.Add(annotationSA);
                sfchart.Annotations.Add(annotationSA1);
                sfchart.Annotations.Add(annotationSA2);
                sfchart.Annotations.Add(annotationSA3);
                sfchart.Annotations.Add(annotationSA6);
                sfchart.Annotations.Add(annotationSA7);
                break;

            case "Stochastic":
                sfchart.Annotations.Clear();
                IndicatorStockViewModel model3 = new IndicatorStockViewModel(0);

                DataContext = model3.Stocks;
                indicator   = new StochasticTechnicalIndicator()
                {
                    SignalLineColor = new SolidColorBrush(Colors.Red),
                    UpperLineColor  = new SolidColorBrush(Colors.Green),
                    Period          = 3
                };
                LineAnnotation annotationS = new LineAnnotation {
                    Text = "Lower Low", CoordinateUnit = CoordinateUnit.Axis, X1 = 0.8, Y1 = 433, X2 = 9.4, Y2 = 243
                };
                TextAnnotation annotationS1 = new TextAnnotation {
                    Text = "Low#1", CoordinateUnit = CoordinateUnit.Axis, X1 = -0.6, Y1 = 420
                };
                TextAnnotation annotationS2 = new TextAnnotation {
                    Text = "Low#2", CoordinateUnit = CoordinateUnit.Axis, X1 = 8, Y1 = 243
                };
                LineAnnotation annotationS4 = new LineAnnotation {
                    Text = "Higher High", CoordinateUnit = CoordinateUnit.Axis, X1 = 11.5, Y1 = 369, X2 = 22.5, Y2 = 632
                };
                TextAnnotation annotationS5 = new TextAnnotation {
                    Text = "High#2", CoordinateUnit = CoordinateUnit.Axis, X1 = 21, Y1 = 650
                };
                TextAnnotation annotationS6 = new TextAnnotation {
                    Text = "High#1", CoordinateUnit = CoordinateUnit.Axis, X1 = 10, Y1 = 370
                };
                LineAnnotation annotationS7 = new LineAnnotation {
                    Text = "Higher Low", CoordinateUnit = CoordinateUnit.Axis, X1 = 38, Y1 = 637, X2 = 48, Y2 = 680
                };
                TextAnnotation annotationS8 = new TextAnnotation {
                    Text = "Low#3", CoordinateUnit = CoordinateUnit.Axis, X1 = 37, Y1 = 670
                };
                TextAnnotation annotationS9 = new TextAnnotation {
                    Text = "Low#4", CoordinateUnit = CoordinateUnit.Axis, X1 = 48, Y1 = 700
                };

                sfchart.Annotations.Add(annotationS);
                sfchart.Annotations.Add(annotationS1);
                sfchart.Annotations.Add(annotationS2);
                sfchart.Annotations.Add(annotationS4);
                sfchart.Annotations.Add(annotationS5);
                sfchart.Annotations.Add(annotationS6);
                sfchart.Annotations.Add(annotationS7);
                sfchart.Annotations.Add(annotationS8);
                sfchart.Annotations.Add(annotationS9);
                break;

            case "Triangular Average":
                IndicatorStockViewModel model2 = new IndicatorStockViewModel(0);

                DataContext = model2.Stocks;
                sfchart.Annotations.Clear();
                indicator = new TriangularAverageIndicator()
                {
                    SignalLineColor = new SolidColorBrush(Colors.Blue)
                };
                TextAnnotation annotationT = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 2, Y1 = 400
                };
                TextAnnotation annotationT1 = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 8, Y1 = 250
                };
                TextAnnotation annotationT2 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 21, Y1 = 620
                };
                TextAnnotation annotationT3 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 31, Y1 = 630
                };

                TextAnnotation annotationT6 = new TextAnnotation {
                    Text = "BUY", CoordinateUnit = CoordinateUnit.Axis, X1 = 40, Y1 = 475
                };
                TextAnnotation annotationT7 = new TextAnnotation {
                    Text = "SELL", CoordinateUnit = CoordinateUnit.Axis, X1 = 54, Y1 = 760
                };

                sfchart.Annotations.Add(annotationT);
                sfchart.Annotations.Add(annotationT1);
                sfchart.Annotations.Add(annotationT2);
                sfchart.Annotations.Add(annotationT3);
                sfchart.Annotations.Add(annotationT6);
                sfchart.Annotations.Add(annotationT7);
                break;

            default:
                return(null);
            }
            var         index  = rowIndex == 0 ? 1 : 0;
            ChartSeries Series = this.sfchart.VisibleSeries[index] as ChartSeries;

            indicator.XBindingPath = "TimeStamp";
            indicator.High         = "High";
            indicator.Low          = "Low";
            indicator.Open         = "Open";
            indicator.Close        = "Last";
            indicator.Volume       = "Volume";
            Binding binding = new Binding();

            binding.Path   = new PropertyPath("ItemsSource");
            binding.Source = Series;
            binding.Mode   = BindingMode.TwoWay;
            indicator.SetBinding(FinancialTechnicalIndicator.ItemsSourceProperty, binding);

            return(indicator);
        }