python - 是否可以使用 gekko 进行投资组合优化?
问题描述
我一直在使用自己的简单代码进行蒙特卡罗模拟以创建示例投资组合。虽然有效,但我不觉得我得到了最好的结果。
我不是数学专业的或任何东西。是否可以使用 gekko 来解决某个投资组合,例如最高夏普比率或最小方差、最高回报等?
在我尝试自己弄清楚之前,我想知道这是否可能。
我一直在网上寻找代码示例,但似乎找不到任何东西。可能吗 ?有任何想法吗 ?
解决方案
只要您可以用方程和目标在数学上描述优化问题,它就应该是可能的。下面是一个示例,其中 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
如果您想包括不确定性,那么有几种策略可以做到这一点,例如通过从不确定性分布中采样同时求解模型的多个实例。
推荐阅读
- javascript - 检查连接状态后重定向到其他页面
- php - Laravel 中的多个队列
- ios - 带有转义闭包的 Swift 泛型函数
- android - 更新到 3.1.2 后无法在 android studio 中调试 c++ 代码
- php - Laravel 外键约束错误删除父级时的子级数据
- android - 如何在反应原生应用程序中添加圆形底部可折叠工具栏?
- mysql - 在不使用参数 schedule 的情况下在 mysql 数据库中输入新数据时通知 Logstash
- mysql - 查询小于或等于一组日期范围的日期
- java - Tomcat 8 NIO,它是如何工作的?
- c# - 在 C# 中使用秒表定期检查 5 秒