Predavanje 22: Primene, Glava 4

FlipView[{Text[Style[" Branko Urošević, imqfbrankourosevic@gmail.com ",20,"Text",Italic]],Text[Style[" Faculty of Economics, University of Belgrade, NBS and CESIfo Munich",20,"Text", Italic]]}]

4. Portfolio optimizacija u WL

1. Pripremne radnje

Početna razmatranja

Ideja portfolio optimizacije je sledeća. Investitori žele da imaju što veću očekivanu zaradu po jedinici uloženog novca (to jest, što veći očekivani prinos) a da pri tome preuzmu što manji rizik. Rizik se najčešće meri kao stadardna devijacija prinosa.

Ako očekujemo veći prinos morati da preuzmemo i veći rizik. Cilj je da to radimo optimalno, to jest da za zadati nivo rizika ostvarimo što veći očekivani prinos ili, ekvivalentno, da za zadati očekivani prinos preuzmemo što manji rizik.

Prinos merimo kao kapitalnu dobit. Naime, ukoliko je vrednost naše početne investicije bila p0 evra a sada sada vredi p1 evra, prinos bi bio (ovde i do kraja predavanja ignorišemo dividende radi jednostavnosti):

(((p1-p0))/p0)

Podaci o cenama akcija mogu se dobiti direktno u WL preko FinancialData funkcije. Evo kako možemo da dobijemo podatke o ceni akcije General Electric (tiker simbol “GE”) za period od 10. do 15. marta 2005.

proba=FinancialData["GE",{{2005,3,10},{2005,3,15}}]

Za svaki dan podatak se sastoji liste koja odgovara godini, mesecu i dan i, drugo, od cene GE akcije na kraju tog dana (to je po defoltu, a možemo dobiti puno raznih drugih podataka).

Konstrukcija i dekonstrukcija vremenskih serija

Biće nam korisno da od ovih podataka napravimo vremensku seriju koristeći TimeSeries funkciju:

probaserija=TimeSeries[proba]

cene1=probaserija["Values"]

prinos1=((Differences[cene1])/(Most[cene1]))

Differences[cene1]

Most[cene1]

Differences[{p1,p2,p3,p4}]

Most[{p1,p2,p3,p4}]

((Differences[{p1,p2,p3,p4}])/(Most[{p1,p2,p3,p4}]))

Differences[{p1,p2,p3,p4}]

probaserija["Times"]

Kada želimo da sačuvamo neku vremensku seriju, čuvamo je, odvojeno, kao listu apsolutnih vremena (“Times”) i listu podataka ( “Values”). Apsolutna vremena se dobijaju ovako:

probaserija["Times"]

Da bismo iz apsolutnog vremena dobili oblik standardnog datuma mapiramo na nju funkciju DateObject:

probaserija["Times"]

vreme=DateObject/@probaserija["Times"]

Vrednosti odnosno cene akcija se dobijaju iz vremenske serije koristeći “Values”.

cene=probaserija["Values"]

Na taj način smo dekonstruisali vremensku seriju. Naravno, možemo je iz tih podataka ponovo da rekonstruišemo ovako:

{vreme,cene}\[Transpose]

TimeSeries[{vreme,cene}\[Transpose]]

TimeSeries[{vreme,cene}\[Transpose]]["Times"]

Liste smo transponovali da bismo dobili parove {vreme, cene}.

Napraviti vremenske serije za 4 akcije (na dnevnom nivou) u periodu od početka 2005 do kraja 2006

Na ovaj način možemo da preko interneta uploadujemo cene akcija na dnevnom nivou u periodu 2005, 2006, za četiri akcije: Microsoft, IBM, General Electric i AT & T. Ono što nam je tu potrebno jesu takozvani ticker simboli. Svaka akcija, naime, ima svoj string koji je jedinstveno identifikuje.

tikeri={"MSFT","IBM","GE","NYSE:T"};

Uvako učitavamo sve četiri akcije istovremeno i imenujemo odgovarajuće vremenske serije:

{msft,ibm,ge,att}=TimeSeries[FinancialData[#,{{2005},{2006}}]]&/@tikeri

Ukoliko nemamo pristup internetu, kao što je to slučaj na ispitu, korisno nam je da snimimo vremenske serije i da umemo posle da ih ponovo učitamo i sklopimo. Ovde objašnjavam kako da sklapamo vremenske serije. To vam može trebati na ispitu. Moramo da unesemo Times i Values komponente za vremenske serije, pa da ih onda sklopimo pomoću TimeSeries funkcije.

Nastavak

Iz direktorije Podaci za WL Primene unesite prvo podatke o vremenu. Za to koristitie Import pa onda Insert File Path kao što smo ranije radili. Ja ih ovde učitavam iz Documents direktorije radi preglednosti:

apsolutnoVreme=Flatten[Import["msftibmgeTimes20052007.dat"]];

Nije teško videti da format vremena nije uobičajen. Naime, dobili smo takozvano apsolutno vreme.

Take[apsolutnoVreme,5]

Stoga moramo da apsolutno vreme prebacimo u kalendarsko:

datumi=DateObject/@apsolutnoVreme;

Ovako unosimo Values za 4 akcije u periodu 2005-2007:

{vrednostiMSFT,vrednostiIBM,vrednostiGE,vrednostiATT};

{vrednostiMSFT,vrednostiIBM,vrednostiGE,vrednostiATT}=Import[#]\[Transpose][[1]]&/@Rest[imenafajlova20052007];

Najzad, ovako rekonstruišemo vremenske serije za 4 akcije u periodu od početka 2005 do kraja 2006:

{msft,ibm,ge,att}=TimeSeries[{datumi,#}\[Transpose]]&/@{vrednostiMSFT,vrednostiIBM,vrednostiGE,vrednostiATT}

Kako bi izgledala dinamika portfolia ukoliko bismo investirali sav novac u samo jednu od hartija?

To možemo da predstavimo grafički tako što koristimo DateListPlot. Ta funkcije je veoma slična ListLinePlot, ali na x osi ima datume.

GraphicsGrid[{{DateListPlot[msft,PlotTheme->"Detailed",PlotLabel-> "Microsoft akcija 2005-2007"],DateListPlot[ibm,PlotTheme->"Detailed",PlotLabel-> "IBM akcija 2005-2007"]},{DateListPlot[ge,PlotTheme->"Detailed",PlotLabel-> "GE akcija 2005-2007"],DateListPlot[att,PlotTheme->"Detailed",PlotLabel-> "ATT akcija 2005-2007"]}},ImageSize-> Large]

Vidimo da se cene u tom periodu ponašaju veoma različito. Uporedimo ostalih akcija u odnosu na Microsoft

DateListPlot[{ibm/msft,ge/msft,att/msft},PlotTheme->"Detailed",PlotLegends->{"ibm/msft","ge/msft","att/msft"}]

Vidimo sa slike da je cena Microsoftove akcije rasla kako u odnosu na IBM tako i u odnosu na GE, a bila relativno stabilna u odnosu na akcije AT&T.

Primetimo da vremenske serije u WL možemo sabirati, množiti, deliti, logaritmovati itd. To jako pojednostavljuje analizu dinamike portfolija.

Dnevni prinosi i njihova raspodela

Pretpostavimo da imamo neku vremensku seriju cena akcija

{p1,p2,p3,p4,p5}

Kako da izračunamo prinose?

Differences[{p1,p2,p3,p4,p5}]

Most[{p1,p2,p3,p4,p5}]

((Differences[{p1,p2,p3,p4,p5}])/(Most[{p1,p2,p3,p4,p5}]))

Na osnovu toga možemo da napišemo funkciju koja računa prinose:

prostprinos[cene_List]:=((Differences[cene])/(Most[cene]))

Razmotrimo sada dnevne prinose na četiri akcije:

prostprinos[msft["Values"][[1;;30]]]

msft["Values"][[1;;30]]

{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE,dnevniprinosATT}=prostprinos[#]&/@{msft["Values"],ibm["Values"],ge["Values"],att["Values"]};

Pogledajmo sada histograme

GraphicsGrid[{{{Histogram[dnevniprinosMSFT,PlotLabel->"Microsoft dnevni prinosi"],Histogram[dnevniprinosIBM,PlotLabel->"IBM dnevni prinosi"]},{Histogram[dnevniprinosGE,PlotLabel->"GE dnevni prinosi"],Histogram[dnevniprinosATT,PlotLabel->"ATT dnevni prinosi"]}}},ImageSize->Large]

Vidimo da se raspodele dosta vizualno razliku.

Očekivani prinosi, standardne devijacije (na dnevnom nivou), i koeficijenata korelacije za prve 3 akcije

Iz pedagoških razloga, razmotrimo za početak samo prinose na prve 3 akcije. Očekivani prinos na dnevnom nivou za svaku od akcija (za Microsoft, IBM i GE, respektivno)

Mean[{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE}\[Transpose]]

Evo i standardnih devijacija na dnevnom nivou

StandardDeviation[{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE}\[Transpose]]

Na dnevnom nivou možemo izračunati, takođe, i matricu kovarijansi i korelacije

Covariance[{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE}\[Transpose]]

Correlation[{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE}\[Transpose]]//MatrixForm

Investitori tipično ne rade portfolio analizu za jedan dan unapred, nego na godinu dana

Stoga, njih zanimaju anualizovane (to jest prevedene na godinu dana) očekivani prinos i matrica kovarijanse. To se dobija tako što se dnevni očekivani prinosi i dnevna matrica kovarijanse pomnoži sa brojem dana trgovanja a to je, u proseku, 252.

ocekivaniPrinosAkcija=252Mean[{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE}\[Transpose]]

matricaKovarijanse=252Covariance[{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE}\[Transpose]];

Vidimo da će anualizovani prinos na MFST biti mnogo veći nego na ostale hartije. Da li je veći i rizik na godišnjem nivou?

stdevGodisnja=(Sqrt[252])StandardDeviation[{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE}\[Transpose]]

2. Pripremna portfolio analiza sa tri akcije

Od očekivanog prinosa na pojedinačne hartije do očekivanog prinosa na portfolio

Pretpostavimo da smo u svaku od 3 hartije uložili neki procenat svog novca. Ponderi su w1, w2, i w3, respektivno. Pošto su prinosi slučajne promenljive, r1, r2, i r3, prinos na portfolio je slučajna veličina - ponderisana suma prinosa:

rp =w1 r1 + w2 r2 + w3 r3

Na osnovu linearnosti očekivane vrednosti, očekivani prinos portfolia sa 3 akcije je:

E[rp] = w1 E[r1] + w2 E[r2] + w3 E[r3] =Dot[ {w1, w2, w3},{E[r1] , E[r2] , E[r3] }]

Evo kako bi za naše akcije izgledali neki mogući vektori pondera. Prvi odgovara tome da sav novac stavimo u MSFT, drugi da sav novac stavimo u IBM a treći da ravnomerno podelimo pare na 3 akcije.

wsveuMSFT={1,0,0};

wsveuIBM={0,1,0};

wpodjednako={1/3,1/3,1/3};

Sada izračunajmo očekivane prinose za ta tri portfolia. Za to treba samo da pomnožimo skalarno vektor pondera sa vektorom ocekivanih prinosa.

{wsveuMSFT.ocekivaniPrinosAkcija,wsveuIBM.ocekivaniPrinosAkcija,wpodjednako.ocekivaniPrinosAkcija}

Kako od matrice kovarijanse dobiti portfolio varijansu odnosno rizik portfolia?

Od ova tri portfolia, najveći očekivani prinos ostvarili ako investiramo sav novac u MSFT (bar u tom periodu vremena). Ali, imamo osećaj da bi možda takav portfolio bio i najrizičniji. Da bismo to proverili to, treba da naučimo kako da odredimo varijansu portfolia za zadati ponder ulaganja.

Po definiciji, varijansa portfolia je E[(rp - ((E(rp)))^2)]. Ona zavisi SAMO od matrice kovarijanse i od pondera našeg ulaganja. Ako je matrica kovarijanse Σ a vektor pondera w, onda imamo da je varijansa portfolia

varijansaPortfolia= w.Σ.w

Varijansa portfolia je, stoga, kvadratna forma po w, čija je matrica-matrica kovarijansi Σ. Sada možemo da proverimo kolike su varijanse naša tri portfolia:

varijansa1=wsveuMSFT.matricaKovarijanse.wsveuMSFT

varijansa2=wsveuIBM.matricaKovarijanse.wsveuIBM

varijansa3=wpodjednako.matricaKovarijanse.wpodjednako

Ulaganje isključivo u akcije MSFT je potencijalno najprofitabilnije, ali je, istovremeno, i najrizičnije. Sa druge strane, ako uložimo podjednako u sve tri hartije, očekivani prinos je bolji od ulaganja svih para u IBM, a, što je važno, rizik je najmanji od ova tri portfolia.

Pitanje: u koji portfolio bi bilo najpametnije uložiti? Odgovor, naravno, zavisi od toga koliki prinos očekujemo, odnosno kakav rizik smo spremni da prihvatimo.

3. Portfolio optimizacija sa 3 hartije

Optimizacioni problem ukoliko želimo da dobijemo portfolio sa najmanjim mogućim rizikom

U tom slučaju minimiziramo varijansu. Pretpostavimo da je vektor pondera W3 definisan ovako:

W3={w1,w2,w3};

Očekivani prinos i varijansa portfolia zavise od izbora pondera W3:

ocekivaniPrinosPortfolia=W3.ocekivaniPrinosAkcija

varijansaPortfolia=W3.matricaKovarijanse.W3//Expand

varijansaPortfolia/.{w1-> 1/3,w2->1/3,w3-> 1/3}

Primetimo da ova kvadratna forma ima dijagonalne i nedijagonalne članove. Ona je pozitivno definitna. Da proverimo:

PositiveDefiniteMatrixQ[matricaKovarijanse]

Prilikom investiranja, mora biti zadovoljen uslov da je suma svih pondera jednaka 1. To je stoga što moramo negde da parkiramo lovu!

w1+w2+w3==1

Nastavak

Ovaj problem je konveksan problem minimizacije za koji postoji globalni minimum. Rešenje možemo dobiti na sledeći način:

MVPportfolio=NMinimize[{varijansaPortfolia,w1+w2+w3==1},W3]

varijansaPortfolia/.{w1-> 1/3,w2->1/3,w3-> 1/3}

Prvi broj je vrednost minimuma varijanse. Da bismo takav minimalan (ex-ante) rizik ostvarili treba da stavimo manje od 10 posto svog novca u Microsoft a najviše u GE.  Ovo je Minimum Variance Portfolio ili MVP. Od njega nema portfolia sa manjim rizikom dok god investiramo samo u te 3 akcije. Njegov оčekivani prinos (na godišnjem nivou je:

Last[MVPportfolio]

ocekivaniMVP=ocekivaniPrinosPortfolia/.Last[MVPportfolio]

Optimizacioni problem ukoliko imamo određeni cilj u vezi očekivanog prinosa

U prethodnom slučaju smo ignorisali informaciju o očekivanom prinosu pošto nas je zanimao samo rizik. Hajde da sad vidimo kako da napravimo portoflio koji bi minimizovao rizik (varijansu) ali pod uslovom da ostvarimo prinos od, recimo 5 posto godišnje. Kako bismo tada investirali? Da bismo postavili problem moramo da dodamo uslov da je očekivani prinos portfolia jednak 5 posto

ocekivaniPrinosPortfolia==0.05

Stoga imamo da je koji treba da rešimo sledeći:

NMinimize[{varijansaPortfolia,w1+w2+w3==1,ocekivaniPrinosPortfolia==0.05},W3]

(Sqrt[0.01830351508987337`])

Vidimo da bi u ovom slučaju rizik bio nešto veći nego kada ignorišemo prinos potpuno. Takođe investirali bismo nešto više u MSFT. Razmotrimo sada portfolio u kome bismo očekivali da ostvarimo 10 posto godišnje:

NMinimize[{varijansaPortfolia,w1+w2+w3==1,ocekivaniPrinosPortfolia==0.1},W3]

Vidimo da bismo u tom slučaju prodali bez pokrića akcije IBM. Šta pod tim podrazumevamo? Naime, otišli biste kod svog brokera i prodali određenu količinu akcije IBM koju ne posedujete (otuda negativni ponder). Naravno kasnije biste morali da je kupite kako biste vratili pozajmicu. To jest, vi posedujete danas manje od nula akcija IBM u tom slučaju.

Neki regulatori (kao u Srbiji na primer), ne dozvoljavaju prodaju bez pokrića. Kako bi se izmenio optimalni portfolio ukoliko dodamo tako ograničenje. Ono glasi:

pozitivni=And@@Through[0≤ W3≤1]

NMinimize[{varijansaPortfolia,w1+w2+w3==1,ocekivaniPrinosPortfolia==0.1,pozitivni},W3]

Efikasna granica portfolio investiranja u 3 akcije

Sada smo spremni da razmotrimo opšti slučaj kada investitor zadaje prinos μ.

ocekivaniPrinosPortfolia==μ

NMinimize ne može da reši problem u opštim brojevima za proizvoljno μ, ali može za seriju različitih vrednosti μ koju dobijamo tabelarno.

rezultatioptimizacije=Table[NMinimize[{varijansaPortfolia,w1+w2+w3==1,ocekivaniPrinosPortfolia==μ},W3],{μ,0.01,0.4,0.01}]

Primetimo da su optimalne vrednosti varijanse date izrazom:

rezultatioptimizacije\[Transpose][[1]]

Sada ćemo sastaviti listu parova gde je prvi broj optimalna vrednost standardne devijacije (koren iz optimalne varijanse) a drugi broj je odgovarajući zahtevani prinos. To se dobijamo ovako

efikasnaGranica={(Sqrt[rezultatioptimizacije\[Transpose][[1]]]),Range[0.01,0.4,0.01]}\[Transpose]

Ova informacija nam daje mogućnost da odredimo koju kombinaciju rizika i prinosa imamo i šta možemo da prihvatimo. Grafički

Efikasna granica-nastavak

ListLinePlot[efikasnaGranica,AspectRatio->1/1.5,AxesOrigin->{0.05,0},AxesLabel->{"StDev","OcekPrinos"}]

Ovo što tu vidimo je skoro to što nam treba. Naime, sada možemo i grafički da vidimo zavisnost standardne devijacije prinos na portfolio od njegove očekivane vrednosti. Važno je tu staviti i gde je tu MVP.

Show[ListLinePlot[efikasnaGranica,AspectRatio->1/1.5,AxesOrigin->{0.05,0},AxesLabel->{"StDev","OcekPrinos"},PlotLabel-> "Efikasna granica"],Graphics[{Red,PointSize[0.015],Point[{(Sqrt[MVPportfolio[[1]]]),ocekivaniMVP}]}]]

Naravno, i sa grafika se vidi da crvena tačka, MVP portfolio, ima najmanji mogući rizik.

Sa druge strane, postoji puno portfolia koji imaju manji prinos od MVP. To su portfoliji koji leže ispod crvene tačke na grafiku. U njih svakako nema smisla ulagati (zašto?).

Optimalni ponderi za različite očekivane prinose

Umesto da predstavimo grafički efikasnu granicu možemo da to uradimo i tabelarno, slično onome što smo radili na prethodnom predavanju. Naime, ako koristimo Manipulate

Manipulate[NMinimize[{(Sqrt[varijansaPortfolia]),w1+w2+w3==1,ocekivaniPrinosPortfolia==μ},W3],{μ,0.01,0.4,Appearance-> "Labeled"}]

Ovako možemo da vidimo očekivani prinos μ, standardnu devijaciju σ i odgovarajuće pondere za svako od rešenja problema portfolio optimizacije.

Manipulate[Module[{minimum},minimum=NMinimize[{varijansaPortfolia,w1+w2+w3==1,ocekivaniPrinosPortfolia==μ},W3];Flatten[{"σ"->(Sqrt[minimum[[1]]]),minimum[[2]]}]],{μ,0.01,0.4,Appearance-> "Labeled"}]

4. Portfolio optimizacija kada proširimo investicioni skup za još jednu akciju (ATT)

Dodajmo u naš investicioni portfolio sada i AT&T , i preračunajmo za ovu akciju sve što treba. Sada ćemo imati ukupno 4 akcija u portfoliu. Onda izračunamo očekivane prinose i matricu kovarijansi, na godišnjem nivou.

ocekivaniPrinosAkcijaNovi=252Mean[{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE,dnevniprinosATT}\[Transpose]]

matricaKovarijanseNova=252Covariance[{dnevniprinosMSFT,dnevniprinosIBM,dnevniprinosGE,dnevniprinosATT}\[Transpose]];

Pošto imamo sada četiri promenljive umesto 3, uvodimo još jednu komponentu u vektor w.

W4={w1,w2,w3,w4};

Nova varijansa portfolia je kvadratna forma koja sada ima 4 promenljive.

varijansaPortfoliaNova=W4.matricaKovarijanseNova.W4//Expand

Rešenje za novi MVP

Nađimo prvo rešenje za novi portfolio minimalne varijanse (novi MVP)

MVPportfolioNovi=NMinimize[{varijansaPortfoliaNova,w1+w2+w3+w4==1},W4]

Očekivani prinos portfolia u opštem slučaju je:

ocekivaniPrinosPortfoliaNovi=W4.ocekivaniPrinosAkcijaNovi

Izračunajmo za kasnije očekivani prinos novog MVP portfolia.

ocekivaniMVPNovi=ocekivaniPrinosPortfoliaNovi/.Last[MVPportfolioNovi]

Nova efikasna granica i poređenje sa starom

Sada smo spremni da ponovimo izračunamo optimalne portfolija za zadati nivo očekivanog prinosa, ali sa proširenim skupom hartija u koje možemo da investiramo.

rezultatioptimizacijeNovi=Table[NMinimize[{varijansaPortfoliaNova,w1+w2+w3+w4==1,ocekivaniPrinosPortfoliaNovi==μ},W4],{μ,0.01,0.4,0.01}];

Kao i ranije, ovako pravimo parove optimalnih vrednosti rizika za zadati očekivani prinos portfolia

efikasnaGranicaNova={(Sqrt[rezultatioptimizacijeNovi\[Transpose][[1]]]),Range[0.01,0.4,0.01]}\[Transpose];

Show[ListLinePlot[{efikasnaGranica,efikasnaGranicaNova},AspectRatio->1/1.5,AxesOrigin->{0.05,0},AxesLabel->{"StDev","OcekPrinos"},PlotLabel-> "Efikasna granica",PlotLegends->{"Sa 3 akcije","Sa 4 akcije"}],Graphics[{Red,PointSize[0.015],Point[{{(Sqrt[MVPportfolio[[1]]]),ocekivaniMVP},{(Sqrt[MVPportfolioNovi[[1]]]),ocekivaniMVPNovi}}]}]]

Vidimo da kada se poveća investicioni skup, efikasna granica omogućava investicije koje će za isti očekivani prinos imati manji rizik.

Razlog za to je što se time povećava mogućnost diverzifikacije. Dakle, širi dijapazon investicionih mogućnosti daje bolje mogućnosti za investitora.

Napravimo sada Manipulate koji pokazuje kako konstruisati optimalni portfolio

Ovde ćemo prikazati to na  2 različita načina. Prvi je generalizacija onoga od ranije:

Manipulate[Module[{minimum},minimum=NMinimize[{varijansaPortfoliaNova,w1+w2+w3+w4==1,ocekivaniPrinosPortfoliaNovi==μ},W4];Flatten[{"σ"->(Sqrt[minimum[[1]]]),minimum[[2]]}]],{μ,0.01,0.4,Appearance-> "Labeled"}]

Drugi  način bi bio da napravimo dinamičku tabelu:

Manipulate[Module[{minimum},minimum=NMinimize[{varijansaPortfoliaNova,w1+w2+w3+w4==1,ocekivaniPrinosPortfoliaNovi==μ},W4];Grid[{{"σ","μ","w1","w2","w3","w4"},Flatten[{(Sqrt[minimum[[1]]]),μ,minimum[[2,#,2]]&/@Range[4]}]},Frame->All]],{μ,0.02,0.4,Appearance-> "Labeled"}]

U prvom redu tabele imamo oznake promenljivih koje pratimo. Njih je najzgodnije uvek pisati kao stringove. U drugom redu imamo vrednosti. One se menjaju kako menjamo vrednost μ. Njih smo izvukli kao delove izraza minimum, odnosno kao delove rešenja problema optimizacije.

5. Statičke strategije: investiramo neku količinu novca na početku i posle više ne trgujemo

Unesimo cene akcija naše četiri kompanije u 2007.

Pretpostavimo da smo na osnovu podataka za 2005 i 2006 doneli neke investicione odluke odnosno odabrali portfolio u koji želimo da investiramo. Kakav prinos ćemo realizovati ex-post, na primer u 2007? Da bismo to proverili, skinimo podatke o iste četiri akcije kao i pre, ali za 2007. godinu.

Ovako možemo da napravimo vremensku seriju za svaku od četiri akcije za novi period vremena:

{msfttest,ibmtest,getest,atttest}=TimeSeries[FinancialData[#,{{2007}}]]&/@tikeri

Kao i ranije, ukoliko nemamo pristup internetu, korisno nam je da snimimo ove vremenske serije na Hard Disk ili gde treba. Ovako unosimo te vremenske serije sa Hard Diska (opet, treba da koristite tu podatke iz Podaci iz WL Primene).

Nastavak

Sada ćemo na osnovu sačuvanih podataka o Times i Values komponentama vremenskih serija da ih ponovo rekonstruišemo. Prvo učitavamo vreme:

apsolutnoVremeNovo=Import["novovreme.dat"]\[Transpose][[1]];datumiNovo=DateObject/@apsolutnoVremeNovo;

Ovako unosimo Values za 4 akcije u periodu od januara do decembra 2007:

{vrednostiMSFTNovo,vrednostiIBMNovo,vrednostiGENovo,vrednostiATTNovo}=Import[#]\[Transpose][[1]]&/@Rest[imenafajlova20072008];

Najzad, ovako rekonstruišemo vremenske serije za 4 akcije u periodu od početka 2005 do kraja 2006:

{msfttest,ibmtest,getest,atttest}=TimeSeries[{datumiNovo,#}\[Transpose]]&/@{vrednostiMSFTNovo,vrednostiIBMNovo,vrednostiGENovo,vrednostiATTNovo}

Statička strategija: investiramo na početku podjednaku količinu novca u sve četiri akcije i posle više ne trgujemo

Koraci prilikom definisanja statičke strategije:

Grid[{{Style["Koraci",Bold],Style["Opis",Bold]},{"Korak 1",Style["Odredimo sumu s koju želimo
da uložimo u trenutku 0",20]},{"Korak 2",Style["Odredimo pondere (Subscript[w, i]) za svaku od
akcija u trenutku 0",20]},{"Korak 3",Style["Sumu (Subscript[s, i])= s (Subscript[w, i]) ulažemo u akciju i
u trenutku 0",20]},{"Korak 4",Style["(Subscript[s, i]) podeljeno sa cenom akcije (Subscript[p, i]) 
daje broj akcija (Subscript[n, i]) u trenutku 0",20]},{"Korak 5",Style["U statičkoj strategiji broj
akcija (Subscript[n, i]) se ne menja sa vremenom",20]}},Frame-> All]

Statičke strategije razlikuju se samo prema tome kako uradimo Korak 2. Ovde ćemo prvo da razmotrimo statičku strategiju gde u trenutku 0 (početak 2007.) ulažemo s=100 000 dolara podjednako u svaku od 4 akcije (korak 1).

Ponderi su jednaki {0.25, 0.25, 0.25, 0.25} (to je korak 2). Stoga, prvog dana trgovanja u 2007. godini investiramo po 25000 dolara u svaku od 4 akcije (to su sume (Subscript[s, i]) u koraku 3). Primetimo da nam u tom slučaju ne treba nikakva optimizacija. Posle početne kupovine akcije više ne trgujemo i samo posmatramo šta se događa sa našim portfoliom. Iz toga razloga to i jeste statička strategija.

Nastavak

Odredimo koliko bismo akcija Microsofta, IBM, GE, i ATT morali da kupimo na početku 2007., kako bismo u svaku uložili po 25000 dolara (to je korak 4). Ideja je prosta. Za svaku od 4 akcije, nađimo cenu akcije u početku 2007., i podelimo 25000 sa cenom jedne akcije. To će nam dati broj akcija za tu hartiju. Verovatno nećemo dobiti ceo broj ali hajde da se ne brinemo o tome.

Uvedimo, radi kompaknosti, listu vremenskih serija za koje testiramo performanse, testSerije. Takođe uvedimo listu brojakcijaIstiPonderi koja se sastoji od akcija koje investiramo u svaku od akcija u strategiji sa istim ponderima. Tu, na primer, First[msfttest["Values"]] nalazi prvu vrednost cene akcija Microsofta za 2007.

First[#["Values"]]&@msfttest

First[#["Values"]]&@ibmtest

testSerije={msfttest,ibmtest,getest,atttest};

brojakcijaIstiPonderi=(25000/First[#["Values"]])&/@testSerije

Ako želimo da uložimo po 25000 dolara u ove 4 akcije, potrebno da prvog dana 2007. kupimo 1991 akciju Microsofta, 328 akcija IBM itd. Posle toga više njima ne trgujemo.

Da bi našli performansu takvog portfolia treba da izračunamo ukupnu vrednost portfolia kao sumu vrednosti broja akcija pomnoženih na odgovarajuću cenu za svaki dan trgovanja. Skalarni proizvod vektora koji sadrži količine akcija i vektora koji sadrži 4 vremenske serije daje vrednost portfolija u svakom trenutku vremena:

brojakcijaIstiPonderi

portfolioPodjednakoUsve=Dot[brojakcijaIstiPonderi,testSerije]

DateListPlot[portfolioPodjednakoUsve]

Koliko bi se promenili ponderi u ovoj strategiji kroz godinu dana?

Na početku smo fiksirali pondere da budu isti. Koliko su se promenili posle godinu dana ovakvog statičkog ulaganja? Da bismo to odredili, nađimo prvo vrednost portfolia na kraju 2007.

Last[portfolioPodjednakoUsve["Values"]]

Cena svake od hartija na kraju 2007. su:

Last[#["Values"]]&/@testSerije

pa su odgovarajuće vrednosti akcija, u dolarima na kraju 2007. date vektorom:

brojakcijaIstiPonderi (Last[#["Values"]]&/@testSerije)

U ovom izrazu koristimo pokomponentno množenje dva vektora. Na primer:

{a,b}{c,d}

Najzad, ponderi na kraju 2007 su:

brojakcijaIstiPonderi (Last[#["Values"]]&/@testSerije)/Last[portfolioPodjednakoUsve["Values"]]

Dakle, ako fiksiramo pondere na početku i više ne trgujemo, ponderi neće ostati fiksni zato što se menjaju vrednosti akcija. Stoga, suprotno od toga šta piše u puno udžbenika uključujući i naš, strategija sa fiksnim ponderima nije i ne može biti statička. Ako želimo da sačuvamo svakog dana iste pondere (recimo, podjednako ulaganje u svaku od akcija), moramo da trgujemo kako bismo kompenzovali promene tržišnih vrednosti cena.

Statičko ulaganje u MVP portfolio

Na osnovu podataka za 2005. i 2006. mi smo ranije odredili kakvi bi bile optimalne vrednosti pondera ukoliko želimo portfolio sa najmanjim mogućim rizikom (MVPNovi portfolio). Pretpostavimo da na početku 2007., umesto da investiramo podjednake količine novca u svaku od hartija, uložimo onako kako to nalaže MVPNovi kalkulacija (to je sada novi korak 2). Dobili bismo sledeće pondere:

MVPportfolioNovi[[2]]

ponderiMVPNovi=W4/.MVPportfolioNovi[[2]]

Izračunajmo sada broj akcija koji treba da kupimo kako bismo upravo na taj način podelili 100 000 dolara. Pre toga moramo da nađemo koliko para treba da uložimo u svaku od akcija (korak 3). To dobijamo tako što sumu od 100 000 pomnožimo sa odgovarajućim ponderima.

iznosiMPV=100000ponderiMVPNovi

Dobili smo listu sa količinama novca (u dolarima) koju sada moramo da uložimo u svaku od akcija. Evo vektora cena svake od akcija na pocetku 2007.:

First[#["Values"]]&/@testSerije

Broj akcija onda dobijemo tako što iznos koji treba da uložimo u neku akciju podelimo sa vrednošću akcije:

brojakcijaMVP=iznosiMPV/(First[#["Values"]]&/@testSerije)

Tu koristimo pokomponentno deljenje lista u WL

{a,b}/{c,d}

Uporedimo ex-post performance dve statičke strategije: podjednako u sve i MVP

Sada, kao i u prethodnom primeru, pretpostavimo da ćemo u 2007. portfolio nepromenjen (u smislu broja akcija). Drugim rečima, ova strategija je statička. Stoga će vremenska serija vrednosti ovog portfolia biti:

portfolioMVP=Dot[brojakcijaMVP,testSerije]

Uporedimo performanse ova dva portfolia, jednog koji koristi optimizaciju i drugog koji je ne koristi.

DateListPlot[{portfolioPodjednakoUsve,portfolioMVP},PlotLegends->{"Isti ponderi","MVP"}]

Vidimo da bi u ovom slučaju investiranje u najmanje rizičan portfolio doneo nešto malo manji prinos na kraju nego da smo stavili podjednaku količinu novca u svaku hartiju na početku. Ali, naravno, moglo je i sasvim drugačije da se završi.

6. Dinamička strategija: podjednaki ponderi konstantni u vremenu

Prethodne dve portfolio strategije koje smo primenili su bile statičke. Drugim rečima, posle početne kupovine akcije više nismo njima trgovali. Broj akcija je bio konstantan u svakom trenutku, samo su se cene akcije menjale svaki dan.

U principu mi možemo da menjamo naš portfolio čak i više puta dnevno (to se zove high frequency trading). Jedna interesantna strategija jeste da uvek držimo konstantni udeo od 25 posto naših para svaki dan uložen u one četiri akcije. Pošto se cene menjaju, to bi značilo da bismo morali da stalno menjamo naš portfolio, to jest da trgujemo. Pri tome, mada ćemo uvek stavljati jednu četvrtinu para u svaku od četiri akcije, količina para koju ćemo imati na raspolaganju će svakoga dana biti drugačija.

Jedan prost način da vidimo kakav bi se prinos ostvario na takav portfolio (ako ne računamo transakcione troškove koji mogu biti značajni), jeste da izračunamo prinose na sve četiri akcije u 2007., i da nađemo njihovu ponderisanu sumu sa ponderima od po 25 posto. Na taj način bismo dobili prinose na takav portfolio svakog dana trgovanja u 2007. Na osnovu prinosa možemo da rekonstruišemo šta će se dogoditi sa vrednošću portfolia koristeći takozvani kumulativni prinos ukoliko bismo počneli, kao i ranije, od 100000 dolara.

Prvi izračunajmo prinose na svaku od 4 akcije u 2007 za sve četiri akcije odjednom.

prinosi2007=prostprinos[#["Values"]]&/@{msfttest,ibmtest,getest,atttest}

Strategija se sastoji u investiranju podjednakih udela u sve četiri akcije u svakom trenutku vremena. Pošto je vektor pondera

wpodjednaki={0.25,0.25,0.25,0.25};

Nastavak

Prinos portfolia je, u svakom trenutku, jednak ponderisanoj sumi prinosa ove četiri akcije. To se može izračunati ovako:

prinosPodjednakiDinamicki=wpodjednaki.prinosi2007

Sledeći korak jeste da nađemo formulu za kumulativni prinos. Ako bismo počeli od 1 evra i imali četiri dnevna prinosa, r1 do r4, kumulativni prinosi bi bili:

FoldList[#1(1+#2)&,100000,{r1,r2,r3,r4}]

U našem slučaju prinosi su dati pomoću liste prinosPodjednakiDinamicki, a početna vrednost portfolia je 100 000. Stoga:

vrednostPodjednakiDinamicki=FoldList[#1(1+#2)&,100000,prinosPodjednakiDinamicki];

ListLinePlot[vrednostPodjednakiDinamicki,PlotTheme->"Detailed",PlotLabel->Style["Fiksni u vremenu
 podjednaki ponderi",Blue,14]]

Na sličan način možemo konstruisati dinamiku vrednosti bilo kog portfolia koji ima pondere koji se ne menjaju sa vremenom (naravno, oni ne moraju biti jednaki 0.25, 0.25, 0.25, 0.25). Sve se razlikuje samo u jednom koraku, naime umesto pondera wpodjednaki bio bi neki drugi vektor pondera.

Najzad, ukoliko se i ponderi menjaju sa vremenom ili ukoliko želimo da uzmemo u obzir transakcione troškove, onda izračunavanja zahtevaju malo ozbiljnije stvari. Ali, o tome nekom drugom prilikom. Ovo je dovoljno za početak da neko od vas ko se zaintersuje može malo da se igra i vidi kako bi to radilo.