Um otimizador é uma função mais regras
scipy.optimize.minimize(fun, x0, method='SLSQP', bounds=..., constraints=...) acha o vetor que torna fun mínima. Você dá três tipos de informação. O objetivo fun(w) devolve um número a minimizar: para uma carteira de variância mínima é w @ cov @ w, e para maximizar algo minimiza-se o seu oposto. Os limites são uma lista de pares (baixo, alto), um por peso: (0, cap) significa sem venda a descoberto e sem posição acima do teto. As restrições são dicionários: {'type': 'eq', 'fun': lambda w: w.sum() - 1} obriga os pesos a somarem um, pois uma função eq deve valer zero, enquanto uma função ineq deve ficar maior ou igual a zero. O ponto de partida x0 também importa: pesos iguais são um início sensato e viável.
Dois detalhes decidem se a resposta está certa. Primeiro, a escala: as variâncias diárias são números como 0,0001, e o SLSQP para quando o objetivo muda menos que sua tolerância ftol (1e-6 por padrão), então com números diários crus ele pode parar no ponto de partida sem se mover. Anualize as entradas (vezes 252) e passe options={'ftol': 1e-12, 'maxiter': 500}, e sempre confira result.success e se os pesos obedecem às regras. Segundo, a formulação: maximizar o índice de Sharpe é uma razão, então minimize -(w @ mu) / sqrt(w @ cov @ w); a paridade de risco pede cotas de risco iguais wᵢ(Σw)ᵢ/ wᵀΣw, então minimize os desvios ao quadrado em relação a 1/n; e uma fronteira eficiente é um problema de variância mínima por retorno-alvo, com uma segunda restrição eq w @ mu - alvo.
- Escala e tolerância: anualize as entradas e aperte
ftol, ou o SLSQP pode parar onde começou. - Confira a resposta: os pesos devem somar um e obedecer aos limites; veja
result.success. - Uma ferramenta, quatro problemas: variância mínima, Sharpe negativo, cotas de risco iguais e um problema por retorno-alvo são chamadas a
minimizecom objetivos e restrições diferentes.
Lab: o que é avaliado
- Entradas anuais8 pts
- Retorno e risco de uma carteira8 pts
- Variância mínima com teto18 pts
- Índice de Sharpe máximo18 pts
- Contribuições ao risco10 pts
- Paridade de risco16 pts
- Uma fronteira ponto a ponto10 pts
- Três carteiras12 pts