시나리오 : 다중 기간 시나리오에서 여러 제약 조건 (가중치, 위험, 위험 회피 등)을 사용하여 여러 포트폴리오 최적화를 수행하려고합니다.파이썬에서 다중 기간 포트폴리오 최적화
내가 이미 한 것 : cvxpy의 예에서 포트폴리오 구성의 자산에 대한 가중치 목록을 생성하는 비선형 2 차 수식 아래에서 포트폴리오를 최적화하는 방법을 찾았습니다. 내 문제는 월간 데이터가 15 년이지만 각기 다른 기간에 최적화하는 방법을 알지 못한다는 것입니다 (코드는 현재 양식에서 내 데이터의 전체 기간 동안 가장 좋은 구성을 산출합니다).
질문 1 : 다른 기간 동안 코드를 최적화 할 수 있습니까? 1, 3, 4, 6, 9, 12 개월 (이 경우 각각의 기간에 대해 다른 가중치를 산출 함)과 같은 경우 어떻게 그럴 수 있습니까?
질문 2 : 각 포트폴리오 구성의 자산 수를 제한 할 수 있습니까? 이를 달성하는 가장 좋은 방법은 무엇입니까? (현재 코드는 이들 모두를 사용하지만 애셋의 수가 제한되어있을 때 턴 오버 레벨을 제어하기 위해 테스트하고 싶습니다.)
코드 :
from cvxpy import *
from cvxopt import *
import pandas as pd
import numpy as np
prices = pd.DataFrame()
logret = pd.DataFrame()
normret = pd.DataFrame()
returns = pd.DataFrame()
prices = pd.read_excel(open('//folder//Dgms89//calculation v3.xlsx', 'rb'), sheetname='Prices Final')
logret = pd.read_excel(open('//folder//Dgms89//calculation v3.xlsx', 'rb'), sheetname='Returns log')
normret = pd.read_excel(open('//folder//Dgms89//calculation v3.xlsx', 'rb'), sheetname='Returns normal')
returns = normret
def calculate_portfolio(returns, selected_solver):
cov_mat = returns.cov()
Sigma = np.asarray(cov_mat.values)
w = Variable(len(cov_mat))
gamma = quad_form(w, Sigma)
prob = Problem(Minimize(gamma), [sum_entries(w) == 1])
prob.solve(solver=selected_solver)
weights = []
for weight in w.value:
weights.append(float(weight[0]))
return weights
답변 해 주셔서 감사합니다. MATLAB에서 포트폴리오 최적화를위한 MIQP를 설명하는 방법에 대한 가이드를 찾았습니다. 그런 일이 파이썬에서 가능합니까? 이런 종류의 문제를 보여주는 문서가 있습니까? – DGMS89
많은 솔버 (예 : Cplex, Gurobi)가 Python 환경에서 MIQP를 지원합니다. 문서가 있습니다. –