protected double Fator(ICDI cdi, DateTime naData) { var fator = 1.0; var taxas = _taxasDIOver .Where(t => t.Data >= cdi.DataDaAplicacao && t.Data < naData) .Select(t => t.Taxa).ToList(); foreach (var diOver in taxas) { var fatorDiario = (Math.Pow((1.0 + diOver), (1.0 / 252.0)) - 1); fator *= (fatorDiario * cdi.Taxa) + 1; } return(fator); }
protected double ValorIOF(ICDI cdi, DateTime naData) { var rendimentoBruto = ValorBruto(cdi, naData) - ValorAplicado(cdi); return(ValorIOF(rendimentoBruto, cdi, naData)); }
protected double ValorIOF(double rendimentoBruto, ICDI cdi, DateTime naData) { var dias = (int)((naData - cdi.DataDaAplicacao).TotalDays); return(ValorIOF(rendimentoBruto, dias)); }
protected double RendimentoBruto(ICDI cdi, DateTime naData) => RendimentoBruto(ValorBruto(cdi, naData), ValorAplicado(cdi));
protected double ValorBruto(ICDI cdi, DateTime naData) { return(Fator(cdi, naData) * cdi.PrecoUnitario * cdi.Quantidade); }
protected double ValorAplicado(ICDI cdi) => cdi.PrecoUnitario * cdi.Quantidade;