import%20marimo%0A%0A__generated_with%20%3D%20%220.10.10%22%0Aapp%20%3D%20marimo.App()%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20Monkey%20portfolios%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(__file__)%3A%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%0A%20%20%20%20folder%20%3D%20Path(__file__).parent%0A%20%20%20%20return%20Path%2C%20folder%2C%20np%2C%20pd%0A%0A%0A%40app.cell%0Adef%20_(pd)%3A%0A%20%20%20%20from%20cvx.simulator%20import%20Builder%0A%0A%20%20%20%20pd.options.plotting.backend%20%3D%20%22plotly%22%0A%20%20%20%20return%20(Builder%2C)%0A%0A%0A%40app.cell%0Adef%20_(folder%2C%20pd)%3A%0A%20%20%20%20prices%20%3D%20pd.read_csv(folder%20%2F%20%22data%22%20%2F%20%22stock-prices.csv%22%2C%20header%3D0%2C%20index_col%3D0%2C%20parse_dates%3DTrue)%0A%20%20%20%20return%20(prices%2C)%0A%0A%0A%40app.cell%0Adef%20_(Builder%2C%20np%2C%20prices)%3A%0A%20%20%20%20_builder%20%3D%20Builder(prices%3Dprices%2C%20initial_aum%3D1000000.0)%0A%20%20%20%20np.random.seed(42)%0A%20%20%20%20for%20_time%2C%20_state%20in%20_builder%3A%0A%20%20%20%20%20%20%20%20_n%20%3D%20len(_state.assets)%0A%20%20%20%20%20%20%20%20_w%20%3D%20np.random.rand(_n)%0A%20%20%20%20%20%20%20%20_w%20%3D%20_w%20%2F%20np.sum(_w)%0A%20%20%20%20%20%20%20%20assert%20np.all(_w%20%3E%3D%200)%0A%20%20%20%20%20%20%20%20assert%20np.allclose(np.sum(_w)%2C%201)%0A%20%20%20%20%20%20%20%20_builder.weights%20%3D%20_w%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.snapshot(aggregate%3DTrue)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Builder%2C%20np%2C%20prices)%3A%0A%20%20%20%20_builder%20%3D%20Builder(prices%3Dprices%2C%20initial_aum%3D1000000.0)%0A%20%20%20%20np.random.seed(42)%0A%20%20%20%20for%20_time%2C%20_state%20in%20_builder%3A%0A%20%20%20%20%20%20%20%20_n%20%3D%20len(_state.assets)%0A%20%20%20%20%20%20%20%20_w%20%3D%20np.random.rand(_n)%0A%20%20%20%20%20%20%20%20_w%20%3D%20_w%20%2F%20np.sum(_w)%0A%20%20%20%20%20%20%20%20assert%20np.all(_w%20%3E%3D%200)%0A%20%20%20%20%20%20%20%20assert%20np.allclose(np.sum(_w)%2C%201)%0A%20%20%20%20%20%20%20%20_builder.weights%20%3D%20_w%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.snapshot(aggregate%3DTrue)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(mo%2C)%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
49fddfa32cdc9f2d788456fdb14c29ddebbcc9a977cd056cd0d56153c36b6968