Пример #1
0
        public virtual IList <CurvaExecucaoPonto> Interpola(IList <CurvaExecucaoPonto> vertices, Double taxaOver, DateTime dataBase, int dataMaxGeracaoCurva, int antepolacaoID, int interpolacaoID, int extrapolacaoID, int baseDias, int tipoVerticeInterpolacao)
        {
            IEnumerable <CurvaExecucaoPonto> EnumList = vertices.OrderBy(f => f.QuantidadeDiasCorridos);

            vertices = EnumList.ToList();

            ServicoBloomberg.ServicoConsultarPrecoClient clienteBloomberg = new ServicoBloomberg.ServicoConsultarPrecoClient();
            double valorBloomberg = clienteBloomberg.Consultar(string.Empty);

            ServicoReuters.ServicoConsultarPrecoClient clienteReuters = new ServicoReuters.ServicoConsultarPrecoClient();
            double valorReuters = clienteReuters.Consultar(string.Empty);

            CalendarioReguaBS calRegua;

            int      QteDiasCorridos_Vertice = vertices[vertices.Count - 1].QuantidadeDiasCorridos;
            DateTime DataFinal         = dataBase.AddYears(dataMaxGeracaoCurva);
            DateTime DataFinalVertices = dataBase.AddDays(QteDiasCorridos_Vertice);

            //verifica se o prazo em dias corridos informado no ultimo vertice da curva é maior que a extensão da curva.
            if (DataFinalVertices > DataFinal)
            {
                calRegua = new CalendarioReguaBS(dataBase, DataFinalVertices);
            }
            else
            {
                calRegua = new CalendarioReguaBS(dataBase, DataFinal);
            }

            return(Interpolar(ref vertices, taxaOver, ref dataBase, antepolacaoID, interpolacaoID, extrapolacaoID, baseDias, tipoVerticeInterpolacao, calRegua));
        }
Пример #2
0
        public virtual CalendarioReguaBS ObterIntervalo(DateTime dataInicio, DateTime dataFim)
        {
            Dictionary <string, DiaInfo> regua = (from dia in Regua
                                                  where dia.Value.Data >= dataInicio &&
                                                  dia.Value.Data <= dataFim
                                                  orderby dia.Value.Data
                                                  select dia).ToDictionary(dia => dia.Key, dia => dia.Value);
            CalendarioReguaBS calendarioIntervalo = new CalendarioReguaBS(regua, dataInicio, dataFim);

            return(calendarioIntervalo);
        }
Пример #3
0
        public IList <CurvaExecucaoPonto> InterpolarTunel(IList <CurvaExecucaoPonto> vertices, Double taxaOver, DateTime dataBase, int extensaoDiasCorridos, int antepolacaoID, int interpolacaoID, int extrapolacaoID, int baseDias, int tipoVerticeInterpolacao)
        {
            IEnumerable <CurvaExecucaoPonto> EnumList = vertices.OrderBy(f => f.QuantidadeDiasCorridos);

            vertices = EnumList.ToList();

            DateTime DataFinalVertices = dataBase.AddDays(extensaoDiasCorridos);

            CalendarioReguaBS calRegua = new CalendarioReguaBS(dataBase, DataFinalVertices);

            return(Interpolar(ref vertices, taxaOver, ref dataBase, antepolacaoID, interpolacaoID, extrapolacaoID, baseDias, tipoVerticeInterpolacao, calRegua));
        }
Пример #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;
            }
        }