Replies: 1 comment 1 reply
-
|
In the plot you have to use the annualized measures so you compare the same metrics as your individual assets: fig = portfolio_MVO.plot_measures(
x=RiskMeasure.ANNUALIZED_STANDARD_DEVIATION,
y=PerfMeasure.ANNUALIZED_MEAN,
color_scale=RatioMeasure.SHARPE_RATIO,
hover_measures=[RiskMeasure.MAX_DRAWDOWN, RiskMeasure.CVAR],
)On the In any case, you need to pass the model_MVO = MeanRisk(
risk_measure=RiskMeasure.STANDARD_DEVIATION,
efficient_frontier_size=100,
portfolio_params=dict(name="MVO", annualized_factor=freq)
)
model_MVO.fit(X_train)
portfolio_MVO_train = model_MVO.predict(X_train)
portfolio_MVO_test = model_MVO.predict(X_test)
)This will fix your issue. On a side note, I never thought of passing a |
Beta Was this translation helpful? Give feedback.

Uh oh!
There was an error while loading. Please reload this page.
-
I am having problems with the annualization of returns and the annualized/non annualized metrics. Here is an example for monthly data: freq=12.
Efficient Frontier
-----------------------------------------------------------------------
st.markdown("### 🟥 Efficient Frontier")
Crear BasePortfolios
portfolio_base_train = BasePortfolio(
returns=X_train,
observations=X_train.index,
annualized_factor=freq,
risk_free_rate=0,
value_at_risk_beta=0.99,
cvar_beta=0.99
)
portfolio_base_test = BasePortfolio(
returns=X_test,
observations=X_test.index,
annualized_factor=freq,
risk_free_rate=0,
value_at_risk_beta=0.99,
cvar_beta=0.99
)
Entrenamiento del modelo MVO_FE
model_MVO = MeanRisk(
risk_measure=RiskMeasure.STANDARD_DEVIATION,
efficient_frontier_size=100,
portfolio_params=dict(name="MVO")
)
model_MVO.fit(portfolio_base_train)
Predicciones
portfolio_MVO_train = model_MVO.predict(portfolio_base_train)
portfolio_MVO_test = model_MVO.predict(portfolio_base_test)
portfolio_MVO_train.set_portfolio_params(tag="Train")
portfolio_MVO_test.set_portfolio_params(tag="Test")
Concatenar resultados
portfolio_MVO = portfolio_MVO_train + portfolio_MVO_test
Chart Frontera eficiente
fig = portfolio_MVO.plot_measures(
x=RiskMeasure.STANDARD_DEVIATION,
y=PerfMeasure.MEAN,
color_scale=RatioMeasure.SHARPE_RATIO,
hover_measures=[RiskMeasure.MAX_DRAWDOWN, RiskMeasure.CVAR],
)
fig.update_layout(
title='Efficient frontier (Train & Test)',
xaxis_title='Annualized volatility (%)',
yaxis_title='Annualized return (%)',
font=dict(family="Arial", size=12),
)
Calcular media y desviación estándar anualizadas por activo
assets_returns = X_train.mean()*freq
assets_vol = X_train.std()*np.sqrt(freq)
Añadir cada activo como un scatter point en la frontera eficiente
fig.add_trace(go.Scatter(
x=assets_vol,
y=assets_returns,
mode='markers+text',
marker=dict(color='red', size=10, symbol='circle'),
text=assets_vol.index,
textposition='top center',
name='Assets'
))
st.plotly_chart(fig, use_container_width=True)
Efficient Frontier
-----------------------------------------------------------------------
st.markdown("### 🟥 Efficient Frontier")
Crear BasePortfolios
portfolio_base_train = BasePortfolio(
returns=X_train,
observations=X_train.index,
annualized_factor=freq,
risk_free_rate=0,
value_at_risk_beta=0.99,
cvar_beta=0.99
)
portfolio_base_test = BasePortfolio(
returns=X_test,
observations=X_test.index,
annualized_factor=freq,
risk_free_rate=0,
value_at_risk_beta=0.99,
cvar_beta=0.99
)
Entrenamiento del modelo MVO_FE
model_MVO = MeanRisk(
risk_measure=RiskMeasure.ANNUALIZED_STANDARD_DEVIATION,
efficient_frontier_size=100,
portfolio_params=dict(name="MVO")
)
model_MVO.fit(portfolio_base_train)
Predicciones
portfolio_MVO_train = model_MVO.predict(portfolio_base_train)
portfolio_MVO_test = model_MVO.predict(portfolio_base_test)
portfolio_MVO_train.set_portfolio_params(tag="Train")
portfolio_MVO_test.set_portfolio_params(tag="Test")
Concatenar resultados
portfolio_MVO = portfolio_MVO_train + portfolio_MVO_test
Chart Frontera eficiente
fig = portfolio_MVO.plot_measures(
x=RiskMeasure.ANNUALIZED_STANDARD_DEVIATION,
y=PerfMeasure.ANNUALIZED_MEAN,
color_scale=RatioMeasure.ANNUALIZED_SHARPE_RATIO,
hover_measures=[RiskMeasure.MAX_DRAWDOWN, RiskMeasure.CVAR],
)
fig.update_layout(
title='Efficient frontier (Train & Test)',
xaxis_title='Annualized volatility (%)',
yaxis_title='Annualized return (%)',
font=dict(family="Arial", size=12),
)
Calcular media y desviación estándar anualizadas por activo
assets_returns = X_train.mean()*freq
assets_vol = X_train.std()*np.sqrt(freq)
Añadir cada activo como un scatter point en la frontera eficiente
fig.add_trace(go.Scatter(
x=assets_vol,
y=assets_returns,
mode='markers+text',
marker=dict(color='red', size=10, symbol='circle'),
text=assets_vol.index,
textposition='top center',
name='Assets'
))
st.plotly_chart(fig, use_container_width=True)
The mean-risk of the individual assets is correct.
Beta Was this translation helpful? Give feedback.
All reactions