繁体   English   中英

查找基于函数返回提供最佳组合的列组合

[英]Finding combination of columns which provides best combination based on function return

我有一个每日回报6个投资组合的数据框(PORT1,PORT2,PORT3,... PORT6)。

我已经定义了复合年回报和风险调整回报的函数。 我可以为任何一个PORT运行此功能。

我想找到一个组合的组合(假设相等的权重)来获得最高的回报。 例如,PORT1,PORT3,PORT4和PORT6的组合可以提供最高风险调整回报。 是否有方法在所有组合上自动运行已定义的函数并获得所需的组合?

没有包含代码,因为我认为没有必要显示用于确定风险调整回报的计算。

def returns(PORT):
   val = ... [computation of return here for PORT]
   return val

在多维空间内寻找最佳位置是可能的,但是人们已经找到了更好的方法来实现这一目标。

一开始的问题是确定你的可能性空间。 你有六个维度,并且可能你想在所有这六个维度中分配1个单位的“东西”,这样分配的矢量{a,b,c,d,e,f }总和为1 这仍然是无穷无尽的数字,所以也许我们只是以0.10的增量开始。 因此,在6个维度上可能增加10个,为您提供10 ^ 6种可能性。

因此,简单的强力方法是“简单地”在整个参数空间中运行函数,存储值并选择最佳值。

这可能不是您想要的答案,存在其他方法,包括随机猜测并将结果限制为更易于管理的数字。 但是性能的提升被一些不确定性所抵消 - 而且与客户的一些潜在的困难对话“你是什么意思,你随机做了什么?!”。

为了对可能是最优的做出任何猜测,了解每个投资组合在不同情况下的响应曲线以及您可能期望它们在其下运行的各种风险/回报概况将是有帮助的。 它们是线性的,二次的,还是更复杂? 如果您可以用数学方法对它们进行建模,则可以使用算法来减少搜索空间。

简短(但基本)答案是"it depends"

你可以做

import itertools
best_return = 0
for r in range(len(PORTS)):
     for PORT in itertools.combinations(PORTS,r):
          cur_return = returns(PORT)
          if cur_return  > best_return :
                 best_return = cur_return
                 best_PORT = PORT

你也可以

  max([max([PORT for PORT in itertools.combinations(PORTS,r)], key = returns)
         for r in range(len(PORTS))], key = returns)

然而,这更像是一个经济问题,而不是CS问题。 给定一组头寸及其收益和风险,有明确的公式可以找到最优投资组合,而不必蛮力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM