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); }
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); } }
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); }
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); }
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); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
/// <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); }
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); }
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); }