Sådan automatiseres prognoser for din pension portefølje

Da jeg først startede med at lære programmering, troede jeg altid, at det ville være dejligt at bruge det til at hjælpe mig med at tage beslutninger om, hvordan jeg bedst kunne styre min økonomi.

Dette er det første skridt i det.

I denne tutorial lærer du, hvordan du får reelle økonomiske data om finansielle instrumenter (i dette tilfælde er det aktier og indeksfonde). Så tag disse data og opret Monte Carlo-simuleringer for at forudsige det potentielle fremtidige afkast af det instrument, som vi derefter vil bruge til at kombinere i en portefølje.

Lad os komme igang.

Før vi skriver Python-koden, opretter vi en simpel konfigurationsfil med vores portefølje i. Dette vil være i JSON-format.

Nedbryder dette.

Vi har et porteføljeobjekt, som kun er en række objekter, som jeg vil referere til som 'aktier' i hele denne artikel.

Hver af lagrene i denne fil har fire egenskaber.

Tickeren er det symbol, der kan bruges til at hente data fra bestanden. Da vi kun beskæftiger os med aktier og indekser i denne artikel, er der kun to datakilder at bekymre os om. Yahoo for aktier og Stooq for indekser.

For at få tickers for lagrene gå til https://uk.finance.yahoo.com/ og søg efter navnet på det firma, du ønsker at få data til. I eksemplet med Lloyds Banking Group, der er en bestanddel af FTSE 100, vises det af Yahoo anvendte ticker i parentes som 'LLOY.L': https://uk.finance.yahoo.com/quote/LLOY.L ? p = LLOY.L & .tsrc = finne-tre-SRCH

For at få tickerne for de indekser, du vil inkludere i din portefølje, skal du gå til https://stooq.com/t/ og søge efter det indeks, du er interesseret i. I tilfælde af FTSE 250 er tickeren '^ FTM '. Bemærk ^, der er en del af tickeren.

Den næste egenskab i disse objekter er instrumentets navn, som vi ikke har brug for til den analyse, vi skal gøre i denne tutorial, men det er en nyttig etiket, og vi vil bruge det i fremtidige tutorials.

Så har vi instrumenttypen, som i tilfælde af denne tutorial enten er et 'lager' eller 'indeks'. Denne egenskab vil blive brugt til at differentiere at hente dataene fra forskellige kilder.

Endelig har vi vægten af ​​aktien i porteføljen, som er procentdelen af ​​den portefølje, der er sammensat af det bestemte instrument. Hvis du for eksempel havde en portefølje på 100 £ sammensat af £ 40 på lager A og £ 60 på lager B, ville vægterne være lager A = 40% (0,4) og lager B = 60% 0,6.

Lad os komme ned på en Python-kode!

Her er den import, vi har brug for.

Bemærk, at du har brug for en version af pandas_datareader, der er højere end 0.7.0. I mit tilfælde har jeg brugt version 0.8.1.

Den første ting, der bemærkes her, er den første linje, der angiver, hvilken kodning vi bruger. Dette vil give os mulighed for at udsende pundsymbolet eller dollarsymbolet uden at python stønner om, at de er ikke-ascii-tegn.

Dernæst opretter vi en række globale variabler (globale, mere på grund af bekvemmelighed og lethed med at ændre værdierne på et senere tidspunkt, hvis vi ønsker det).

Dernæst kan vi oprette en simpel funktion til at indlæse JSON-dataene og oprette en dataramme med hver egenskab af lagerobjekter repræsenteret som kolonne i datarammen. Vi tilføjer også en kolonne kaldet returnerer med .assign-metoden. som derefter udfyldes med en inline for loop (hvor pythonisk!)

Men Shane, hvad er den get_data-funktion?

Godt plettet squire! Lad os oprette det nu.

Jeg skal bemærke, at dette, hvis udsagn, ikke er den bedste idé fra et designmæssigt synspunkt, fordi det kan blive unødvendigt komplekst og vanskeligt at vedligeholde, hvis vi begynder at tilføje nye datakilder og lagertyper. Imidlertid var det den enkleste løsning, og jeg vil holde denne tutorial så enkel som muligt.

Alt hvad vi gør i denne metode er at bruge pandas_datareader-bibliotekets DataReader-funktion til at hente dataene om de instrumenter, der er i vores porteføljer. Bemærk, at for indekstypen får vi kolonnen ['Luk'], og for bestanden får vi kolonnen ['Adj Luk']. Dette skyldes, at lagrene kan være opdelt (eller omvendt opdelt).

En aktiesplit er, når et selskab beslutter at optage en aktie og opdele det i et vist antal (eller i tilfælde af reserveopdelinger vil lagrene blive kombineret). Antag f.eks., At vi har et selskab med en markedsværdi på £ 1 million med 100.000 udestående aktier. Dette betyder, at hver aktie er værd £ 10 (1.000.000 / 100.000 = 10). Hvis ledelsen i virksomheden beslutter at opdele aktien i 2 som et eksempel, er der nu 200.000 udestående aktier. Betyder det, at selskabets markedsværdi nu er 2 millioner pund gennem en vis økonomisk alkymi? Ingen.

Tænk på at skære en pizza, vi du deler den i 8 stykker, er der nu mere end 1 pizza? Nej, der er bare flere mindre dele. Det er det samme med aktier. Virksomhedens værdi vil forblive konstant (ignorering af markedsreaktioner på virksomhedernes beslutning om at opdele aktien). Dette betyder, at aktiekursen vil ændre sig til £ 5 pr. Aktie (1.000.000 / 200.000 = 5), og alle ejere af aktien vil eje dobbelt så mange aktier, de tidligere havde, men aktierne er værd halvdelen af ​​den værdi, de tidligere var , så deres beholdning ikke har ændret sig i værdi.

Det justerede lukke normaliserer virkningen af ​​disse ændringer i aktiekursen. Så vi har ikke tilfældige spring eller fald på sige 50%, som ikke er tegn på reelle prisændringer. Årsagen til at vi får kolonnen 'Luk' for indekserne er fordi de ikke er påvirket af sådanne ændringer. Indekser opdeles ikke.

Derefter skal vi gå ind i kødet i denne tutorial og køre Monte Carlo-simuleringen. For dette trin har jeg kommenteret hver kodelinje for at gøre det så klart som muligt.

Endelig, lad os beregne det forventede afkast af porteføljen som en helhed, der tegner sig for vægten af ​​porteføljemedlemmernes individuelle bestanddele.

Med dette kan vi beregne den forventede endelige værdi af porteføljen og den indkomst, som vi kan forvente af den (ved hjælp af 4% -udtrækningsreglen). Det er på den sidste linje.

I øjeblikket skal du være i stand til at simulere en potentiel pensionsportefølje.

Der er flere ting, som jeg har udeladt denne tutorial i et forsøg på at holde tingene enkle:

  • Regnskab for inflation
  • Redegørelse for tilføjelse af opsparing
  • Genbalancering af porteføljen, mens vi går
  • Regnskab for udbytte
  • Bedre analyse af resultaterne - for eksempel at køre simuleringen mere end én gang. Midler, kønssygdomme, min, max osv.
  • Måling og bogføring af risiko

Jeg håber at lukke disse huller med yderligere tutorials.

Hvis du vil se sammen med videoen, der ledsager denne artikel:

Forhåbentlig har du fundet dette interessant og nyttigt.

Hvis du har spørgsmål eller har nogen feedback (bestemt velkommen!), Så lad en kommentar nedenfor, eller du kan finde mig på:

  • http://youtube.com/shaneLeeCoding
  • https://github.com/ShaneLee
  • https://codeyogi.co.uk/