Optimización de Carteras en MATLAB: el Objeto Portfolio y la Frontera Eficiente
En cuanto operas más de una estrategia o instrumento, la pregunta "¿cuánto asigno a cada uno?" pesa más en el resultado final que cualquier señal de entrada individual. Esa pregunta — la asignación — es la que responde el marco de media-varianza de Markowitz, y la Financial Toolbox de MATLAB incluye un objeto Portfolio diseñado justo para eso: estimar los insumos, imponer restricciones realistas, trazar la frontera eficiente y elegir una cartera sobre ella. Esta guía recorre el flujo de trabajo y, sobre todo, los puntos donde suele romperse.
Media-varianza en un párrafo
Cada activo (o estrategia) se resume en su rentabilidad esperada y en cómo se mueve respecto a los demás — la matriz de covarianzas. Para cada nivel de riesgo existe una combinación de pesos con la máxima rentabilidad esperada; la curva de todas esas combinaciones es la frontera eficiente. La diversificación es el almuerzo gratis: dos flujos de retorno mediocres y poco correlacionados suelen combinarse en algo mejor que cualquiera de los dos por separado. La matemática tiene ochenta años; la dificultad está entera en los insumos.
El flujo de trabajo básico
Tres líneas de preparación y el optimizador ya está funcionando. El trabajo interesante está en las restricciones, que es donde el objeto se gana el sueldo:
Dónde se rompe la media-varianza en la práctica
Las rentabilidades esperadas son el eslabón débil. El optimizador es extremadamente sensible al vector de medias, y las medias históricas son la estimación más ruidosa de las finanzas. Si le das los promedios del último año, apalancará lo que tuvo suerte recientemente — así es como la media-varianza se convierte en una máquina de maximizar errores. Mitigaciones prácticas: contrae (shrink) tus estimaciones hacia un valor común, usa historiales más largos de lo que parece natural, o directamente prescinde de las rentabilidades esperadas y calcula carteras de mínima varianza o ponderaciones basadas en riesgo, que solo necesitan la covarianza.
La matriz de covarianzas también es inestable. Con N activos estás estimando N(N+1)/2 parámetros; con historiales cortos, la matriz muestral es ruido disfrazado. Los estimadores con contracción (estilo Ledoit–Wolf, vía covarianceShrinkage o tu propia mezcla hacia un objetivo diagonal) producen fronteras mucho más estables fuera de muestra.
Las correlaciones dependen del régimen. La diversificación que mediste en un mercado tranquilo es exactamente la que desaparece en uno estresado, cuando las correlaciones se disparan hacia 1. Somete cualquier asignación a un test con covarianzas de periodos de crisis antes de fiarte, y trata la frontera como una herramienta de planificación, no como una garantía.
Valídalo como un backtest, porque lo es. Elegir los pesos con los mismos datos con los que luego los evalúas es optimización dentro de muestra, con todo el autoengaño habitual. Hazlo walk-forward: estima sobre una ventana móvil, mantén los pesos un periodo, avanza y repite, y compara el resultado contra el aburrido benchmark de pesos iguales. Si tu cartera optimizada no bate al 1/N fuera de muestra — un resultado inquietantemente frecuente — toda la maquinaria extra no está pagando el alquiler.
Más allá de la varianza
La varianza castiga por igual las subidas y las bajadas, y los retornos de las estrategias de trading rara vez son simétricos. La misma toolbox ofrece PortfolioCVaR (optimizar sobre el valor en riesgo condicional, es decir, la media de la peor cola) y PortfolioMAD (desviación absoluta media) con una API casi idéntica, así que cambiar de medida de riesgo es cuestión de una línea. Para repartir capital entre tus propios robots, el enfoque del CVaR en las pérdidas de cola suele reflejar mejor cómo vives el riesgo en realidad: como drawdowns, no como oscilación diaria.
Conclusión
El objeto Portfolio convierte un problema de optimización de posgrado en unas pocas líneas legibles, y esa comodidad es precisamente la razón para ser disciplinado: restringe los pesos, contrae las estimaciones, estresa las correlaciones y valida walk-forward. Con eso, la media-varianza se convierte en lo que debe ser — una forma sistemática de dimensionar un conjunto de estrategias, en lugar de una manera muy segura de sobreajustar la historia.
En cuanto operas más de una estrategia o instrumento, la pregunta "¿cuánto asigno a cada uno?" pesa más en el resultado final que cualquier señal de entrada individual. Esa pregunta — la asignación — es la que responde el marco de media-varianza de Markowitz, y la Financial Toolbox de MATLAB incluye un objeto Portfolio diseñado justo para eso: estimar los insumos, imponer restricciones realistas, trazar la frontera eficiente y elegir una cartera sobre ella. Esta guía recorre el flujo de trabajo y, sobre todo, los puntos donde suele romperse.
Media-varianza en un párrafo
Cada activo (o estrategia) se resume en su rentabilidad esperada y en cómo se mueve respecto a los demás — la matriz de covarianzas. Para cada nivel de riesgo existe una combinación de pesos con la máxima rentabilidad esperada; la curva de todas esas combinaciones es la frontera eficiente. La diversificación es el almuerzo gratis: dos flujos de retorno mediocres y poco correlacionados suelen combinarse en algo mejor que cualquiera de los dos por separado. La matemática tiene ochenta años; la dificultad está entera en los insumos.
El flujo de trabajo básico
% retornos: matriz T-por-N de retornos diarios de estrategias/activos
p = Portfolio('AssetList', nombres);
p = estimateAssetMoments(p, retornos); % vector de medias + covarianza histórica
p = setDefaultConstraints(p); % invertido al 100%, solo largos
wFrontera = estimateFrontier(p, 20); % 20 puntos de la frontera
[riesgo, ret] = estimatePortMoments(p, wFrontera);
plotFrontier(p, 20);
wSharpe = estimateMaxSharpeRatio(p); % la cartera tangente
Tres líneas de preparación y el optimizador ya está funcionando. El trabajo interesante está en las restricciones, que es donde el objeto se gana el sueldo:
- Límites por activo: setBounds(p, 0.02, 0.25) mantiene cada componente entre el 2% y el 25% — la defensa más eficaz contra un optimizador que quiere apostarlo todo a lo que mejor salió en el backtest.
- Grupos: setGroups limita la exposición por categoría (por ejemplo, "todos los robots seguidores de tendencia juntos ≤ 50%").
- Rotación y costes: setTurnover y setCosts evitan que el rebalanceo "óptimo" sea un viaje carísimo por el spread cada semana.
Dónde se rompe la media-varianza en la práctica
Las rentabilidades esperadas son el eslabón débil. El optimizador es extremadamente sensible al vector de medias, y las medias históricas son la estimación más ruidosa de las finanzas. Si le das los promedios del último año, apalancará lo que tuvo suerte recientemente — así es como la media-varianza se convierte en una máquina de maximizar errores. Mitigaciones prácticas: contrae (shrink) tus estimaciones hacia un valor común, usa historiales más largos de lo que parece natural, o directamente prescinde de las rentabilidades esperadas y calcula carteras de mínima varianza o ponderaciones basadas en riesgo, que solo necesitan la covarianza.
La matriz de covarianzas también es inestable. Con N activos estás estimando N(N+1)/2 parámetros; con historiales cortos, la matriz muestral es ruido disfrazado. Los estimadores con contracción (estilo Ledoit–Wolf, vía covarianceShrinkage o tu propia mezcla hacia un objetivo diagonal) producen fronteras mucho más estables fuera de muestra.
Las correlaciones dependen del régimen. La diversificación que mediste en un mercado tranquilo es exactamente la que desaparece en uno estresado, cuando las correlaciones se disparan hacia 1. Somete cualquier asignación a un test con covarianzas de periodos de crisis antes de fiarte, y trata la frontera como una herramienta de planificación, no como una garantía.
Valídalo como un backtest, porque lo es. Elegir los pesos con los mismos datos con los que luego los evalúas es optimización dentro de muestra, con todo el autoengaño habitual. Hazlo walk-forward: estima sobre una ventana móvil, mantén los pesos un periodo, avanza y repite, y compara el resultado contra el aburrido benchmark de pesos iguales. Si tu cartera optimizada no bate al 1/N fuera de muestra — un resultado inquietantemente frecuente — toda la maquinaria extra no está pagando el alquiler.
Más allá de la varianza
La varianza castiga por igual las subidas y las bajadas, y los retornos de las estrategias de trading rara vez son simétricos. La misma toolbox ofrece PortfolioCVaR (optimizar sobre el valor en riesgo condicional, es decir, la media de la peor cola) y PortfolioMAD (desviación absoluta media) con una API casi idéntica, así que cambiar de medida de riesgo es cuestión de una línea. Para repartir capital entre tus propios robots, el enfoque del CVaR en las pérdidas de cola suele reflejar mejor cómo vives el riesgo en realidad: como drawdowns, no como oscilación diaria.
Conclusión
El objeto Portfolio convierte un problema de optimización de posgrado en unas pocas líneas legibles, y esa comodidad es precisamente la razón para ser disciplinado: restringe los pesos, contrae las estimaciones, estresa las correlaciones y valida walk-forward. Con eso, la media-varianza se convierte en lo que debe ser — una forma sistemática de dimensionar un conjunto de estrategias, en lugar de una manera muy segura de sobreajustar la historia.