是否可以使用 gekko 进行投资组合优化?
Is it possible to use gekko to do portfolio Optimisation?
我一直在使用我自己的简单代码进行 Monte Carlo 模拟来创建示例投资组合。虽然有效,但我觉得我没有得到最好的结果。
我不是数学专业的。是否可以使用 gekko 来求解某个投资组合,例如最高锐化比率或最小方差、最高 return 等?
在我尝试自己解决之前,我想知道这是否可能。
我一直在网上寻找代码示例,但似乎找不到任何东西。可能吗 ?有什么想法吗?
只要你能用数学方程式和objective来描述优化问题,应该是可以的。下面是一个示例,其中 3 个潜在资产在 0 到 5 个单位之间,总预算为 100。objective 是为了最大化夏普比率的平均值。我不是投资组合优化方面的专家,因此方程式或 objective 函数可能不正确。这是一个如何用 linear programming.
解决相关优化问题的例子
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 还允许具有连续或混合整数决策变量的非线性方程或 objective 函数。此特定示例是具有唯一解的线性确定性模型。
Asset 1 0.0
Asset 2 0.29204291501
Asset 3 5.0
Objective: 1.8349195688
如果你想包括不确定性,那么有几种策略可以做到这一点,例如 simultaneously solving multiple instances 从不确定性分布中抽样的模型。
我一直在使用我自己的简单代码进行 Monte Carlo 模拟来创建示例投资组合。虽然有效,但我觉得我没有得到最好的结果。
我不是数学专业的。是否可以使用 gekko 来求解某个投资组合,例如最高锐化比率或最小方差、最高 return 等?
在我尝试自己解决之前,我想知道这是否可能。
我一直在网上寻找代码示例,但似乎找不到任何东西。可能吗 ?有什么想法吗?
只要你能用数学方程式和objective来描述优化问题,应该是可以的。下面是一个示例,其中 3 个潜在资产在 0 到 5 个单位之间,总预算为 100。objective 是为了最大化夏普比率的平均值。我不是投资组合优化方面的专家,因此方程式或 objective 函数可能不正确。这是一个如何用 linear programming.
解决相关优化问题的例子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 还允许具有连续或混合整数决策变量的非线性方程或 objective 函数。此特定示例是具有唯一解的线性确定性模型。
Asset 1 0.0
Asset 2 0.29204291501
Asset 3 5.0
Objective: 1.8349195688
如果你想包括不确定性,那么有几种策略可以做到这一点,例如 simultaneously solving multiple instances 从不确定性分布中抽样的模型。