Calculadora da Taxa Interna de Retorno - TIR no Python
import numpy_financial as npf import pandas as pd from sympy import Symbol def TIR08(lista): "Argumentos: lista de listas" #Convertendo a lista em dataframe df = pd.DataFrame(lista, columns = ["Ano", "Fluxo de Caixa"]) print(df) #Definindo um símbolo para taxa de juros i = Symbol("i") #Calculando o valor presente df["VP"] = (df["Fluxo de Caixa"])/((1+i)**df["Ano"]) print(df) #Explicitando a conta que estamos fazendo. eq = df["VP"].sum() print("\nA conta é:", eq, "= 0") #Criando uma lista com os fluxos de caixa a partir #da lista original: fluxos = [fluxo[1] for fluxo in lista] print("\nOs fluxos de caixa são: ", fluxos) #Calculando a TIR TIR = npf.irr(fluxos) print("\nA TIR é: ", round(100*TIR,2), "%") #Criando uma lista com os dados. #A lista deve ser composta por sublistas #contendo a data e o fluxo na data. lista08 = [[0,-800], [1, 200], [2, 250], [3, 300], [4, 350], [5, 400]] TIR08(lista08)
import numpy_financial as npf import pandas as pd from sympy import Symbol def TABLE09(lista, i): #Convertendo a lista em dataframe df = pd.DataFrame(lista, columns = ["Ano", "Fluxo de Caixa"]) print(df) #Calculando o valor presente df["VP"] = (df["Fluxo de Caixa"])/((1+i)**df["Ano"]) print(df) #Soma dos valores presentes VPL= df["VP"].sum() print("Valor Presente: ", round(VPL,2)) #Criando uma lista com os dados. #A lista deve ser composta por sublistas #contendo a data e o fluxo na data. lista_09 = [[0,-800], [1, 200], [2, 250], [3, 300], [4, 350], [5, 400]] TABLE09(lista_09, 0.12)
import numpy_financial as npf import pandas as pd from sympy import Symbol def TIR10(lista): df = pd.DataFrame(lista, columns = ["Ano", "Fluxo de Caixa"]) print(df) for j in range(-10000, 10001): i = j/10000 df["VP"] = (df["Fluxo de Caixa"])/((1+i)**df["Ano"]) VPL = df["VP"].sum() if -0.1<= VPL <=0.1: print("\nUma Aproximação Para a TIR é: ", i*100,'%') #Criando uma lista com os dados. #A lista deve ser composta por sublistas #contendo a data e o fluxo na data. lista_10 = [[0,-800], [1, 200], [2, 250], [3, 300], [4, 350], [5, 400]] TIR10(lista_10)
import numpy_financial as npf import pandas as pd from sympy import Symbol def TIR11(lista): "Argumentos: lista" #Criando uma lista com os fluxos de caixa a partir #da lista original: fluxos = [fluxo[1] for fluxo in lista] print("Os fluxos são: ", fluxos) #Calculando a TIR com a função do numpy_financial tir = npf.irr(fluxos) print("\nTIR: ", tir) #Criando o fluxo de caixa ao final de um ano FCfa = [fluxo[1] for fluxo in lista[1:]] print("\nOS fluxos de caixa são: """, FCfa) #Criando a lista Investimento no início do ano. #Adicionaremos novos valores a ela a medida que #formos iterando sobre ela. Iia = [-lista[0][1]] #Pega o valor 800 #Criando as listas de renda e retorno ao principal. #A cada iteração, novos valores serão adicionados. RENDIMENTO = [] Retorno_do_Principal = [] for (fcfa, iia) in zip(FCfa, Iia): rendimento = iia*tir RENDIMENTO.append(rendimento) retorno_do_principal = fcfa - rendimento Retorno_do_Principal.append(retorno_do_principal) iial = iia - retorno_do_principal Iia.append(iial) ANO = list(range(1,len(lista)+1)) pd.set_option('display.max_columns', None) #Faz com que todas as colunas sejam impressas, sem truncagem. pd.set_option('display.max_rows', None) df1 = pd.DataFrame({"Ano": pd.Series(ANO), "Investimento no Início do Ano": round(pd.Series(Iia),2), "Fluxo de Caixa no Final do Ano": round(pd.Series(FCfa),2), "Renda": round(pd.Series(RENDIMENTO),2), "Retorno do Principal" : round(pd.Series(Retorno_do_Principal),2)}) print(df1) print("\nO investimento após o último período é: ", round(df1.iloc[-1, 1],2)) #Criando uma lista com os dados. #A lista deve ser composta por sublistas #contendo a data e o fluxo na data. lista_11 = [[0,-800], [1, 200], [2, 250], [3, 300], [4, 350], [5, 400]] TIR11(lista_11)
import numpy_financial as npf import pandas as pd from sympy import Symbol def TIR12(lista): "Argumentos: lista" #Criando uma lista com os fluxos de caixa a partir #da lista original: fluxos = [fluxo[1] for fluxo in lista] #Calculando a TIR pela função do numpy para fins de comparação. TIR = npf.irr(fluxos) print("\nTIR usando npf.irr(): ", round(TIR*100,3), '%') #Parte importante: for j in range(-100000, 100001): Iia = [-lista[0][1]] RENDIMENTO = [] Retorno_do_Principal = [] FCfa = [fluxo[1] for fluxo in lista[1:]] i = j/100000 for (fcfa, iia) in zip(FCfa, Iia): rendimento = iia*i RENDIMENTO.append(rendimento) retorno_do_principal = fcfa - rendimento Retorno_do_Principal.append(retorno_do_principal) iial = iia - retorno_do_principal Iia.append(iial) if -0.01 <= Iia[-1] <= 0.01: print("\nTIR usando a tabela de empréstimo: ", round(i*100,3),'%') #Criando uma lista com os dados. #A lista deve ser composta por sublistas #contendo a data e o fluxo na data. lista_12 = [[0,-1000], [1, 300], [2, 200], [3, 150], [4, 600], [5, 900]] TIR12(lista_12)