import%20marimo%0A%0A__generated_with%20%3D%20%220.14.17%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0Awith%20app.setup%3A%0A%20%20%20%20import%20cvxpy%20as%20cp%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20polars%20as%20pl%0A%20%20%20%20from%20cvxsimulator%20import%20Builder%0A%0A%20%20%20%20from%20cvxrisk.portfolio%20import%20minrisk_problem%0A%20%20%20%20from%20cvxrisk.sample%20import%20SampleCovariance%0A%0A%20%20%20%20pd.options.plotting.backend%20%3D%20%22plotly%22%0A%0A%20%20%20%20from%20cvxsimulator%20import%20__version__%20as%20simulator_version%0A%0A%20%20%20%20from%20cvxrisk%20import%20__version__%20as%20risk_version%0A%0A%20%20%20%20print(f%22Risk%20version%3A%20%7Brisk_version%7D%22)%0A%20%20%20%20print(f%22Simulator%20version%3A%20%7Bsimulator_version%7D%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20%23%20Load%20some%20historic%20stock%20prices%0A%20%20%20%20prices%20%3D%20pl.read_csv(str(mo.notebook_location()%20%2F%20%22public%22%20%2F%20%22stock_prices.csv%22)%2C%20try_parse_dates%3DTrue)%0A%0A%20%20%20%20prices%20%3D%20prices.to_pandas().set_index(%22date%22)%0A%0A%20%20%20%20%23%20Estimate%20a%20series%20of%20historic%20covariance%20matrices%0A%20%20%20%20returns%20%3D%20prices.pct_change().dropna(axis%3D0%2C%20how%3D%22all%22)%0A%20%20%20%20return%20prices%2C%20returns%0A%0A%0A%40app.cell%0Adef%20_(prices%2C%20returns)%3A%0A%20%20%20%20cov%20%3D%20returns.ewm(com%3D60%2C%20min_periods%3D100).cov().dropna(axis%3D0%2C%20how%3D%22all%22)%0A%20%20%20%20start%20%3D%20cov.index%5B0%5D%5B0%5D%0A%0A%20%20%20%20%23%20Establish%20a%20risk%20model%0A%20%20%20%20_risk_model%20%3D%20SampleCovariance(num%3D20)%0A%0A%20%20%20%20%23%20Perform%20the%20backtest%0A%20%20%20%20_builder%20%3D%20Builder(prices%3Dprices.truncate(before%3Dstart)%2C%20initial_aum%3D1e6)%0A%0A%20%20%20%20_w%20%3D%20cp.Variable(len(_builder.prices.columns))%0A%20%20%20%20_problem%20%3D%20minrisk_problem(_risk_model%2C%20_w)%0A%0A%20%20%20%20for%20_t%2C%20_state%20in%20_builder%3A%0A%20%20%20%20%20%20%20%20_risk_model.update(%0A%20%20%20%20%20%20%20%20%20%20%20%20cov%3Dcov.loc%5B_t%5B-1%5D%5D.values%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20lower_assets%3Dnp.zeros(20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20upper_assets%3Dnp.ones(20)%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20don't%20reconstruct%20the%20problem%20in%20every%20iteration!%0A%20%20%20%20%20%20%20%20_problem.solve(solver%3D%22CLARABEL%22)%0A%0A%20%20%20%20%20%20%20%20_builder.weights%20%3D%20_w.value%0A%20%20%20%20%20%20%20%20_builder.aum%20%3D%20_state.aum%0A%0A%20%20%20%20_portfolio%20%3D%20_builder.build()%0A%0A%20%20%20%20_portfolio.nav.plot()%0A%20%20%20%20return%20(start%2C)%0A%0A%0A%40app.cell%0Adef%20_(prices%2C%20returns%2C%20start)%3A%0A%20%20%20%20from%20cvxrisk.cvar%20import%20CVar%0A%0A%20%20%20%20_risk_model%20%3D%20CVar(alpha%3D0.80%2C%20n%3D40%2C%20m%3D20)%0A%0A%20%20%20%20%23%20Perform%20the%20backtest%0A%20%20%20%20_builder%20%3D%20Builder(prices%3Dprices.truncate(before%3Dstart)%2C%20initial_aum%3D1e6)%0A%0A%20%20%20%20_w%20%3D%20cp.Variable(len(_builder.prices.columns))%0A%20%20%20%20_problem%20%3D%20minrisk_problem(_risk_model%2C%20_w)%0A%0A%20%20%20%20for%20_t%2C%20_state%20in%20_builder%3A%0A%20%20%20%20%20%20%20%20_risk_model.update(%0A%20%20%20%20%20%20%20%20%20%20%20%20returns%3Dreturns.truncate(after%3D_t%5B-1%5D).tail(40).values%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20lower_assets%3Dnp.zeros(20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20upper_assets%3Dnp.ones(20)%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20don't%20reconstruct%20the%20problem%20in%20every%20iteration!%0A%20%20%20%20%20%20%20%20_problem.solve(solver%3D%22CLARABEL%22)%0A%0A%20%20%20%20%20%20%20%20_builder.weights%20%3D%20_w.value%0A%20%20%20%20%20%20%20%20_builder.aum%20%3D%20_state.aum%0A%0A%20%20%20%20_portfolio%20%3D%20_builder.build()%0A%20%20%20%20_portfolio.nav.plot()%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
bd2ca5e39d827d310dba8cf209acb35b54a8c71b3f0716a33f18f145bd255d37