Calculadora da Taxa Interna de Retorno - TIR no Python

Volta ao Menu

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)