首页 > 解决方案 > 是否可以使用 gekko 进行投资组合优化?

问题描述

我一直在使用自己的简单代码进行蒙特卡罗模拟以创建示例投资组合。虽然有效,但我不觉得我得到了最好的结果。

我不是数学专业的或任何东西。是否可以使用 gekko 来解决某个投资组合,例如最高夏普比率或最小方差、最高回报等?

在我尝试自己弄清楚之前,我想知道这是否可能。

我一直在网上寻找代码示例,但似乎找不到任何东西。可能吗 ?有任何想法吗 ?

标签: pythonoptimizationmathematical-optimizationquantitative-financegekko

解决方案


只要您可以用方程和目标在数学上描述优化问题,它就应该是可能的。下面是一个示例,其中 3 个潜在资产介于 0 到 5 个单位之间,总预算为 100。目标是最大化夏普比率的平均值。我不是投资组合优化方面的专家,因此方程或目标函数可能不正确。这是一个如何用线性规划解决相关优化问题的例子。

from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Array(m.Var,3,value=1,lb=0,ub=5)
# asset price
p = [5,10,6.2]
# expected return on the asset
Rp = [0.1,0.05,0.3]
# risk free rate of return
Rf = [0.01,0.02,0.01]
# standard deviation of returns of the asset
sigma = [0.1,0.2,0.15]

# linear inequality constraint Ax<b
A = [[3, 6, 1], [8, 4, 3], [2, 2, 2]]
b = [30, 44, 35]
m.axb(A,b,x=x,etype='<')

# total budget
m.Equation(m.sum(x)<100)

# total assets purchased
ta = m.Intermediate(m.sum(x))

# maximize mean Sharpe ratio of portfolio
m.Maximize(m.sum([x[i]*(Rp[i]-Rf[i])/sigma[i] for i in range(3)])/ta)

m.options.solver = 1
m.solve(disp=True)
for i in range(3):
    print ('Asset ',i+1,x[i].value[0])
print ('Objective: ' + str(-m.options.objfcnval))

Gekko 还允许具有连续或混合整数决策变量的非线性方程或目标函数。这个特定示例是具有唯一解的线性确定性模型。

Asset  1 0.0
Asset  2 0.29204291501
Asset  3 5.0
Objective: 1.8349195688

如果您想包括不确定性,那么有几种策略可以做到这一点,例如通过从不确定性分布中采样同时求解模型的多个实例。


推荐阅读