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)); }
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); }
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)); }
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; } }