Ottimizzazione a singolo periodo
Esistono due funzioni per eseguire l’ottimizzazione, optimize.portfolio() e optimize.portfolio.rebalancing(). Questo esercizio si concentra sull’ottimizzazione a singolo periodo; nel prossimo userai optimize.portfolio.rebalancing() per l’ottimizzazione con ribilanciamento periodico. optimize.portfolio() supporta l’ottimizzazione su un singolo periodo. Gli argomenti principali includono R per i rendimenti degli asset, portfolio per l’oggetto di specifica del portafoglio e optimize_method per indicare il metodo di ottimizzazione usato per risolvere il problema. In molti casi è utile impostare trace = TRUE per memorizzare informazioni aggiuntive per ogni iterazione/tentativo dell’ottimizzazione.
I seguenti metodi di ottimizzazione sono supportati:
DEoptim: Evoluzione differenzialerandom: Portafogli casualiGenSA: Simulated Annealing generalizzatopso: Particle Swarm OptimizationROI: R Optimization Infrastructure per solver di programmazione lineare e quadratica
Il metodo di ottimizzazione va scelto in base al tipo di problema che stai risolvendo. Ad esempio, un problema formulabile come programmazione quadratica dovrebbe essere risolto con un solver di programmazione quadratica, mentre un problema non convesso richiede un solver globale come DEoptim.
In questo esercizio, definiremo il problema di ottimizzazione del portafoglio per massimizzare il rendimento medio e minimizzare la deviazione standard del portafoglio, con un risk budget sulla deviazione standard in cui la percentuale di rischio minima è 5% e la massima è 10%, soggetto a vincoli di pieno investimento e solo posizioni long. L’obiettivo di risk budget richiede un solver globale, quindi risolveremo il problema usando portafogli casuali. L’insieme dei portafogli casuali, rp, è generato usando 500 permutazioni per questo esercizio.
Questo esercizio fa parte del corso
Analisi di portafoglio intermedia in R
Istruzioni dell'esercizio
La specifica del portafoglio è già stata creata e si chiama port_spec. Nel tuo workspace ci sono anche i rendimenti, asset_returns.
- Esegui un’ottimizzazione a singolo periodo con
traceimpostato aTRUEusando"random"come metodo di ottimizzazione. Assegna l’output dell’ottimizzazione a una variabile chiamataopt. - Stampa l’output dell’ottimizzazione.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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