public JsonResult ObtenerEstadistico(string strFechaInicio, string strFechaFinal, List <CatCapital> ListCatCapital) { ResultadoMercadoCapital resultadoMercadoCapital = new ResultadoMercadoCapital(); DateTime fechaInicio = new DateTime(); DateTime fechafinal = new DateTime(); List <Parametro> listParametro = new List <Parametro>(); Parametro parametro = new Parametro(); double totalDias = 0; bool primerRegistro = true; int cont = 0; int cont2 = 0; double rendimiento = 0; double promedio = 0; double varianza = 0; double desviacion = 0; //List<YahooHistoricalPriceData> yahooPriceHistoryTemp = new List<YahooHistoricalPriceData>(); List <CandleT> yahooPriceHistoryTemp = new List <CandleT>(); List <CandleT> yahooPriceHistory = new List <CandleT>(); //LISTA DE EMPRESAS List <Empresa> ListaEmpresa = new List <Empresa>(); List <EmpresaVsEmpresa> ListaEmpresaVsEmpresa = new List <EmpresaVsEmpresa>(); List <CalculoMercadoCapital> ListaCalculoMercadoCapital = new List <CalculoMercadoCapital>(); List <EncabezadoEmpresa> ListaEncabezadoEmpresa = new List <EncabezadoEmpresa>(); EncabezadoEmpresa encabezadoEmpresa = new EncabezadoEmpresa(); fechaInicio = Convert.ToDateTime(strFechaInicio); fechafinal = Convert.ToDateTime(strFechaFinal); List <GrupoParametro> listGrupoParametro = new List <GrupoParametro>(); GrupoParametro grupoParametro = new GrupoParametro(); List <Parametro> listParametroDetalle = new List <Parametro>(); string mensaje = string.Empty; try { totalDias = (fechafinal - fechaInicio).TotalDays; //OBTENER EMPRESAS SELECCIONADAS foreach (CatCapital catCapital in ListCatCapital.Where(n => n.Check).ToList()) { Empresa empresa = new Empresa(); empresa.Nombre = catCapital.Valor; ListaEmpresa.Add(empresa); } if (ListaEmpresa.Count <= 2) { resultadoMercadoCapital.Mensaje = "Se debe seleccionar por lo menos tres empresas."; return(Json(resultadoMercadoCapital, JsonRequestBehavior.AllowGet)); } if (ListaEmpresa.Count > 7) { resultadoMercadoCapital.Mensaje = "Se debe seleccionar como maximo 7 empresas."; return(Json(resultadoMercadoCapital, JsonRequestBehavior.AllowGet)); } //////////////////////// //1.-DATOS //////////////////////// //OBTENER INFORMACION DE DIVISAS POR CADA EMPRESA //ListaEmpresa.ForEach(x => foreach (Empresa x in ListaEmpresa) { ///////////////////////// ///OBTENER CRUMB //////////////////////// //YahooFinance.NET.Token.Refresh(); //YahooFinance.NET.Token.Refresh(); //crumb = Token.Crumb; //cookie = Token.Cookie; //var yahooFinance = new YahooFinanceClient(cookie, crumb); var yahooStockCode = x.Nombre; //yahooFinance.GetYahooStockCode(exchange, symbol); List <YahooHistoricalPriceData> yahooPriceHistory = yahooFinance.GetDailyHistoricalPriceData(yahooStockCode, fechaInicio, fechafinal); //OBTENER REGISTROS TOTALES x.Cantidad = yahooPriceHistory.Count; //CALCULAR RENDIMIENTO cont = 0; primerRegistro = true; foreach (var data in yahooPriceHistory) { if (primerRegistro) { primerRegistro = false; } else { if (yahooPriceHistory[cont - 1].Close != 0) { rendimiento = (Convert.ToDouble(data.Close) / Convert.ToDouble(yahooPriceHistory[cont - 1].Close)) - 1; data.Rendimiento = rendimiento; } else { data.Rendimiento = 0; } } cont++; } //AGREGAR LISTA DE PRECIOS x.ListaPrecio = yahooPriceHistory; //OBTENEMOS SUMATORIA DEL RENDIMIENTO x.Rendimiento = yahooPriceHistory.Sum(n => n.Rendimiento); //decimal promedio = yahooPriceHistory.Average(n => n.Close); //x.Media = Convert.ToDouble(promedio); //OBTENER VARIANZA RENDIMIENTO double M = 0.0; double S = 0.0; int k = 1; yahooPriceHistoryTemp = yahooPriceHistory.ToList(); if (yahooPriceHistoryTemp.Count > 0) { yahooPriceHistoryTemp.RemoveAt(0); yahooPriceHistoryTemp.ForEach(n => { double tmpM = M; M += (Convert.ToDouble(n.Rendimiento) - tmpM) / k; S += (Convert.ToDouble(n.Rendimiento) - tmpM) * (Convert.ToDouble(n.Rendimiento) - M); k++; }); varianza = S / (k - 2); desviacion = Math.Sqrt(S / (k - 2)); } else { varianza = 0; desviacion = 0; } x.VarianzaRendimiento = varianza; x.DesviacionRendimiento = desviacion; } //CALCULAR MEDIA RENDIMIENTO ListaEmpresa.ForEach(n => { promedio = n.Rendimiento / (n.Cantidad - 1); n.MediaRendimiento = promedio; }); ListaEmpresa.ForEach(n => { n.MaxPrecio = n.ListaPrecio.Max(m => m.Close); n.MinPrecio = n.ListaPrecio.Min(m => m.Close); }); //dgvTotales.DataBind(); //POSIBLES COMBINACIONES for (cont = 0; ListaEmpresa.Count > cont; cont++) { //cont2 = cont + 1; for (cont2 = cont + 1; ListaEmpresa.Count > cont2; cont2++) { EmpresaVsEmpresa empresaVsEmpresa = new EmpresaVsEmpresa(); //ELEMENTO X empresaVsEmpresa.NombreX = ListaEmpresa[cont].Nombre; empresaVsEmpresa.CantidadX = ListaEmpresa[cont].Cantidad; empresaVsEmpresa.RendimientoX = ListaEmpresa[cont].Rendimiento; empresaVsEmpresa.MediaRendimientoX = ListaEmpresa[cont].MediaRendimiento; empresaVsEmpresa.VarianzaRendimientoX = ListaEmpresa[cont].VarianzaRendimiento; empresaVsEmpresa.DesviacionRendimientoX = ListaEmpresa[cont].DesviacionRendimiento; empresaVsEmpresa.VarianzaX = ListaEmpresa[cont].Varianza; empresaVsEmpresa.ListaPrecioX = ListaEmpresa[cont].ListaPrecio; empresaVsEmpresa.indiceX = cont; //ELEMENTO Y empresaVsEmpresa.NombreY = ListaEmpresa[cont2].Nombre; empresaVsEmpresa.CantidadY = ListaEmpresa[cont2].Cantidad; empresaVsEmpresa.RendimientoY = ListaEmpresa[cont2].Rendimiento; empresaVsEmpresa.MediaRendimientoY = ListaEmpresa[cont2].MediaRendimiento; empresaVsEmpresa.VarianzaRendimientoY = ListaEmpresa[cont2].VarianzaRendimiento; empresaVsEmpresa.DesviacionRendimientoY = ListaEmpresa[cont2].DesviacionRendimiento; empresaVsEmpresa.VarianzaY = ListaEmpresa[cont2].Varianza; empresaVsEmpresa.ListaPrecioY = ListaEmpresa[cont2].ListaPrecio; empresaVsEmpresa.indiceY = cont2; ListaEmpresaVsEmpresa.Add(empresaVsEmpresa); } } //CALCULAR RENDIMIENTO X POR RENDIMIENTO Y //CALCULAR COVARIANZA primerRegistro = true; foreach (EmpresaVsEmpresa empresaVsEmpresa in ListaEmpresaVsEmpresa) { for (cont = 0; empresaVsEmpresa.ListaPrecioX.Count > cont; cont++) { if (primerRegistro) { primerRegistro = false; empresaVsEmpresa.RendimientoXPorY = 0; } else { empresaVsEmpresa.RendimientoXPorY = empresaVsEmpresa.RendimientoXPorY + ((empresaVsEmpresa.ListaPrecioX[cont].Rendimiento - empresaVsEmpresa.MediaRendimientoX) * (empresaVsEmpresa.ListaPrecioY[cont].Rendimiento - empresaVsEmpresa.MediaRendimientoY)); } } empresaVsEmpresa.Covarianza = empresaVsEmpresa.RendimientoXPorY / (empresaVsEmpresa.ListaPrecioX.Count - 1); } int numEmpresas = ListaEmpresa.Count; EmpresaVsEmpresa empresaVsEmpresaCovarianza = new EmpresaVsEmpresa(); //double covarianza = 0; int indiceX = 0; int indiceY = 0; double[,] matrizVarianzaComp = new double[numEmpresas + 1, numEmpresas + 1]; //GENERAR MATRIZ VARIANZA COVARIANZA for (cont = 0; numEmpresas + 1 > cont; cont++) { for (cont2 = 0; numEmpresas + 1 > cont2; cont2++) { if (cont >= numEmpresas || cont2 >= numEmpresas) { if (cont == cont2) { matrizVarianzaComp[cont, cont2] = 0; } else { matrizVarianzaComp[cont, cont2] = 1; } } else { if (cont == cont2) { matrizVarianzaComp[cont, cont2] = ListaEmpresa[cont].VarianzaRendimiento; } else { if (cont <= cont2) { indiceX = cont; indiceY = cont2; } else { indiceX = cont2; indiceY = cont; } empresaVsEmpresaCovarianza = ListaEmpresaVsEmpresa.Where(n => n.indiceX == indiceX && n.indiceY == indiceY).FirstOrDefault(); if (empresaVsEmpresaCovarianza != null) { matrizVarianzaComp[cont, cont2] = empresaVsEmpresaCovarianza.Covarianza; } } } } } //////////////////////// //2.-PUNTO DE VARIANZA MINIMA GLOBAL //////////////////////// Matrix matrizInversa = new Matrix(matrizVarianzaComp); double[,] matrizInversaFinal = matrizInversa.Inversa(); //MATRIZ B1 DEL PUNTO double[,] B1 = new double[numEmpresas + 1, 1]; for (cont = 0; numEmpresas + 1 > cont; cont++) { if (cont >= numEmpresas) { B1[cont, 0] = 1; } else { B1[cont, 0] = 0; } } //MATRIZ W double[,] matrizW = matrizInversa.ProductoMatrices(matrizInversaFinal, B1); //////////////////////// //3.-TASA DE RENDIMIENTO DEL PORTAFOLIO //////////////////////// //CREAR MATRIZ DE 1X3 double[,] matrizR1x3 = new double[1, ListaEmpresa.Count]; for (cont = 0; ListaEmpresa.Count > cont; cont++) { matrizR1x3[0, cont] = ListaEmpresa[cont].MediaRendimiento; } //CRAR MATRIZ DE 3X1 double[,] matrizR3x1 = new double[ListaEmpresa.Count, 1]; for (cont = 0; ListaEmpresa.Count > cont; cont++) { matrizR3x1[cont, 0] = ListaEmpresa[cont].MediaRendimiento; } //MULTIPLICAR MATRICES DE RENDIMIENTOS Matrix matrizOperacion = new Matrix(); double[,] matrizRendiPortafolio = matrizOperacion.ProductoMatrices(matrizR1x3, matrizR3x1); double rendimientoPortafolio = matrizRendiPortafolio[0, 0]; //////////////////////// //4.-VARIANZA DEL PORTAFOLIO //////////////////////// double[,] matrizVarianza = new double[ListaEmpresa.Count, ListaEmpresa.Count]; for (cont = 0; ListaEmpresa.Count > cont; cont++) { for (cont2 = 0; ListaEmpresa.Count > cont2; cont2++) { matrizVarianza[cont, cont2] = matrizVarianzaComp[cont, cont2]; } } double[,] matrizWS = matrizOperacion.ProductoMatrices(matrizR1x3, matrizVarianza); double[,] matrizVarianzaPorta = matrizOperacion.ProductoMatrices(matrizWS, matrizR3x1); double varianzaPortafolio = matrizVarianzaPorta[0, 0]; double varianzaPortaRaiz = Math.Sqrt(varianzaPortafolio); //////////////////////// //5.-BUSQUEDA DEL CONJUNTO DE PORTAFOLIOS EFICIENTE //////////////////////// //AGREGAR DATOS VARIANZA double[,] matrizV2 = new double[ListaEmpresa.Count + 2, ListaEmpresa.Count + 2]; for (cont = 0; ListaEmpresa.Count > cont; cont++) { for (cont2 = 0; ListaEmpresa.Count > cont2; cont2++) { matrizV2[cont, cont2] = matrizVarianza[cont, cont2]; } } //AGREGAR INFORMACION DEL RENDIMIENTO DE LA MATRIZ 1x3 for (cont = 0; ListaEmpresa.Count > cont; cont++) { matrizV2[ListaEmpresa.Count, cont] = matrizR1x3[0, cont]; } //AGREGAR INFORMACION DEL RENDIMIENTO DE LA MATRIZ 3X1 for (cont = 0; ListaEmpresa.Count > cont; cont++) { matrizV2[cont, ListaEmpresa.Count] = matrizR3x1[cont, 0]; } //RELLENAR CON 1 LA MATRIZ EN EJE X for (cont = 0; ListaEmpresa.Count > cont; cont++) { matrizV2[ListaEmpresa.Count + 1, cont] = 1; } //RELLENAR CON 1 LA MATRIZ EN EJE Y for (cont = 0; ListaEmpresa.Count > cont; cont++) { matrizV2[cont, ListaEmpresa.Count + 1] = 1; } matrizOperacion = new Matrix(matrizV2); double[,] matrizV2Inversa = matrizOperacion.Inversa(); double[,] B2V = new double[ListaEmpresa.Count + 2, 1]; B2V[ListaEmpresa.Count + 1, 0] = 1; //////////////////////// //6.-NUMEROS PORTAFLIO QUE FORMARAN PARTE DE LA CURVA DE VARIANZA MINIMA //////////////////////// List <double> ListaNumeroAleatorio = new List <double>(); Random random = new Random(); double a = random.NextDouble(); a = a / 100; for (cont = 0; 20 > cont; cont++) { ListaNumeroAleatorio.Add(random.NextDouble() / 1000); } ListaNumeroAleatorio = ListaNumeroAleatorio.OrderBy(n => n).ToList(); double[,] W2; List <CurvaVarianza> ListaCurvaVarianza = new List <CurvaVarianza>(); double[,] W2T; listGrupoParametro = new List <GrupoParametro>(); int w = 0; foreach (double valor in ListaNumeroAleatorio) { B2V[ListaEmpresa.Count, 0] = valor; W2 = matrizOperacion.ProductoMatrices(matrizV2Inversa, B2V); double[,] W2Resumen = new double[ListaEmpresa.Count, 1]; for (cont = 0; ListaEmpresa.Count > cont; cont++) { W2Resumen[cont, 0] = W2[cont, 0]; } matrizOperacion = new Matrix(W2Resumen); W2T = matrizOperacion.TranspuestaX(); //OBTENER RENDIMIENTO ASUMIDO double[,] matrizRA = matrizOperacion.ProductoMatrices(W2T, matrizR3x1); double rendimientoAsumido = matrizRA[0, 0]; //OBTENER SIGMA double[,] matrizSigmaA = matrizOperacion.ProductoMatrices(W2T, matrizVarianza); double[,] matrizSigmaB = matrizOperacion.ProductoMatrices(matrizSigmaA, W2Resumen); double sigma = matrizSigmaB[0, 0]; CurvaVarianza curvaVarianza = new CurvaVarianza(); curvaVarianza.Numero = w + 1; curvaVarianza.RendimientoAsumido = rendimientoAsumido; curvaVarianza.Sigma = sigma; curvaVarianza.W = W2T; ListaCurvaVarianza.Add(curvaVarianza); //EMPRESAS for (int l = 0; curvaVarianza.W.Length > l; l++) { //AGREGAR INFORMACION DE LOG listParametroDetalle = new List <Parametro>(); //AGREGAR DETALLE DE LOG parametro = new Parametro(); parametro.Nombre = "Numero"; parametro.Valor = w + 1; listParametroDetalle.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Rendimiento"; parametro.Valor = rendimientoAsumido; listParametroDetalle.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Sigma"; parametro.Valor = sigma; listParametroDetalle.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Usuario"; parametro.Valor = ((Entidades.Usuario)Session["Usuario"]).Login; listParametroDetalle.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Empresa"; parametro.Valor = ListaEmpresa[l].Nombre; listParametroDetalle.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Valor"; parametro.Valor = curvaVarianza.W[0, l].ToString("0.0000##"); listParametroDetalle.Add(parametro); grupoParametro = new GrupoParametro(); grupoParametro.ListGrupoParametro = listParametroDetalle; listGrupoParametro.Add(grupoParametro); } w++; } DataTable dtExportarInformacion = new DataTable(); Session["dtInformacionCapital"] = dtExportarInformacion; if (Session["Usuario"] == null) { resultadoMercadoCapital.Mensaje = "Sesion Expirada"; return(Json(resultadoMercadoCapital, JsonRequestBehavior.AllowGet)); } double minCurvaVarianzaX = 0; minCurvaVarianzaX = ListaCurvaVarianza.Min(n => n.Sigma); dtExportarInformacion.Columns.Add("Numero"); dtExportarInformacion.Columns.Add("Rendimiento_Asumido"); dtExportarInformacion.Columns.Add("Riesgo"); for (cont = 0; ListaEmpresa.Count > cont; cont++) { dtExportarInformacion.Columns.Add(ListaEmpresa[cont].Nombre); } cont = 0; foreach (CurvaVarianza curVarianza in ListaCurvaVarianza) { dtExportarInformacion.Rows.Add(curVarianza.Numero.ToString("0"), curVarianza.RendimientoAsumido.ToString("0.0000##"), curVarianza.Sigma.ToString("0.0000##")); for (cont2 = 0; curVarianza.W.Length > cont2; cont2++) { dtExportarInformacion.Rows[cont][cont2 + 3] = curVarianza.W[0, cont2].ToString("0.0000##"); } cont++; } dtExportarInformacion.Columns.Cast <DataColumn>().ToList().ForEach(n => { encabezadoEmpresa = new EncabezadoEmpresa(); encabezadoEmpresa.Columna = n.ColumnName; ListaEncabezadoEmpresa.Add(encabezadoEmpresa); }); int i = 0; var ListDatos = dtExportarInformacion.Rows.Cast <DataRow>().ToList().Select(n => new DatosMecadoCapital { id = i++, datos = n.ItemArray }).ToList(); resultadoMercadoCapital.ListaEmpresa = ListaEmpresa; resultadoMercadoCapital.ListaEncabezadoEmpresa = ListaEncabezadoEmpresa; resultadoMercadoCapital.ListaCurvaVarianza = ListaCurvaVarianza; resultadoMercadoCapital.ListaCalculoMercadoCapital = ListaCalculoMercadoCapital; resultadoMercadoCapital.ListaDatos = ListDatos.ToList(); //INSERTAR INFORMACION LOG listParametro = new List <Parametro>(); parametro = new Parametro(); parametro.Nombre = "Usuario"; parametro.Valor = ((Entidades.Usuario)Session["Usuario"]).Login; listParametro.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Modulo"; parametro.Valor = "Mercado Capital"; listParametro.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Empresa"; parametro.Valor = string.Join(", ", ListaEmpresa.Select(n => n.Nombre).ToArray()); listParametro.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Resumen"; parametro.Valor = "Generar Estadistico Mercado Capital"; listParametro.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Detalle"; parametro.Valor = "Fecha Inicio: " + strFechaInicio + ", Fecha Final: " + strFechaFinal; listParametro.Add(parametro); //INSERTAR LOG Negocio.Log.Log log = new Negocio.Log.Log(); log.InsertLogCapital(listParametro, listGrupoParametro); resultadoMercadoCapital.Mensaje = "OK"; } catch (Exception ex) { mensaje = "ERROR: Metodo: ObtenerEstadistico_Mercado, Source: " + ex.Source + ", Mensaje: " + ex.Message; ArchivoLog.EscribirLog(null, mensaje); resultadoMercadoCapital.Mensaje = mensaje; } return(Json(resultadoMercadoCapital, JsonRequestBehavior.AllowGet)); }
public JsonResult ObtenerEstadistico(string strFechaInicio, string strFechaFinal, List <CatDivisa> ListCatDivisa) { ResultadoMercadoDivisa resultadoMercadoDivisa = new ResultadoMercadoDivisa(); resultadoMercadoDivisa.ListaDatos = new List <DatosDivisa>(); DatosDivisa datosDivisa = new DatosDivisa(); string seriesID = ""; string fechainicio = ""; string fechafinal = ""; CatDivisa catDivisaDefault = new CatDivisa(); string divisa = string.Empty; List <Parametro> listParametro = new List <Parametro>(); Parametro parametro = new Parametro(); List <GrupoParametro> listGrupoParametro = new List <GrupoParametro>(); GrupoParametro grupoParametro = new GrupoParametro(); List <Parametro> listParametroDetalle = new List <Parametro>(); string mensaje = string.Empty; string Lang = "es-MX";//set your culture here try { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(Lang); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Lang); //Se solicita la información al cliente para definir el código que realizará la petición al API: //string valor = ""; //OBTENER LA DIVISA SELECCIONADA catDivisaDefault = ListCatDivisa.Where(n => !string.IsNullOrEmpty(n.Check)).FirstOrDefault(); if (catDivisaDefault != null) { seriesID = catDivisaDefault.Valor; divisa = catDivisaDefault.Nombre; } else { resultadoMercadoDivisa.Mensaje = "Debe seleccionar por lo menos una moneda."; return(Json(resultadoMercadoDivisa, JsonRequestBehavior.AllowGet)); } fechainicio = Convert.ToDateTime(strFechaInicio).ToString("yyyy-MM-dd"); fechafinal = Convert.ToDateTime(strFechaFinal).ToString("yyyy-MM-dd"); string url = "https://www.banxico.org.mx/SieAPIRest/service/v1/series/" + seriesID + "/datos/" + fechainicio + "/" + fechafinal; ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //Se crea una cadena con los valores que se requiera consumir HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Accept = "application/json; charset=utf-8"; request.Headers["Bmx-Token"] = "6af6e6645653ed1cb3ecb5165c3d30df2d5289600811f7067b2169c9ff030eb4"; //request.Method = "GET"; request.PreAuthenticate = true; HttpWebResponse response = request.GetResponse() as HttpWebResponse; if (response.StatusCode != HttpStatusCode.OK) { throw new Exception(String.Format( "Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription)); } //De esta forma se obtiene el JSON de la respuesta en una cadena. Esta cadena puede ser mapeada a objetos de la siguiente forma: DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Response)); object c = jsonSerializer.ReadObject(response.GetResponseStream()); Response resBan = (Response)c; var uno1 = resBan.seriesResponse.series[0]; //LINQ C# //PARA BUSCAR MAS INFORMACION //var dos1 = uno1.Data.Where(n => (Convert.ToDecimal(n.Data)) > 9).ToList(); if (uno1.Data == null) { resultadoMercadoDivisa.Mensaje = "No Datos"; return(Json(resultadoMercadoDivisa, JsonRequestBehavior.AllowGet)); } var dos1 = uno1.Data.ToList(); DataTable dt1 = new DataTable(); dt1.Columns.Add("Fecha"); dt1.Columns.Add("Valor"); if (Session["Usuario"] == null) { resultadoMercadoDivisa.Mensaje = "Sesion Expirada"; return(Json(resultadoMercadoDivisa, JsonRequestBehavior.AllowGet)); } listGrupoParametro = new List <GrupoParametro>(); int cont = 0; dos1.ForEach(m => { dt1.Rows.Add(m.Date, Convert.ToDouble(m.Data).ToString("0.0000##")); datosDivisa = new DatosDivisa(); datosDivisa.Fecha = m.Date; datosDivisa.Valor = Convert.ToDouble(m.Data); resultadoMercadoDivisa.ListaDatos.Add(datosDivisa); listParametroDetalle = new List <Parametro>(); //AGREGAR DETALLE DE LOG parametro = new Parametro(); parametro.Nombre = "Empresa"; parametro.Valor = divisa; listParametroDetalle.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Fecha"; parametro.Valor = DateTime.ParseExact(m.Date, "dd/MM/yyyy", CultureInfo.CurrentCulture); listParametroDetalle.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Valor"; parametro.Valor = m.Data; listParametroDetalle.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Usuario"; parametro.Valor = ((Entidades.Usuario)Session["Usuario"]).Login; listParametroDetalle.Add(parametro); grupoParametro = new GrupoParametro(); grupoParametro.ListGrupoParametro = listParametroDetalle; listGrupoParametro.Add(grupoParametro); cont++; }); Session["dtInformacionDivisa"] = dt1; //INSERTAR INFORMACION LOG listParametro = new List <Parametro>(); parametro = new Parametro(); parametro.Nombre = "Usuario"; parametro.Valor = ((Entidades.Usuario)Session["Usuario"]).Login; listParametro.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Modulo"; parametro.Valor = "Mercado Divisa"; listParametro.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Empresa"; parametro.Valor = divisa; listParametro.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Resumen"; parametro.Valor = "Generar Estadistico Mercado Divisa"; listParametro.Add(parametro); parametro = new Parametro(); parametro.Nombre = "Detalle"; parametro.Valor = "Fecha Inicio: " + strFechaInicio + ", Fecha Final: " + strFechaFinal; listParametro.Add(parametro); //INSERTAR LOG Negocio.Log.Log log = new Negocio.Log.Log(); log.InsertLogDivisa(listParametro, listGrupoParametro); resultadoMercadoDivisa.Mensaje = "OK"; } catch (Exception ex) { mensaje = "ERROR: Metodo: ObtenerEstadistico_Divisa, Source: " + ex.Source + ", Mensaje: " + ex.Message; ArchivoLog.EscribirLog(null, mensaje); resultadoMercadoDivisa.Mensaje = mensaje; } return(Json(resultadoMercadoDivisa, JsonRequestBehavior.AllowGet)); }