예제 #1
0
        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);
                    }
                }
            }
        }
예제 #2
0
        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;
            }
        }