import%20marimo%0A%0A__generated_with%20%3D%20%220.14.16%22%0Aapp%20%3D%20marimo.App()%0A%0Awith%20app.setup%3A%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20cvxsimulator%20as%20sim%0A%20%20%20%20import%20marimo%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20plotly.io%20as%20pio%0A%20%20%20%20import%20polars%20as%20pl%0A%0A%20%20%20%20pio.renderers.default%20%3D%20%22plotly_mimetype%22%0A%0A%20%20%20%20%23%20path%20%3D%20marimo.notebook_location()%0A%20%20%20%20path%20%3D%20Path(__file__).parent%0A%0A%20%20%20%20prices_file%20%3D%20str(path%20%2F%20%22public%22%20%2F%20%22stock-prices-new.csv%22)%0A%0A%20%20%20%20prices%20%3D%20pl.read_csv(prices_file%2C%20try_parse_dates%3DTrue).to_pandas().set_index(%22Date%22)%0A%20%20%20%20for%20col%20in%20prices.columns%3A%0A%20%20%20%20%20%20%20%20prices%5Bcol%5D%20%3D%20pd.to_numeric(prices%5Bcol%5D%2C%20errors%3D%22coerce%22).astype(%22float64%22)%0A%0A%0A%40app.function%0Adef%20run_simulation()%3A%0A%20%20%20%20%22%22%22Run%20a%20portfolio%20simulation%20with%20random%20weights.%0A%0A%20%20%20%20Creates%20a%20portfolio%20simulation%20using%20cvxsimulator%20with%20an%20initial%20AUM%20of%201%20million.%0A%20%20%20%20At%20each%20time%20step%2C%20assigns%20random%20weights%20to%20assets%20and%20maintains%20the%20same%20AUM.%0A%20%20%20%20Displays%20portfolio%20snapshot%20and%20metrics%20after%20simulation.%0A%0A%20%20%20%20Returns%3A%0A%20%20%20%20%20%20%20%20cvxsimulator.Portfolio%3A%20The%20built%20portfolio%20object%20with%20simulation%20results.%0A%20%20%20%20%22%22%22%0A%20%20%20%20print(f%22Version%20of%20cvxsimulator%3A%20%7Bsim.__version__%7D%22)%0A%0A%20%20%20%20b%20%3D%20sim.Builder(prices%3Dprices%2C%20initial_aum%3D1e6)%0A%20%20%20%20rng%20%3D%20np.random.default_rng(0)%0A%0A%20%20%20%20for%20_t%2C%20state%20in%20b%3A%0A%20%20%20%20%20%20%20%20n%20%3D%20len(state.assets)%0A%20%20%20%20%20%20%20%20w%20%3D%20rng.uniform(0%2C%201%2C%20n)%0A%20%20%20%20%20%20%20%20b.weights%20%3D%20w%20%2F%20np.sum(w)%0A%20%20%20%20%20%20%20%20b.aum%20%3D%20state.aum%0A%0A%20%20%20%20portfolio%20%3D%20b.build()%0A%0A%20%20%20%20print(%22Simulation%20complete%22)%0A%0A%20%20%20%20return%20portfolio%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20marimo.md(%22%23%20A%20random%20walk%20down%20an%20equity%20portfolio%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20create_portfolio()%3A%0A%20%20%20%20%22%22%22Create%20a%20portfolio%20by%20running%20the%20simulation.%0A%0A%20%20%20%20Returns%3A%0A%20%20%20%20%20%20%20%20tuple%3A%20A%20tuple%20containing%20the%20portfolio%20object.%0A%20%20%20%20%22%22%22%0A%20%20%20%20portfolio%20%3D%20run_simulation()%0A%20%20%20%20return%20(portfolio%2C)%0A%0A%0A%40app.cell%0Adef%20_(portfolio)%3A%0A%20%20%20%20portfolio.snapshot()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(portfolio)%3A%0A%20%20%20%20portfolio.reports.metrics()%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
d2b6b57ce5822be2428e34c8de1a7ee737e82bcfee15acef0ff536a38dccd28c