|
import gradio as gr |
|
|
|
title_conpund = "Uninvested Earnings Calculator" |
|
description_conpound = """ |
|
Monthly compound. |
|
""" |
|
|
|
title_ETF1 = "Stock Earnings Calculator" |
|
description_ETF1 = """ |
|
Daily compound is not included. |
|
""" |
|
|
|
title_stock = "Selling price calculator" |
|
description_stock = """ |
|
Calculate Selling Price for a target gain percentage |
|
(after tax deduction (25%) and Trade republic selling fees (1 eur)) |
|
""" |
|
|
|
def greet(name): |
|
return "Hello " + name + "!!" |
|
|
|
|
|
def compound( |
|
initial_investment, |
|
|
|
|
|
yearly_interest_rate, |
|
investment_length, |
|
tax_rate = 0.4 |
|
): |
|
""" " |
|
initial_investment: euro |
|
yearly_interest_rate: percentage |
|
investment_length |
|
tax_rate |
|
""" |
|
gross_earnings = initial_investment * (1 + yearly_interest_rate / 12) ** (investment_length / 12 * 12) - initial_investment |
|
return (gross_earnings * (1-tax_rate)) |
|
|
|
|
|
def ETF_with_price_net_change( |
|
buy_in_price, sell_price, initial_investment, tax_rate=0.4 |
|
): |
|
shares = initial_investment / buy_in_price |
|
earnings = shares * (sell_price - buy_in_price) |
|
stock_change_rate = (sell_price - buy_in_price) / buy_in_price |
|
net_earnings = earnings * (1 - tax_rate) |
|
net_earning_rate = net_earnings / initial_investment |
|
return earnings, net_earnings, net_earning_rate, stock_change_rate |
|
|
|
|
|
def ETF_with_price_change_rate( |
|
initial_investment, buy_in_price, price_change_rate, tax_rate=0.4 |
|
): |
|
shares = initial_investment / buy_in_price |
|
sell_price = buy_in_price * (1 + price_change_rate) |
|
earnings = shares * (sell_price - buy_in_price) |
|
net_earnings = earnings * (1 - tax_rate) |
|
net_earning_rate = net_earnings / initial_investment |
|
return earnings, net_earnings, net_earning_rate |
|
|
|
def stock_sp_calc(buy_in_price, target_gain): |
|
return ((buy_in_price * target_gain/100) + (0.75*buy_in_price) + 1) / 0.75 |
|
|
|
|
|
iface = gr.Interface( |
|
fn=compound, |
|
inputs=[ |
|
gr.Number(label="Initial Investment", precision=2), |
|
gr.Number(label="Yearly Interest Rate", precision=3, step=0.01), |
|
gr.Number(label="Investment Length in Months", precision=0), |
|
gr.Number(0.40, label="Tax Rate", precision=2), |
|
], |
|
outputs=gr.Number(label="Net Earnings", precision=3), |
|
examples=[[5000, 0.04, 1, 0.4], [5000, 0.04, 12, 0.4]], |
|
title=title_conpund, |
|
description = description_conpound |
|
) |
|
|
|
iface2 = gr.Interface( |
|
fn=ETF_with_price_change_rate, |
|
inputs=[ |
|
gr.Number(label="Initial Investment", precision=2), |
|
gr.Number(label="Buy-in Price", precision=2, step=0.01), |
|
gr.Number(label="Price Change Rate", precision=3, step=0.01), |
|
gr.Number(0.40, label="Tax Rate", precision=2), |
|
], |
|
outputs=[ |
|
gr.Number(label="Earnings before Tax", precision=3), |
|
gr.Number(label="Net Earnings", precision=3), |
|
gr.Number(label="Net Earnings Rate", precision=3), |
|
], |
|
examples=[ |
|
[5000, 37.22, 0.10, 0.4], |
|
[500, 20.68, 0.3465, 0.4], |
|
[10000, 80, 0.1136, 0.4], |
|
], |
|
title=title_ETF1, |
|
description = description_ETF1, |
|
) |
|
|
|
iface3 = gr.Interface( |
|
fn=stock_sp_calc, |
|
inputs=[ |
|
gr.Number(label="Buy-in Price", precision=2, step=0.01), |
|
gr.Number(label="Target gain (%)", precision=3, step=0.01), |
|
], |
|
outputs=[ |
|
gr.Number(label="Selling price", precision=3), |
|
], |
|
examples=[ |
|
[33.62, 10], |
|
[440.3, 5], |
|
[3201.4, 4.5], |
|
], |
|
title=title_stock, |
|
description = description_stock, |
|
) |
|
|
|
app = gr.TabbedInterface( |
|
interface_list=[iface, iface2, iface3], |
|
tab_names=["Uninvested earnings", "ETF earnings", "Selling price calculator"], |
|
) |
|
|
|
app.launch() |
|
|