Författare Ämne: Historisk data  (läst 258 gånger)

mrFIRE

  • Global moderator
  • Fullständig medlem
  • *****
  • Antal inlägg: 195
    • Visa profil
Historisk data
« skrivet: 26 juni 2018 kl. 13:05:53 »
Jag är nyfiken hur det hade sett ut om jag börjat spara pengar på börsen tidigare i livet. Någon som vet om det finns något bra sida/hjälpmedel för att beräkna hur det hade gått om man investerat typ 5000 kr/mån sen säg 2008 och följt typ S&P 500-index utveckling ?

vooneivo

  • Nykomling
  • *
  • Antal inlägg: 17
    • Visa profil
SV: Historisk data
« Svar #1 skrivet: 28 juni 2018 kl. 13:25:55 »
Känner inte till något sådant verktyg, men jag hackade ihop ett skript som gör detta:

Kodstycke: [Välj]
#!/usr/bin/python3

import pandas as pd
import numpy as np
from datetime import datetime
import argparse

def mean_roi(historical_prices, start, stop, fmt='%Y-%m-%d'):
    start = closest_date(historical_prices.index, start, fmt)
    stop = closest_date(historical_prices.index, stop, fmt)
    roi = historical_prices.Close[stop] / historical_prices.Close[start]
    years = (stop - start).days / 365.25
   
    return 10**(np.log10(roi) / years) - 1, years

def closest_date(index, date, fmt):
    date = datetime.strptime(date, fmt)
    closest_idx = index.searchsorted(date)-1

    return index[closest_idx]
   
def compound_interest(principal, monthly_savings, years,
                      annual_interest=0.07, compounding='monthly'):
    if compounding=='annual':
        interest = annual_interest
        periods = np.arange(years + 1)
        savings = monthly_savings * 12
    elif compounding=='quarterly':
        interest = (1 + annual_interest)**(1/4) - 1
        periods = np.arange(years * 4 + 1)
        savings = monthly_savings * 3
    elif compounding=='monthly':
        interest = (1 + annual_interest)**(1/12) - 1
        periods = np.arange(years * 12 + 1)
        savings = monthly_savings
    elif compounding=='daily':
        interest = (1 + annual_interest)**(1/365) - 1
        periods = np.arange(years * 365 + 1)
        savings = monthly_savings / 30
    else:
        raise ValueError('Unsupported compounding frequency: %s' % compounding)

    time = periods / max(periods) * years
    invested = savings * periods
    return ((1 + interest)**periods * principal + savings *
            ((1 + interest)**periods - 1) / interest), time, invested


historical_prices = pd.read_csv('^GSPC.csv', index_col=0, parse_dates=True)

parser = argparse.ArgumentParser()
parser.add_argument('principal', nargs=1, type=int)
parser.add_argument('monthly_savings', metavar='monthly-savings', nargs=1,
                    type=int)
parser.add_argument('start_date', metavar='start-date')
parser.add_argument('stop_date', metavar='stop-date', nargs='?',
                    default=datetime.strftime(datetime.today(), '%Y-%m-%d'))
args = parser.parse_args()

roi, years = mean_roi(historical_prices, args.start_date, args.stop_date)
networth, time, invested = compound_interest(args.principal, args.monthly_savings, years, roi)

print(networth[-1])


Skriptet körs med
Kodstycke: [Välj]
python3 s_and_p500.py  startvärde månadssparande startdatum [slutdatum]där [slutdatum] antas vara dagens datum om det inte anges.

T.ex.
Kodstycke: [Välj]
python3 s_and_p500.py 0 5000 '2008-01-01'ger hur mycket ett månadssparande om 5 000 kr sedan början av 2008 skulle vara värt idag. Svaret är knappt 900 000 kr, varav ca 50% är avkastning.

Skriptet behöver ha filen ^GSPC.csv i samma mapp för att fungera. Den innehåller historiska data på S&P500 från Yahoo Finance: https://finance.yahoo.com/quote/%5EGSPC?ltr=1.

mrFIRE

  • Global moderator
  • Fullständig medlem
  • *****
  • Antal inlägg: 195
    • Visa profil
SV: Historisk data
« Svar #2 skrivet: 15 augusti 2018 kl. 12:39:01 »
Jisses! Grymt! Tack!
Ska ta och laborera själv vid tillfälle, saknar verkligen att programmera !

mrFIRE

  • Global moderator
  • Fullständig medlem
  • *****
  • Antal inlägg: 195
    • Visa profil
SV: Historisk data
« Svar #3 skrivet: 11 september 2018 kl. 11:26:30 »
Fick följande felmeddelande när jag försöker köra skriptet:

Kodstycke: [Välj]
Traceback (most recent call last):
  File "s_and_p500.py", line 3, in <module>
    import pandas as pd
ModuleNotFoundError: No module named 'pandas'

Vad innebär det? Har tyvärr aldrig använt python tidigare så känner mig som en noob.