Напишем задачу на оптимизацию портфеля инвестиций. Допустим, у нас есть список акций и мы хотим определить, какое количество каждой акции нужно купить, чтобы получить наибольшую прибыль при заданных ограничениях на общий объём инвестиций, риски и прочие факторы.

Ответы

Ответ дал: danil2017pugin
0

from scipy.optimize import minimize

# функция для расчёта доходности портфеля

def portfolio_return(x):

total_return = 0

for stock, weight in zip(stocks.values(), x):

total_return += stock['return'] * weight

return -total_return

Ответ дал: salpsx
2

from scipy.optimize import minimize

# функция для расчёта доходности портфеля

def portfolio_return(x):

   total_return = 0

   for stock, weight in zip(stocks.values(), x):

       total_return += stock['return'] * weight

   return -total_return

# функция для расчёта риска портфеля

def portfolio_risk(x):

   total_risk = 0

   for i in range(len(stocks)):

       for j in range(len(stocks)):

           if i != j:

               stock1, stock2 = list(stocks.values())[i], list(stocks.values())[j]

               total_risk += stock1['return'] * stock2['return'] * x[i] * x[j]

   return total_risk

# ограничения на бюджет и риск

constraints = [

   {'type': 'ineq', 'fun': lambda x: budget - sum(stock['price'] * weight for stock, weight in zip(stocks.values(), x))},

   {'type': 'ineq', 'fun': lambda x: risk - portfolio_risk(x))

]

# начальные значения весов акций

x0 = [1/len(stocks)] * len(stocks)

# оптимизация

res = minimize(portfolio_return, x0,

Похожие вопросы