Skip to content

Instantly share code, notes, and snippets.

@bjodah
Created February 6, 2020 13:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bjodah/94f6ad001d5c0a10f92c765ae3a03474 to your computer and use it in GitHub Desktop.
Save bjodah/94f6ad001d5c0a10f92c765ae3a03474 to your computer and use it in GitHub Desktop.
import math
import datetime
from functools import reduce
MÅNADER_PER_ÅR = 12
DAGAR_PER_ÅR = 365.25
DAGAR_PER_MÅNAD = DAGAR_PER_ÅR / MÅNADER_PER_ÅR
def årlig_tillväxt_i_procent_uttryckt_som_faktor_per_månad(x_procent):
# y**12 == 1 + årlig_aktie_avkastning_procent/100
# log(y) = log(1 + årlig_aktie_avkastning_procent/100)/12
return (1+x_procent/100)**(1/MÅNADER_PER_ÅR)
def pensions_kalkyl(
födelsedatum="1986-05-17",
pensionsålder=55,
startkapital=2e5,
årlig_aktieavkastning_procent=8.45,
månatligt_sparande=1e4,
statslåneräntan_procent=-0.09,
):
pensionsdatum = datetime.date(*map(int, födelsedatum.split('-'))) + datetime.timedelta(days=DAGAR_PER_ÅR*pensionsålder)
månader_till_pension = math.ceil((pensionsdatum - datetime.date.today()).days / DAGAR_PER_MÅNAD)
schablonintäkt_procentsats = max(1.25, 1 + statslåneräntan_procent)
månatlig_koefficient = årlig_tillväxt_i_procent_uttryckt_som_faktor_per_månad(årlig_aktieavkastning_procent)
förmögenhet = startkapital
kapitalunderlaget = 0
for i in range(månader_till_pension):
förmögenhet *= månatlig_koefficient
förmögenhet += månatligt_sparande
if (i % 3) == 0: # nytt kvartal, addera till kapitalunderlag
kapitalunderlaget += 0.25 * förmögenhet
if (i % MÅNADER_PER_ÅR) == 0: # dags för skatt ungefär var 12e månad
schablonintäkt = schablonintäkt_procentsats/100 * kapitalunderlaget
kapitalunderlaget = 0
schablonskatt = 0.30 * schablonintäkt
förmögenhet -= schablonskatt
print('Pension vid {p}, förmögenhet {fM:.2f} MSEK (jämför bankkonto {bk:.2f} MSEK), "lön": {lön:.2f} SEK/månad'.format(
p=pensionsålder,
fM=förmögenhet/1e6,
bk=(startkapital+sum([månatligt_sparande]*månader_till_pension))/1e6,
lön=förmögenhet*(månatlig_koefficient-1)
))
if __name__ == '__main__':
import argh
argh.dispatch_command(pensions_kalkyl)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment