Поиск комбинации столбцов, которая обеспечивает наилучшую комбинацию на основе возврата функции - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть фрейм данных с ежедневной доходностью 6 портфелей (PORT1, PORT2, PORT3, ... PORT6).

Я определил функции для составной годовой доходности и доходности с поправкой на риск.Я могу запустить эту функцию для любого ПОРТА.

Я хочу найти комбинацию портфелей (при условии равного веса), чтобы получить самые высокие доходы.Например, комбинация PORT1, PORT3, PORT4 и PORT6 может обеспечить максимальный доход с поправкой на риск.Есть ли метод для автоматического запуска определенной функции для всех комбинаций и получения желаемой комбинации?

Код не указан, так как я не считаю необходимым показывать вычисления, используемые для определения доходности и риска.

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

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вы можете сделать

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.Учитывая набор позиций и их доходность и риск, существуют явные формулы для поиска оптимального портфеля без грубой силы.

0 голосов
/ 27 ноября 2018

Поиск оптимального местоположения в многомерном пространстве возможен, но люди разбогатели, придумывая лучшие способы достижения именно этого.

Вначале проблема заключается в том, чтобы указать место для вашей возможности.У вас есть шесть измерений, и, по-видимому, вы хотите выделить 1 единицу «материала» по всем этим шести, чтобы вектор распределений {a,b,c,d,e,f} суммировался с 1.Это все еще бесконечность чисел, поэтому, возможно, мы начнем только с шагом 0,10.Таким образом, 10 возможных приращений в 6 измерениях дают 10 ^ 6 возможностей.

Таким образом, простой метод грубой силы состоит в том, чтобы "просто" запустить вашу функцию по всему пространству параметров, сохранить значения и выбрать лучший.

Возможно, это не тот ответ, который вам нужен, существуют другие методы, включая рандомизацию ваших догадок и ограничение ваших результатов более управляемым числом.Но выигрыш в производительности компенсируется некоторой неопределенностью - и некоторыми потенциально трудными разговорами с вашими клиентами «Что вы имеете в виду, что вы сделали это случайно?полезно иметь представление о кривых отклика, которые каждый портфель имеет в различных обстоятельствах, и о видах профилей риска / вознаграждения, с которыми вы можете ожидать их использования.Являются ли они линейными, квадратичными или более сложными?Если вы можете смоделировать их математически, вы сможете использовать алгоритм для сокращения пространства поиска.

Короткий (но фундаментальный) ответ: "it depends".

...