微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以使用 Gekko 进行投资组合优化?

如何解决是否可以使用 Gekko 进行投资组合优化?

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

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

在我尝试自己解决之前,我想知道是否有可能。

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

解决方法

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

TypeError                                 Traceback (most recent call last)
<ipython-input-273-fb49f396fab5> in <module>
     26 if __name__ == '__main__':
     27     temp_extract()
---> 28     upload_blobs()
     29 

<ipython-input-273-fb49f396fab5> in upload_blobs()
     22       print(os.path.getsize(file))
     23       with open(file,'r') as f:
---> 24         blob.upload_blob(data = f,overwrite=True)
     25 
     26 if __name__ == '__main__':

~/Library/Python/3.7/lib/python/site-packages/azure/core/tracing/decorator.py in wrapper_use_tracer(*args,**kwargs)
     81             span_impl_type = settings.tracing_implementation()
     82             if span_impl_type is None:
---> 83                 return func(*args,**kwargs)
     84 
     85             # Merge span is parameter is set,but only if no explicit parent are passed

~/Library/Python/3.7/lib/python/site-packages/azure/storage/blob/_blob_client.py in upload_blob(self,data,blob_type,length,metadata,**kwargs)
    683             **kwargs)
    684         if blob_type == BlobType.BlockBlob:
--> 685             return upload_block_blob(**options)
    686         if blob_type == BlobType.PageBlob:
    687             return upload_page_blob(**options)

~/Library/Python/3.7/lib/python/site-packages/azure/storage/blob/_upload_helpers.py in upload_block_blob(client,stream,overwrite,headers,validate_content,max_concurrency,blob_settings,encryption_options,**kwargs)
     86                 data = data.read(length)
     87                 if not isinstance(data,six.binary_type):
---> 88                     raise TypeError('Blob data should be of type bytes.')
     89             except AttributeError:
     90                 pass

**TypeError: Blob data should be of type bytes.**

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

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))

如果您想包括不确定性,那么有几种策略可以做到这一点,例如模型的 simultaneously solving multiple instances 从不确定性分布中采样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。