Example #1
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie originalDataSource = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Close, false);

            string label = "MA " + this.Rounds.ToString();
            Serie  serie = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Data_Label = label, Column_Serie_ID = "mave"
            };

            double[] values = new double[this.Rounds];
            for (int i = 0; i < originalDataSource.Data.Count; i++)
            {
                values[i % this.Rounds] = originalDataSource.Data[i].Value;

                if (originalDataSource.Data[i].Visible)
                {
                    serie.Data.Add(new SerieValue()
                    {
                        Date = originalDataSource.Data[i].Date, Value = values.Where(x => x > 0).Average()
                    });
                }
            }
            this.Series.Add(serie);
        }
Example #2
0
        public static Serie GetSymbolIntradiaryDataSerie(int portfolio_id, int symbol_id)
        {
            using (ctaDBEntities entities = new ctaDBEntities())
            {
                entities.Database.Connection.Open();

                string user_type = (portfolio_id == 0) ? "FREE" : entities.Portfolios.Where(p => p.Id == portfolio_id).Select(p => p.Tenant.Tenant_Type.Name).First();
                if (user_type == "FREE")
                {
                    return(new Serie());
                }

                var           symbol_quotes = entities.Stock_Quote_Intradiary.Where(sq => sq.stock_id == symbol_id).OrderBy(sq => sq.datetime);
                List <Candel> quotes        = symbol_quotes.Select(q => new Candel()
                {
                    Date    = q.datetime,
                    Open    = q.opening,
                    Close   = q.opening,
                    Maximun = q.last_trade_price,
                    Minimun = q.last_trade_price,
                    Volume  = (double)q.last_trade_size,
                    Visible = true
                }).ToList <Candel>();

                Serie result = Candel.GetDataSerie(quotes, DataSourceFieldUsed.Close, true);

                entities.Database.Connection.Close();
                return(result);
            }
        }
Example #3
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie volumeData = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Volume, false);

            volumeData.Data = volumeData.Data.Where(x => x.Visible).ToList();
            Serie shortVolAverage = MA.ApplyFormula(volumeData, this.ShortRounds, "", SerieType.dashed);
            Serie longVolAverage  = MA.ApplyFormula(volumeData, this.LongRounds, "", SerieType.dashed);

            Serie serie = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Serie_ID = "vosc"
            };

            serie.Column_Data_Label = string.Format("VO {0}-{1}", this.ShortRounds, this.LongRounds);

            for (int i = 0; i < volumeData.Data.Count; i++)
            {
                serie.Data.Add(new SerieValue()
                {
                    Date  = volumeData.Data[i].Date,
                    Value = longVolAverage.Data[i].Value - shortVolAverage.Data[i].Value
                });
            }

            this.Series.Add(serie);
        }
Example #4
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie originalDataSource = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Close, false);

            Serie middle_bound = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Data_Label = "Boolinger " + this.Rounds, Column_Serie_ID = "bbmi"
            };
            Serie lower_serie = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Data_Label = "BoolingerLO ", Column_Serie_ID = "bblo"
            };
            Serie upper_serie = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Data_Label = "BoolingerUP ", Column_Serie_ID = "bbup"
            };

            double[] values = base.Data_Source.GetRange(Math.Max(0, (base.Data_Source.Count - originalDataSource.Data.Count) - this.Rounds), Math.Min(this.Rounds, originalDataSource.Data.Count)).Select(d => d.Close).ToArray <double>();

            double desvest        = 0;
            double values_average = 0;

            for (int i = 0; i < originalDataSource.Data.Count; i++)
            {
                values[i % this.Rounds] = originalDataSource.Data[i].Value;
                values_average          = values.Where(x => x > 0).Average();

                //desvest
                var pows = values.Select(x => Math.Pow(x - values_average, 2));
                var sum  = pows.Sum() / (this.Rounds - 1);
                desvest = Math.Sqrt(sum);

                if (originalDataSource.Data[i].Visible)
                {
                    middle_bound.Data.Add(new SerieValue()
                    {
                        Date = originalDataSource.Data[i].Date, Value = values_average
                    });
                    upper_serie.Data.Add(new SerieValue()
                    {
                        Date = originalDataSource.Data[i].Date, Value = values_average + (2 * desvest)
                    });
                    lower_serie.Data.Add(new SerieValue()
                    {
                        Date = originalDataSource.Data[i].Date, Value = values_average - (2 * desvest)
                    });
                }
            }

            this.Series.Add(middle_bound);
            this.Series.Add(upper_serie);
            this.Series.Add(lower_serie);
        }
Example #5
0
        public static UserDashboard GetDashboard(string username)
        {
            using (ctaDBEntities entities = new ctaDBEntities())
            {
                UserDashboard result = new UserDashboard(username);
                entities.Database.Connection.Open();

                int    user_id         = UserService.GetUserId(username);
                string user_type       = entities.Tenants.Where(t => t.Id == user_id).Select(t => t.Tenant_Type.Name).First();
                var    user_portfolios = entities.Portfolios.Where(ptfolio => ptfolio.user_id == user_id);

                foreach (var portfolio in user_portfolios)
                {
                    DashboardItem dashboard_item = new DashboardItem()
                    {
                        Portfolio = portfolio.name, Symbols = new List <ctaCOMMON.Charts.Symbol>(), Portfolio_Id = portfolio.Id
                    };
                    foreach (var stock in portfolio.Portfolio_Stock)
                    {
                        List <Candel> quotes       = new List <Candel>();
                        Candel        today_candel = null;
                        foreach (var quote in stock.Stock.Stock_Quote.Where(s => s.date_round < DateTime.Now.AddDays(-1) || user_type != "FREE").OrderBy(itm => itm.date_round))
                        {
                            Candel candel = new Candel()
                            {
                                Date = quote.date_round, Open = quote.opening, Close = quote.closing, Minimun = quote.minimun, Maximun = quote.maximun, Volume = (double)quote.volume
                            };
                            quotes.Add(candel);
                            today_candel = candel;
                        }
                        SymbolIntradiaryInfo symbolIntradiaryInfo = QuotesService.GetSymbolIntradiaryInfo(stock.stock_id);
                        if (today_candel != null)
                        {
                            symbolIntradiaryInfo.Volume  = today_candel.Volume;
                            symbolIntradiaryInfo.Maximun = today_candel.Maximun;
                            symbolIntradiaryInfo.Minimun = today_candel.Minimun;
                        }

                        ctaCOMMON.Charts.Symbol dashboard_item_symbol = new ctaCOMMON.Charts.Symbol()
                        {
                            Symbol_ID = stock.stock_id, Symbol_Name = stock.Stock.symbol, Symbol_Company_Name = stock.Stock.name, Symbol_Market_ID = stock.Stock.Market.Id, Symbol_Market = stock.Stock.Market.name, Quotes = quotes.OrderBy(q => q.Date).ToList(), Intradiary_Info = symbolIntradiaryInfo
                        };
                        dashboard_item.Symbols.Add(dashboard_item_symbol);
                    }

                    result.AddDashboardItem(dashboard_item);
                }

                entities.Database.Connection.Close();

                DashBoardCache = result;
                return(result);
            }
        }
Example #6
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie serie = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.OBV, false);

            serie.Color             = this.Serie_Color;
            serie.Serie_Type        = SerieType.line;
            serie.Column_Data_Label = "On Balance Volume";
            serie.Column_Serie_ID   = "obv";

            serie.Data = serie.Data.Where(x => x.Visible).ToList();
            this.Series.Add(serie);
        }
Example #7
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie originalDataSource = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Close, false);

            //double K = 2 / (this.Rounds + 1);

            decimal Kdecimal = Decimal.Divide(2, this.Rounds + 1);
            double  K        = Double.Parse((Math.Truncate(100000000 * Kdecimal) / 100000000).ToString()); //set to 8 decimal places

            Serie serie = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Data_Label = "EMA " + this.Rounds, Column_Serie_ID = "emav"
            };

            double[] initialMAs = new double[this.Rounds];
            double   value      = 0;

            //double previousSerieValue = 0;
            for (int i = 0; i < originalDataSource.Data.Count; i++)
            {
                if (i < this.Rounds)
                {
                    initialMAs[i % this.Rounds] = originalDataSource.Data[i].Value;
                    serie.Data.Add(new SerieValue()
                    {
                        Date = originalDataSource.Data[i].Date, Value = initialMAs.Where(x => x > 0).Average()
                    });
                }
                else
                {
                    value = (originalDataSource.Data[i].Value * K) + (serie.Data[i - 1].Value * (1 - K));
                    serie.Data.Add(new SerieValue()
                    {
                        Date = originalDataSource.Data[i].Date, Value = value, Visible = originalDataSource.Data[i].Visible
                    });
                }
            }

            if (this.Filter)
            {
                serie.Data = serie.Data.Where(x => x.Visible).ToList();
            }

            this.Series.Add(serie);
        }
Example #8
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie serie = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Stochastic, false, this.Rounds);

            serie.Color             = this.Serie_Color;
            serie.Serie_Type        = SerieType.line;
            serie.Column_Data_Label = "SO Fast";
            serie.Column_Serie_ID   = "osse";

            Serie average = MA.ApplyFormula(serie, 3, this.Serie_Average_Color, SerieType.dashed);

            average.Column_Data_Label = "MA(" + this.Rounds + ")";
            average.Column_Serie_ID   = "osav";

            //DateTime min_date = base.Data_Source.Select(x => x.Date).Min();
            //DateTime max_date = base.Data_Source.Select(x => x.Date).Max();

            serie.Data = serie.Data.Where(x => x.Visible).ToList();

            Serie oversold = new Serie()
            {
                Color = this.Serie_Bounded_Lines_Color, Serie_Type = SerieType.line, Column_Data_Label = "Sobre Venta", Column_Serie_ID = "osos"
            };
            Serie overbought = new Serie()
            {
                Color = this.Serie_Bounded_Lines_Color, Serie_Type = SerieType.line, Column_Data_Label = "Sobre Compra", Column_Serie_ID = "osob"
            };

            foreach (SerieValue serie_item in serie.Data)
            {
                oversold.Data.Add(new SerieValue()
                {
                    Date = serie_item.Date, Value = this.Oversold
                });
                overbought.Data.Add(new SerieValue()
                {
                    Date = serie_item.Date, Value = this.Overbought
                });
            }

            this.Series.Add(serie);
            this.Series.Add(average);
            this.Series.Add(oversold);
            this.Series.Add(overbought);
        }
Example #9
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            EMA emax = new EMA(base.Data_Source, this.Short_Term, "", false);
            EMA emay = new EMA(base.Data_Source, this.Long_Term, "", false);

            Serie serie = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Data_Label = "MACD", Column_Serie_ID = "macs"
            };
            Serie originalDataSource = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Close, false);

            for (int i = 0; i < originalDataSource.Data.Count; i++)
            {
                serie.Data.Add(new SerieValue()
                {
                    Date    = originalDataSource.Data[i].Date,
                    Value   = (emax.Series[0].Data[i].Value - emay.Series[0].Data[i].Value),
                    Visible = originalDataSource.Data[i].Visible
                });
            }

            Serie average = MA.ApplyFormula(serie, this.Average_Term, this.Average_Serie_Color, SerieType.dashed);

            average.Column_Data_Label = "MA(" + this.Average_Term + ")";
            average.Column_Serie_ID   = "maca";

            serie.Data = serie.Data.Where(x => x.Visible).ToList();

            Serie zero_serie = new Serie()
            {
                Color = this.Zero_Serie_Color, Serie_Type = SerieType.line, Column_Data_Label = "Zero", Column_Serie_ID = "macz"
            };

            foreach (var item in serie.Data)
            {
                zero_serie.Data.Add(new SerieValue()
                {
                    Date = item.Date, Value = 0
                });
            }

            this.Series.Add(serie);
            this.Series.Add(average);
            this.Series.Add(zero_serie);
        }
Example #10
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie closeData = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Close, false);

            Serie serieMA1 = MA.ApplyFormula(closeData, this.ShortRounds, this.Serie_Color1, SerieType.line);

            serieMA1.Column_Data_Label = string.Format("CM {0}", this.ShortRounds);
            serieMA1.Column_Serie_ID   = "cma1";

            Serie serieMA2 = MA.ApplyFormula(closeData, this.LongRounds, this.Serie_Color2, SerieType.line);

            serieMA2.Column_Data_Label = string.Format("CM {0}", this.LongRounds);
            serieMA2.Column_Serie_ID   = "cma2";

            this.Series.Add(serieMA1);
            this.Series.Add(serieMA2);
        }
Example #11
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie serie = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.WilliansR, false, this.Rounds);

            serie.Color             = this.Serie_Color;
            serie.Serie_Type        = SerieType.line;
            serie.Column_Data_Label = "WilliamsR " + this.Rounds;
            serie.Column_Serie_ID   = "wrse";
            serie.Data = serie.Data.Where(x => x.Visible).ToList();

            //Serie average = MA.ApplyFormula(serie, 3, this.Serie_Average_Color, SerieType.dashed);
            //average.Column_Data_Label = "WR " + this.Rounds + " MA";
            //average.Column_Serie_ID = "wrav";

            Serie oversold = new Serie()
            {
                Color = this.Serie_Bounded_Lines_Color, Serie_Type = SerieType.line, Column_Data_Label = "", Column_Serie_ID = "wros"
            };
            Serie overbought = new Serie()
            {
                Color = this.Serie_Bounded_Lines_Color, Serie_Type = SerieType.line, Column_Data_Label = "", Column_Serie_ID = "wrob"
            };

            foreach (SerieValue serie_item in serie.Data)
            {
                oversold.Data.Add(new SerieValue()
                {
                    Date = serie_item.Date, Value = this.Oversold
                });
                overbought.Data.Add(new SerieValue()
                {
                    Date = serie_item.Date, Value = this.Overbought
                });
            }

            this.Series.Add(serie);
            this.Series.Add(oversold);
            this.Series.Add(overbought);
        }
Example #12
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie serie = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Data_Label = "ROC " + this.Rounds, Column_Serie_ID = "rocs"
            };

            Serie  originalDataSource = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Close, false);
            double value = 0;

            for (int i = 0; i < originalDataSource.Data.Count; i++)
            {
                value = 100 * (originalDataSource.Data[i].Value / originalDataSource.Data[Math.Max(0, i - this.Rounds)].Value);

                if (originalDataSource.Data[i].Visible)
                {
                    serie.Data.Add(new SerieValue()
                    {
                        Date = originalDataSource.Data[i].Date, Value = value
                    });
                }
            }

            Serie hundred_serie = new Serie()
            {
                Color = this.Serie_Hundred_Color, Serie_Type = SerieType.line, Column_Data_Label = "Hundred", Column_Serie_ID = "roch"
            };

            foreach (var item in serie.Data)
            {
                hundred_serie.Data.Add(new SerieValue()
                {
                    Date = item.Date, Value = 100
                });
            }

            this.Series.Add(serie);
            this.Series.Add(hundred_serie);
        }
Example #13
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie originalDataSource = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Volume, false);

            Serie serie = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.bars, Column_Data_Label = "Volumen", Column_Serie_ID = "volu", Orientation = "vertical"
            };

            for (int i = 0; i < originalDataSource.Data.Count; i++)
            {
                if (originalDataSource.Data[i].Visible)
                {
                    serie.Data.Add(new SerieValue()
                    {
                        Date = originalDataSource.Data[i].Date, Value = originalDataSource.Data[i].Value
                    });
                }
            }
            this.Series.Add(serie);
        }
Example #14
0
        public static Serie GetSymbolDataSerie(int stock_id, int portfolio_id, DataSourceFieldUsed data_name)
        {
            List <Candel> quotes = new List <Candel>();

            if (DashBoardCache != null && false)
            {
                var oneYearAgo_Date = DateTime.Now.AddYears(-1);

                var symbol = DashBoardCache.DashboardItems.Where(x => x.Portfolio_Id == portfolio_id)
                             .SelectMany(x => x.Symbols)
                             .Where(x => x.Symbol_ID == stock_id)
                             .FirstOrDefault();

                quotes = symbol.Quotes.Where(x => x.Date > oneYearAgo_Date).ToList();
            }
            else
            {
                quotes = QuotesService.GetSymbolQuotes(stock_id, ChartRange.Year, CandelRange.Weekly, "FREE");
            }

            Serie result = Candel.GetDataSerie(quotes, data_name, true);

            return(result);
        }
Example #15
0
        public override void ApplyFormula()
        {
            this.Series.Clear();

            Serie oversold = new Serie()
            {
                Color = this.Serie_Bounded_Lines_Color, Serie_Type = SerieType.line, Column_Data_Label = "Sobre Venta", Column_Serie_ID = "rsid"
            };
            Serie serie = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Data_Label = "RSI " + this.Rounds, Column_Serie_ID = "rsis"
            };
            Serie overbought = new Serie()
            {
                Color = this.Serie_Bounded_Lines_Color, Serie_Type = SerieType.line, Column_Data_Label = "Sobre Compra", Column_Serie_ID = "rsib"
            };

            //Serie originalDataSource = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.PercentVariation);
            Serie originalDataSource = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Close, false);

            double[] values = new double[this.Rounds];
            double   last_ups_average = 0;
            double   last_downs_average = 0;
            double   value = 0, up = 0, down = 0;

            for (int i = 1; i < originalDataSource.Data.Count; i++)
            {
                values[i % this.Rounds] = originalDataSource.Data[i].Value - originalDataSource.Data[i - 1].Value;

                //last_ups_average = ((values.Where(x => x > 0).Count() > 0) ? values.Where(x => x > 0).Average() : 0);
                //last_downs_average = ((values.Where(x => x < 0).Count() > 0) ? Math.Abs(values.Where(x => x < 0).Average()) : 100);

                if (i < this.Rounds)
                {
                    last_ups_average   = ((values.Where(x => x > 0).Count() > 0) ? values.Where(x => x > 0).Sum() / this.Rounds : 0);
                    last_downs_average = ((values.Where(x => x < 0).Count() > 0) ? Math.Abs(values.Where(x => x < 0).Sum() / this.Rounds) : 0);
                }
                else
                {
                    up   = values[i % this.Rounds] > 0 ? values[i % this.Rounds] : 0;
                    down = values[i % this.Rounds] < 0 ? Math.Abs(values[i % this.Rounds]) : 0;

                    last_ups_average   = (last_ups_average * (this.Rounds - 1) + up) / this.Rounds;
                    last_downs_average = (last_downs_average * (this.Rounds - 1) + down) / this.Rounds;
                }

                value = last_downs_average == 0 ? 100 : 100 - (100 / (1 + (last_ups_average / last_downs_average)));

                if (originalDataSource.Data[i].Visible)
                {
                    serie.Data.Add(new SerieValue()
                    {
                        Date = originalDataSource.Data[i].Date, Value = value
                    });
                }
            }

            foreach (SerieValue item in serie.Data)
            {
                oversold.Data.Add(new SerieValue()
                {
                    Date = item.Date, Value = this.Oversold
                });
                overbought.Data.Add(new SerieValue()
                {
                    Date = item.Date, Value = this.Overbought
                });
            }

            this.Series.Add(serie);
            this.Series.Add(oversold);
            this.Series.Add(overbought);
        }
Example #16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="main_chart_type">Possible values (candel,line)</param>
        /// <returns></returns>
        public List <Serie> Series(string main_chart_type)
        {
            List <Serie> dataSeries = new List <Serie>();

            Serie        serie;
            List <Serie> main_chart_tooltip = new List <Serie>();

            if (main_chart_type == "candel")
            {
                serie = Candel.GetDataSerie(this.Symbol_Dashboard.Symbol.Quotes, DataSourceFieldUsed.Minimun, true);
                serie.Column_Data_Label = "Min";
                serie.Column_Serie_ID   = "minimun";
                dataSeries.Add(serie);

                serie = Candel.GetDataSerie(this.Symbol_Dashboard.Symbol.Quotes, DataSourceFieldUsed.Open, true);
                serie.Column_Data_Label = "Apertura";
                serie.Column_Serie_ID   = "open";
                dataSeries.Add(serie);
            }

            serie = Candel.GetDataSerie(this.Symbol_Dashboard.Symbol.Quotes, DataSourceFieldUsed.Close, true);
            serie.Column_Data_Label = "Cierre";
            serie.Column_Serie_ID   = "close";
            dataSeries.Add(serie);

            if (main_chart_type == "candel")
            {
                serie = Candel.GetDataSerie(this.Symbol_Dashboard.Symbol.Quotes, DataSourceFieldUsed.Maximun, true);
                serie.Column_Data_Label = "Máximo";
                serie.Column_Serie_ID   = "maximun";
                dataSeries.Add(serie);
            }

            serie = Candel.GetDataSerie(this.Symbol_Dashboard.Symbol.Quotes, DataSourceFieldUsed.Close, true);
            serie.Column_Data_Label = "Cierres";
            serie.Column_Serie_ID   = "closing";
            dataSeries.Add(serie);

            serie = Candel.GetDataSerie(this.Symbol_Dashboard.Symbol.Quotes, DataSourceFieldUsed.Volume, true);
            double max_vol = serie.Data.Max(v => v.Value);

            serie.Column_Data_Label = "Volumen";
            serie.Column_Serie_ID   = "volume";
            serie.Color             = "blue";
            dataSeries.Add(serie);

            foreach (var indicator in this.Symbol_Dashboard.Indicators)
            {
                if (!indicator.In_Main_Chart)
                {
                    serie = Candel.GetIndicatorTooltip(indicator);
                    dataSeries.Add(serie);
                }
                foreach (var indicator_serie in indicator.Series)
                {
                    dataSeries.Add(indicator_serie);
                    if (indicator.In_Main_Chart)
                    {
                        main_chart_tooltip.Add(indicator_serie);
                    }
                }
            }

            foreach (var shape in this.Symbol_Dashboard.Shapes.Where(s => s.In_Main_Chart))
            {
                foreach (var shape_serie in shape.Series)
                {
                    main_chart_tooltip.Add(shape_serie);
                }
            }

            serie = Candel.GetDataSerie(this.Symbol_Dashboard.Symbol.Quotes, DataSourceFieldUsed.ToolTip, true, 0, main_chart_tooltip);
            dataSeries.Insert(0, serie);

            List <DateTime> shape_dates = new List <DateTime>();

            foreach (var shape in this.Symbol_Dashboard.Shapes)
            {
                foreach (var shape_serie in shape.Series)
                {
                    dataSeries.Add(shape_serie);

                    foreach (var serie_value in shape_serie.Data)
                    {
                        if (!shape_dates.Contains(serie_value.Date))
                        {
                            shape_dates.Add(serie_value.Date);
                        }
                    }
                }
            }

            this.max_date = Symbol_Dashboard.Symbol.Quotes.Select(q => q.Date).Max();

            foreach (var date in shape_dates)
            {
                Symbol_Dashboard.Symbol.Quotes.Add(new Candel()
                {
                    Date = date
                });
            }

            return(dataSeries);
        }
Example #17
0
        public static List <Candel> GetSymbolQuotes(int symbol_id, ChartRange chartRange, CandelRange candelRange, string user_type)
        {
            DateTime chartMinDate = DateTime.Now;
            DateTime today        = DateTime.Now.Date;

            switch (chartRange)
            {
            case ChartRange.Month:
                chartMinDate = chartMinDate.AddMonths(-1);
                break;

            case ChartRange.ThreeMonths:
                chartMinDate = chartMinDate.AddMonths(-3);
                break;

            case ChartRange.SixMonths:
                chartMinDate = chartMinDate.AddMonths(-6);
                break;

            case ChartRange.Year:
                chartMinDate = chartMinDate.AddYears(-1);
                break;

            case ChartRange.ThreeYears:
                chartMinDate = chartMinDate.AddYears(-3);
                break;

            default:
                chartMinDate = DateTime.MinValue.AddDays(200);
                break;
            }

            List <Candel> candels = new List <Candel>();

            using (ctaDBEntities entities = new ctaDBEntities())
            {
                entities.Database.Connection.Open();
                bool               createCandel  = false;
                Candel             currentCandel = null;
                DateTime           startDate     = chartMinDate.AddDays(-200);
                List <Stock_Quote> quotes        = entities.Stock_Quote.Where(s => s.stock_id == symbol_id && (s.date_round > startDate && (user_type != "FREE" || s.date_round < today))).OrderBy(sq => sq.date_round).ToList();
                Stock_Quote        quote         = null;
                for (int i = 0; i < quotes.Count; i++)
                {
                    quote         = quotes[i];
                    currentCandel = (currentCandel != null) ? currentCandel : new Candel()
                    {
                        Date = quote.date_round, Open = quote.opening, Close = quote.closing, Minimun = quote.minimun, Maximun = quote.maximun, Volume = (double)quote.volume
                    };

                    if (candelRange == CandelRange.Daily)
                    {
                        createCandel = true;
                    }
                    else if (candelRange == CandelRange.Weekly)
                    {
                        currentCandel.Minimun = (currentCandel.Minimun > quote.minimun) ? quote.minimun : currentCandel.Minimun;
                        currentCandel.Maximun = (currentCandel.Maximun < quote.maximun) ? quote.maximun : currentCandel.Maximun;
                        if (quote.date_round.DayOfWeek == DayOfWeek.Friday)
                        {
                            currentCandel.Close = quote.closing;
                            currentCandel.Date  = quote.date_round;
                            createCandel        = true;
                        }
                    }
                    else
                    {
                        currentCandel.Minimun = (currentCandel.Minimun > quote.minimun) ? quote.minimun : currentCandel.Minimun;
                        currentCandel.Maximun = (currentCandel.Maximun < quote.maximun) ? quote.maximun : currentCandel.Maximun;
                        if (currentCandel.Date.Month != quote.date_round.Month)
                        {
                            createCandel = true;
                            i--;
                        }
                        else
                        {
                            currentCandel.Date = quote.date_round;
                        }
                    }

                    if (createCandel || i + 1 == quotes.Count)
                    {
                        currentCandel.Close   = quote.closing;
                        currentCandel.Visible = (currentCandel.Date >= chartMinDate.Date);
                        candels.Add(currentCandel);
                        currentCandel = null;
                        createCandel  = false;
                    }
                }

                entities.Database.Connection.Close();
            }
            return(candels);
        }
Example #18
0
        public override void ApplyFormula()
        {
            this.Series = new List <Serie>();

            Serie DataSource = Candel.GetDataSerie(base.Data_Source, DataSourceFieldUsed.Close, false);

            //get the other quotes
            Serie indexDataSource = Candel.GetDataSerie(this.GetCandelsBySymbol(this.SecondaryIndex), DataSourceFieldUsed.Close, false);

            //get al the values that had data for the index for the same date
            var filterDataSource      = DataSource.Data.Where(x => indexDataSource.Data.Select(y => y.Date).Contains(x.Date)).ToList();
            var filterIndexDataSource = indexDataSource.Data.Where(x => DataSource.Data.Select(y => y.Date).Contains(x.Date)).ToList();

            Serie corr = new Serie()
            {
                Color = this.Serie_Color, Serie_Type = SerieType.line, Column_Serie_ID = "corr"
            };

            corr.Column_Data_Label = "Coeficiente Correlacion " + this.SecondaryIndex;

            double[]   values1 = new double[this.Rounds];
            double[]   values2 = new double[this.Rounds];
            double     desvest1 = 0, desvest2 = 0;
            double     values_average1 = 0, values_average2 = 0;
            SerieValue current = null;

            for (int i = 0; i < filterDataSource.Count(); i++)
            {
                current = filterDataSource[i];
                values1[i % this.Rounds] = current.Value;
                values2[i % this.Rounds] = filterIndexDataSource[i].Value;

                if (current.Date != filterIndexDataSource[i].Date)
                {
                    throw new InvalidOperationException();
                }

                values_average1 = values1.Where(x => x > 0).Average();
                values_average2 = values2.Where(x => x > 0).Average();

                if (i >= this.Rounds - 1)
                {
                    //desvest 1
                    var pows = values1.Select(x => Math.Pow(x - values_average1, 2));
                    var sum  = pows.Sum() / (this.Rounds - 1);
                    desvest1 = Math.Sqrt(sum);

                    //desvest 2
                    var pows2 = values2.Select(x => Math.Pow(x - values_average2, 2));
                    var sum2  = pows2.Sum() / (this.Rounds - 1);
                    desvest2 = Math.Sqrt(sum2);

                    //cov
                    var cov1     = values1.Select(x => x - values_average1);
                    var cov2     = values2.Select(x => x - values_average2);
                    var prodList = cov1.Zip(cov2, (x, y) => x * y).ToList();
                    var cov      = prodList.Sum() / this.Rounds;

                    //corr
                    if (filterDataSource[i].Visible)
                    {
                        corr.Data.Add(new SerieValue()
                        {
                            Date = current.Date, Value = cov / (desvest1 * desvest2)
                        });
                    }
                }
            }

            this.Series.Add(corr);
        }