Kod för att ladda hem historisk fonddata?

Hej

Har sett vissa inlägg, men inget klockrent som jag fått att funka. Vet någon om / vart det kan finnas google sheet / python eller liknande för att ladda hem historiska fondkurser från avanza, nordnet eller di? Dagskurs har jag fått att funka, men vill som sagt kunna dra hem all historik från en specifik fond.

Rör det sig om en eller enstaka fond?
Om det rör sig om få kan du hämta det manuellt via SHB, givet att din fond finns hos dem.

5 gillningar

Några enstaka, ska ladda upp kurser på https://portfolioslab.com/ för att kunna testa några strategier. Just dom instrumenten jag har finns det inget bra jämförelseindex till, så måste få hem data. Också för att verifiera att vissa USA EFTer är “korrekt” ersatta med vissa fonder / EU ETFer.

Handelsbanken verkar bara ha 5års historik tillgänglig, eller fattar jag inte sidan ?

Möjligt, jag har endast hämtat hem upp till tre år och inte testat 5+

Varierar, för flera fonder finns det kurser från start vilket kan vara uppemot 40 års historik.

1 gillning

Det visade sig att man var tvungen att gå in och välja startdatum, annars blev det det 5år… Så det löste sig för den fonden jag just nu var ute efter . Men grundfrågan kvarstår just för att ha flexibiliteten, ett script för avanza där man bara ändrar “fondnummer” skulle vara guld värt.

Du ska alltså använda historien för att försöka förutspå framtiden?

Nu vet jag inte ifall du tillhör indexfond-sekten, men är det inte just det man gör ifall man anser att en global indexfond är den bästa investeringen?

2 gillningar

Nej, på båda dina intressanta missförstånd.

Själv skulle jag gärna dra in senaste NAV för fonder till google spreadsheet, är det någon som har en lösning för detta? Alltså att detta görs per automatik.

Jag vet inte hur bekväm du är med att programmera i Python men det finns flera olika sätt att hämta hem den datan du söker. Det jag har använt mig är pandas_datareader.data och sedan f = web.DataReader(fonder, ‘yahoo’, start, end)
Data = f[‘Adj Close’]. Det denna förenklade “kommandonen” gör är att hämta hem senaste “close” priset för de olika fonderna som du definierar variabeln “fonder” till. Dessa måste dock finnas på Yahoo finance där man hämtar informationen ifrån och de olika värden (tickers) måste ha samma namn som de i Yahoo finance ex. Apple → AAPL. Utöver detta krävs en större mängd kod för att få visualiseringarna rätt, där man kan använda diverse visualiserings pandas ex. matplotlib.

Detta är ett axplock av vad man behöver göra, vad jag vet, för att få hem den datan du är ute efter. Men om du har intresset rekommenderar jag starkt att du skriver egen kod för ditt finansintresse. Jag hade tidigare själv en raspberry pi där jag mer eller mindre byggde en enklare variant av portfoliovisualiser vilket var väldigt stimulerande men tidskrävande. Så kontentan från mig är att om du har intresset så går det att hämta hem historisk data från nätet med Python. Om det är enklare statiska analyser finns det nog smartare sätt att arbeta på dock.

På A svarar jag att jag inte hade delgivit någon åsikt och därmed kan det inte föreligga något missförstånd. På B svarar jag att jag inte anser mig ha missförstått.

Jag förstår aldrig detta påstående om att motiveringar för indexinvestering har någon form av beroende av historiken.

Nej anledningarna till att investera i index har ingen koppling till historisk avkastning.

Håll er till ämnet. /Mod

Man verkar kunna plocka ut datan som visas i Avanzas grafer relativt enkelt. Spiltan Aktiefond Investmentbolag till exempel, med “nummer” 325406 kan man få med request URL https://www.avanza.se/_api/fund-guide/chart/325406/infinity. x-värdena är UTC timestamps och y-värdena är uppgången i procent på valt tidsintervall. Andra tidsintervall kan man få genom att byta “infinity” mot “five_years”, “three_years”, “one_year”, “this_year”, “three_months” eller “one_month”. Tyvärr är det ju bara data på en månads intervall när man väljer infinity, en veckas intervall på upp till fem år, och daglig på upp till ett år gammal data, men det kanske räcker.

Liknande på DI, och där får man 10 års data på veckobasis. Samma fond blir där https://www.di.se/market/instrument-history/292508/.

2 gillningar

Här är en funktion jag skev för något år sedan för att ladda ned historiska data från avanza.

def download_avanza(fondnamn: str, startdatum: Union[str, date] = None, slutdatum: Union[str, date] = None):
    """Download historical data from Avanza"""
    if startdatum is None:
        startdatum = date.fromisoformat("1980-01-01")
    elif isinstance(startdatum, str):
        startdatum = date.fromisoformat(startdatum)
    if slutdatum is None:
        slutdatum = date.today()
    elif isinstance(slutdatum, str):
        slutdatum = date.fromisoformat(slutdatum)

    years = range(startdatum.year, slutdatum.year+1)

    hist = pd.DataFrame([], columns=["y"])
    for year in years:
        response = requests.get(f"https://www.avanza.se/_api/fund-guide/chart/{fondnamn}/{year}-01-01/{year}-12-31?raw=true")
        df = pd.DataFrame(response.json()["dataSerie"])
        if not df.empty:
            df.set_index(pd.to_datetime(df.pop("x"), unit="ms", utc=True), inplace=True)
            hist = pd.concat([hist, df])
    price = hist
    price.index = price.index.date
    price = price.reindex(index=pd.date_range(startdatum, slutdatum))
    price.interpolate(inplace=True)
    price.columns = ["price"]
    price.index.name = "date"
    return price

Jag tankar helt enkelt hem varje år inom spannet för sig och syr ihop datan till en serie.

2 gillningar

Tack för ditt bidrag! Det gjorde att jag till slut fick tag i de data jag sökte. Dock verkar länken vara inaktuell, så här är en mer aktuell variant för den som söker i framtiden.

Jag lyckades just ladda hem data med start från 2017, så det kan nog kanske bero på vilket instrument (fond) det rör sig om:

1 gillning