Example #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);
                    }
                }
            }
        }
Example #2
0
        public IList <CurvaExecucaoPonto> ConverteFatoresDiariosParaLinear(IList <CurvaExecucaoPonto> listaPontos, int baseDias)
        {
            List <CurvaExecucaoPonto> novaListaPontos = null;
            CurvaExecucaoPonto        novoPonto       = null;

            novaListaPontos = new List <CurvaExecucaoPonto>();

            foreach (CurvaExecucaoPonto curvaExecucaoPonto in listaPontos)
            {
                novoPonto = new CurvaExecucaoPonto();

                novoPonto.DataVencimento         = curvaExecucaoPonto.DataVencimento;
                novoPonto.IndicadorVertice       = curvaExecucaoPonto.IndicadorVertice;
                novoPonto.QuantidadeDiasCorridos = curvaExecucaoPonto.QuantidadeDiasCorridos;
                novoPonto.QuantidadeDiasUteis    = curvaExecucaoPonto.QuantidadeDiasUteis;
                novoPonto.ValorVertice           = curvaExecucaoPonto.ValorVertice;

                // Verifica a quantidade base de dias
                if (baseDias == 252)
                {
                    // Verifica a quantidade de dias corridos
                    if ((curvaExecucaoPonto.QuantidadeDiasUteis != 0))
                    {
                        novoPonto.ValorVertice = (double)100 * ((curvaExecucaoPonto.ValorVertice - 1) * ((double)baseDias / curvaExecucaoPonto.QuantidadeDiasUteis));
                    }
                    else
                    {
                        novoPonto.ValorVertice = 0;
                    }
                }
                else
                {
                    // Verifica a quantidade de dias corridos
                    if ((curvaExecucaoPonto.QuantidadeDiasCorridos != 0))
                    {
                        novoPonto.ValorVertice = (double)100 * ((curvaExecucaoPonto.ValorVertice - 1) * ((double)baseDias / curvaExecucaoPonto.QuantidadeDiasCorridos));
                    }
                    else
                    {
                        novoPonto.ValorVertice = 0;
                    }
                }

                // Adiciona o objeto na lista
                novaListaPontos.Add(novoPonto);
            }

            // Retorna a lista
            return(novaListaPontos);
        }
Example #3
0
        private void InterpolacaoLinear(IList <CurvaExecucaoPonto> vertices, DateTime dataBase, int baseDias, IList <CurvaExecucaoPonto> curvaInterpolada)
        {
            int iAnt, iProx;

            iProx = 0;
            iAnt  = 0;

            for (int i = 0; i < vertices.Count; i++)
            {
                iProx = i;

                //Pula o Primeiro Fator
                if (iProx > 0)
                {
                    for (int j = vertices[iAnt].QuantidadeDiasCorridos + 1; j < (vertices[iProx].QuantidadeDiasCorridos); j++)
                    {
                        CurvaExecucaoPonto pontoCurva = new CurvaExecucaoPonto();

                        if (baseDias == BASE_252)
                        {
                            //Calcula o valor vertice no do ponto interpolado
                            curvaInterpolada[j].ValorVertice = vertices[iAnt].ValorVertice + (vertices[iProx].ValorVertice - vertices[iAnt].ValorVertice) *
                                                               ((double)(curvaInterpolada[j].QuantidadeDiasUteis - vertices[iAnt].QuantidadeDiasUteis) /
                                                                (vertices[iProx].QuantidadeDiasUteis - vertices[iAnt].QuantidadeDiasUteis));
                        }
                        else
                        {
                            //Calcula o valor vertice no do ponto interpolado
                            curvaInterpolada[j].ValorVertice = vertices[iAnt].ValorVertice + (vertices[iProx].ValorVertice - vertices[iAnt].ValorVertice) *
                                                               ((double)(curvaInterpolada[j].QuantidadeDiasCorridos - vertices[iAnt].QuantidadeDiasCorridos) /
                                                                (vertices[iProx].QuantidadeDiasCorridos - vertices[iAnt].QuantidadeDiasCorridos));
                        }
                    }
                }
                iAnt = iProx;
            }
        }
Example #4
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;
            }
        }