import%20marimo%0A%0A__generated_with%20%3D%20%220.13.15%22%0Aapp%20%3D%20marimo.App()%0A%0Awith%20app.setup%3A%0A%20%20%20%20import%20cvxpy%20as%20cvx%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20numpy%20as%20np%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%20Leveraged%20Portfolios%0A%0A%20%20%20%20https%3A%2F%2Fen.wikipedia.org%2Fwiki%2F130%25E2%2580%259330_fund%0A%0A%20%20%20%20**Thomas%20Schmelzer**%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%20A%20130%2F30%20Equity%20Portfolio%0A%0A%20%20%20%20-%20Allocate%20capital%20%24C%3D1%24.%20Sell%20short%20at%20most%20%24c%20%3D%200.3%24%20to%20finance%20a%20long%20position%20of%20%241%20%2B%20c%24.%0A%20%20%20%20-%20Universe%20of%20%24n%24%20assets.%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%5Cbegin%7Balign%7D%5Cmathbf%7Bx%7D%5E%7B*%7D%3D%5Carg%5Cmax_%7B%5Cmathbf%7Bx%7D%20%5Cin%20%5Cmathbb%7BR%7D%5En%7D%26%20%5Cmu%5E%7BT%7D%5Cmathbf%7Bx%7D%5C%5C%0A%20%20%20%20%5Ctext%7Bs.t.%20%7D%20%26%5CSigma%5C%2Cx_i%3D1%5C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26%5CSigma%5C%2C%5Clvert%20x_i%5Crvert%20%5Cleq%201%20%2B%202c%5C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26%5Csqrt%7B%5Cmathbf%7Bx%7D%5ET%5Cmathbf%7BC%7D%5Cmathbf%7Bx%7D%7D%20%5Cleq%20%5Csigma_%7B%5Cmax%7D%0A%20%20%20%20%5Cend%7Balign%7D%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20maximize(objective%2C%20constraints%3DNone)%3A%0A%20%20%20%20%22%22%22Maximizes%20a%20given%20objective%20function%20subject%20to%20optional%20constraints.%0A%0A%20%20%20%20This%20function%20creates%20and%20solves%20a%20convex%20optimization%20problem%20to%20find%20the%0A%20%20%20%20maximum%20value%20of%20the%20provided%20objective%20function%2C%20subject%20to%20any%20specified%0A%20%20%20%20constraints.%0A%0A%20%20%20%20Args%3A%0A%20%20%20%20%20%20%20%20objective%3A%20The%20objective%20function%20to%20maximize.%0A%20%20%20%20%20%20%20%20constraints%3A%20Optional%20list%20of%20constraints%20for%20the%20optimization%20problem.%0A%0A%20%20%20%20Returns%3A%0A%20%20%20%20%20%20%20%20The%20optimal%20value%20of%20the%20objective%20function.%0A%20%20%20%20%22%22%22%0A%20%20%20%20return%20cvx.Problem(cvx.Maximize(objective)%2C%20constraints).solve()%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20%23%20make%20some%20random%20data%2C%20e.g.%20cov-matrix%20and%20expected%20returns%0A%20%20%20%20_n%20%3D%20100%0A%20%20%20%20_c%20%3D%200.9%0A%20%20%20%20_c_matrix%20%3D%20_c%20*%20np.ones((_n%2C%20_n))%20%2B%20(1%20-%20_c)%20*%20np.eye(_n)%0A%20%20%20%20_mu%20%3D%200.05%20*%20np.sin(range(0%2C%20_n))%0A%20%20%20%20%23%20maximal%20volatility%20and%20leverage...%0A%20%20%20%20_sigma_max%20%3D%201.0%0A%20%20%20%20_excess%20%3D%200.3%0A%0A%20%20%20%20_x%20%3D%20cvx.Variable(_n)%0A%20%20%20%20_constraints%20%3D%20%5B%0A%20%20%20%20%20%20%20%20cvx.sum(_x)%20%3D%3D%201%2C%0A%20%20%20%20%20%20%20%20cvx.norm(_x%2C%201)%20%3C%3D%201%20%2B%202%20*%20_excess%2C%0A%20%20%20%20%20%20%20%20cvx.quad_form(_x%2C%20_c_matrix)%20%3C%3D%20_sigma_max%20*%20_sigma_max%2C%0A%20%20%20%20%5D%0A%20%20%20%20maximize(objective%3D_x.T%20%40%20_mu%2C%20constraints%3D_constraints)%0A%20%20%20%20_f%20%3D%20_x.value%0A%0A%20%20%20%20print(f%22Sum%20of%20positive%20weights%3A%20%7Bnp.sum(_f%5B_f%20%3E%200%5D)%7D%22)%0A%20%20%20%20print(f%22Sum%20of%20negative%20weights%3A%20%7Bnp.sum(_f%5B_f%20%3C%200%5D)%7D%22)%0A%20%20%20%20print(f%22Sum%20of%20all%20weights%3A%20%20%20%20%20%20%7Bnp.sum(_f)%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%20Summary%0A%0A%20%20%20%20-%20Leverage%20is%20here%20a%20constraint%20for%20the%20%241%24-norm%20of%20the%20weight%20vector.%0A%0A%20%20%20%20-%20Note%20that%20we%20do%20not%20solve%20two%20problems%20for%20the%20short%20and%20long%20part%20of%20the%20portfolio.%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%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
8501d30be6daddbfd118324dd178077644ac1bf7d1e108f1598e50aa4132e3c4