public void AjustarTaxaParaPontosEmDiasNaoUteis(ref IList <CurvaExecucaoPonto> listaVertices, int CodigoModeloCalculo, int tipoVerticeInterpolacao, int interpolacaoID, int baseDias) { int duAnt = 0; if (CodigoModeloCalculo == METODO_AJUST_BASEFATOR || CodigoModeloCalculo == METODO_AJUST_BASETAXA) { ConversorTaxasBS conversor = new ConversorTaxasBS(); if (CodigoModeloCalculo == METODO_AJUST_BASEFATOR) { if (tipoVerticeInterpolacao == VERTICE_INTERPOLACAO_TAXA && interpolacaoID == LINEAR) { //taxaOver = vertices[0].ValorVertice; listaVertices = conversor.ConverterTaxasLinearesParaFatorDiario(listaVertices, baseDias); } else if (tipoVerticeInterpolacao == VERTICE_INTERPOLACAO_TAXA && interpolacaoID == EXPONENCIAL) { //Se tipo de vertice para interpolacao for TAXA e o tipo de interpolacao for Exponencial converter a taxa para fator diário. listaVertices = conversor.ConverterTaxasExponenciaisParaFatorDiario(listaVertices, baseDias); } } for (int i = 0; i < listaVertices.Count; i++) { CurvaExecucaoPonto pontoCurva = listaVertices[i]; //Se quantidade de dias uteis é igual à quantidade de dias uteis anterior, então não é um dia util. if (pontoCurva.QuantidadeDiasUteis == duAnt && duAnt != 0) { for (int j = i + 1; j < listaVertices.Count; j++) { if (listaVertices[j].QuantidadeDiasUteis == duAnt + 1) { duAnt = pontoCurva.QuantidadeDiasUteis; //pontoCurva.QuantidadeDiasUteis = listaVertices[j].QuantidadeDiasUteis; pontoCurva.ValorVertice = listaVertices[j].ValorVertice; break; } } } else { duAnt = pontoCurva.QuantidadeDiasUteis; } } if (CodigoModeloCalculo == METODO_AJUST_BASEFATOR) { if (tipoVerticeInterpolacao == VERTICE_INTERPOLACAO_TAXA && interpolacaoID == LINEAR) { //taxaOver = vertices[0].ValorVertice; listaVertices = conversor.ConverteFatoresDiariosParaLinear(listaVertices, baseDias); } else if (tipoVerticeInterpolacao == VERTICE_INTERPOLACAO_TAXA && interpolacaoID == EXPONENCIAL) { listaVertices = conversor.ConverteFatoresDiariosExponenciais(listaVertices, baseDias); } } } }
private IList <CurvaExecucaoPonto> Interpolar(ref IList <CurvaExecucaoPonto> vertices, Double taxaOver, ref DateTime dataBase, int antepolacaoID, int interpolacaoID, int extrapolacaoID, int baseDias, int tipoVerticeInterpolacao, CalendarioReguaBS calRegua) { IList <CurvaExecucaoPonto> curvaInterpolada; try { if (antepolacaoID == NA) { return(vertices); } int QteDC_Curva = calRegua.NumeroMaxDiasCorridos; curvaInterpolada = new List <CurvaExecucaoPonto>(QteDC_Curva); for (int index = 0; index < QteDC_Curva; index++) { bool isVertice = false; CurvaExecucaoPonto pontoCurva = new CurvaExecucaoPonto(); //Verifica na lista de vertices se o ponto atual é um vertice. foreach (CurvaExecucaoPonto item in vertices) { if (item.QuantidadeDiasCorridos == index) { isVertice = true; pontoCurva = item; pontoCurva.QuantidadeDiasCorridos = index; pontoCurva.DataVencimento = dataBase.AddDays(index); pontoCurva.QuantidadeDiasUteis = calRegua.ObterQuantidadeDiasUteis(pontoCurva.DataVencimento.ToString("yyyyMMdd")); } } //Se não for vertice inclui as informações da curva. if (!isVertice) { pontoCurva.DataVencimento = dataBase.AddDays(index); pontoCurva.QuantidadeDiasCorridos = index; pontoCurva.QuantidadeDiasUteis = calRegua.ObterQuantidadeDiasUteis(pontoCurva.DataVencimento.ToString("yyyyMMdd")); } curvaInterpolada.Add(pontoCurva); } ConversorTaxasBS conversor = new ConversorTaxasBS(); if (antepolacaoID == EXPONENCIAL) { AntepolacaoExponencial(vertices, dataBase, baseDias, curvaInterpolada); } else if (antepolacaoID == LINEAR) { AntepolacaoLinear(vertices, dataBase, baseDias, curvaInterpolada); } if (interpolacaoID == EXPONENCIAL) { InterpolacaoExponencial(vertices, dataBase, baseDias, curvaInterpolada); } else if (interpolacaoID == LINEAR) { InterpolacaoLinear(vertices, dataBase, baseDias, curvaInterpolada); } //else if (interpolacaoID == CUBIC_SPLINE) //{ // listaInterpolacao = InterpolacaoCubicSpline(vertices); //} if (extrapolacaoID == EXPONENCIAL) { ExtrapolacaoExponencial(vertices, dataBase, baseDias, curvaInterpolada); } else if (extrapolacaoID == LINEAR) { ExtrapolacaoLinear(vertices, dataBase, baseDias, curvaInterpolada); } return(curvaInterpolada.ToList()); } finally { calRegua.Dispose(); calRegua = null; } }