Ошибки / Bug report

@AndreyV список наймспейсов активов находится в настройках API базы данных. Я туда уже добавил “PF”.

Но для работы plot_pair_ef() с портфелями надо немного доработать сам код этого метода. Добавлю в следующем релизе…

Добавил видоизменный код на ветку dev. Там уже всё работает…

Спасибо! А когда планируется добавить параметр bounds в EfficientFrontierReb?

Когда кто-нибудь решит эту задачу: Look for a correct low limit of the multi-period EF (right part) · Issue #47 · mbk-dev/okama · GitHub

Понятно. Тогда еще одна ошибка, если добавить Ruonia.indx в портфель то вылетает ошибка. Создается впечатление что данные отсутсвуют

Jump to bottom

По этой задаче есть тест кейсы?

Можно вот такое взять:

lsz = ['MCFTR.INDX', 'SPY.US', 'VB.US', 'RGBITR.INDX', 'GLD.US']
f_date = '2004-12' 
l_date = '2020-12'
curr = 'RUB'

ef = ok.EfficientFrontierReb(lsz, ccy=curr, first_date=f_date, last_date=l_date, n_points=40, rebalancing_period='year', verbose=True)

Поправил…

Если соберетесь взяться, дайте знать. Есть идея, как это реализовать с минимальными сложностями.

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

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

Сейчас подсказка ищется с помощью метода _max_cagr_asset_right_to_max_cag. Но, к сожалению, это не всегда работает.

Есть идея искать не актив с масксимальным CAGR (сред тех, кто правее глобального максимума), а просто взять самую правый актив на границе эффективности в процессе без ребалансировки. Расчет границы эффективности с минимальным количеством точек делается очень быстро…

Попробую разобраться .

plot_pair_ef() отказывается работать с типом портфель, теперь функция пытается найти в базе данных:

HTTPError Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/okama/api/api_methods.py in connect(cls, endpoint, symbol, first_date, last_date, period)
53 r = session.get(request_url, params=params, verify=False, timeout=cls.default_timeout)
—> 54 r.raise_for_status()
55 except requests.exceptions.HTTPError as errh:

10 frames
HTTPError: 404 Client Error: NOT FOUND for url: http://api.okama.io:5000/api/symbol/RF15_portfolio.PF?period=d

The above exception was the direct cause of the following exception:

HTTPError Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/okama/api/api_methods.py in connect(cls, endpoint, symbol, first_date, last_date, period)
55 except requests.exceptions.HTTPError as errh:
56 if r.status_code == 404:
—> 57 raise requests.exceptions.HTTPError(f"{symbol} is not found in the database.“, 404) from errh
58 raise requests.exceptions.HTTPError(
59 f"HTTP error fetching data for {symbol}:”,

HTTPError: [Errno RF15_portfolio.PF is not found in the database.] 404

Я об этом писал выше…

Исправленный код - в ветке dev.

Sergey, я изучил этот метод, и мне кажется что ошибки нет. Просто при ребалансировке получается другой портфель с другой границей эффективности. Это подтверждается тем, что если взять приведенные вами портфель и посчитать его за разные периоды например: 2004-2010, 2010-2020, 2004-2020 - это будут абсолютно разные границы.
В приведенном примере Look for a correct low limit of the multi-period EF (right part) · Issue #47 · mbk-dev/okama · GitHub, по моему мнению, рассматриваются три абсолюно разных портфеля имеющих различную доходность риск

@AndreyV скорее всего, вы не поняли проблему. На изображении 3 границы эффективности. Неправильно строится та из них, которая связана с ежегодной ребалансировкой (отмечена цифрой 1).

Если вы строили попарные границы эффективности, то поймете, что правая часть границы построена неверно. Взята её нижняя часть (а нужно было взять верхнюю).


Так происходит потому, что алгоритм неправильно подсказал, откуда искать. Он начал искать с точки VB.US, а надо было начать с MCFTR.INDX.

Сергей, добрый день!
По индексам RUCBITR и RUMBITR последние доступные данные на 05/2023.

Всё правильно. RUCBITR больше не поддерживается Мосбиржей. На смену ему пришел индекс RUCBTRNS.

Сергей, спасибо!
Как-то прошло мимо меня… И соответственно, теперь действующий муниципальных облигаций - RUMBTRNS.

1 лайк

Добрый день!
okama-1.4.4, Python 3.10.12, google collaboration

Выдает странные дивиденды у Лукойла

Да, вижу ошибку в 2023 году. Попробую разобраться…