Optimering för en enskild period
Det finns två funktioner för att köra optimering: optimize.portfolio() och optimize.portfolio.rebalancing(). Den här övningen fokuserar på optimering för en enskild period, och nästa övning använder optimize.portfolio.rebalancing() för optimering med periodisk ombalansering. optimize.portfolio() stöder optimering för en enskild period. Viktiga argument är R för avkastningsdata, portfolio för portföljspecifikationsobjektet och optimize_method för att ange vilken optimeringsmetod som ska användas för att lösa problemet. I många fall är det praktiskt att ange trace = TRUE för att lagra ytterligare information för varje iteration av optimeringen.
Följande optimeringsmetoder stöds:
DEoptim: Differentiell evolutionrandom: Slumpmässiga portföljerGenSA: Generaliserad simulerad nedkylningpso: PartikelsvärmsoptimeringROI: R Optimization Infrastructure för linjära och kvadratiska programmeringslösare
Valet av optimeringsmetod bör baseras på typen av problem du löser. Ett problem som kan formuleras som ett kvadratiskt programmeringsproblem bör till exempel lösas med en kvadratisk programmeringslösare, medan ett icke-konvext problem bör lösas med en global lösare som DEoptim.
I den här övningen definierar vi portföljoptimeringsproblemet för att maximera genomsnittlig avkastning och minimera portföljens standardavvikelse med ett riskbudget baserat på standardavvikelse, där den lägsta procentuella risken är 5 % och den högsta är 10 %, med krav på full investering och enbart långa positioner. Riskbudgetmålet kräver en global lösare, så vi löser problemet med slumpmässiga portföljer. Uppsättningen slumpmässiga portföljer, rp, genereras med 500 permutationer i den här övningen.
Den här övningen är en del av kursen
Portföljanalys på avancerad nivå i R
Övningsinstruktioner
Portföljspecifikationen har redan skapats och heter port_spec. I din arbetsmiljö finns även avkastningsdata som heter asset_returns.
- Kör en optimering för en enskild period med
tracesatt tillTRUEoch"random"som optimeringsmetod. Tilldela optimeringsresultatet till en variabel med namnetopt. - Skriv ut resultatet av optimeringen.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# Run a single period optimization using random portfolios as the optimization method
opt <- optimize.portfolio(R = ___, portfolio = ___, optimize_method = ___, rp = rp, trace = TRUE)
# Print the output of the single-period optimization