Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IndexError: index 1 is out of bounds for axis 0 with size 0 #92

Closed
ErQrYfkrju opened this issue Jan 9, 2022 · 18 comments
Closed

IndexError: index 1 is out of bounds for axis 0 with size 0 #92

ErQrYfkrju opened this issue Jan 9, 2022 · 18 comments

Comments

@ErQrYfkrju
Copy link

ErQrYfkrju commented Jan 9, 2022

Здравствуйте!
Тоже решил познакомится с вашим решением.
Собрал ваше приложение в контейнере и запустил evolve
Загрузку дивидентов прошла успешно. А дальше вылезло вот это....
Корректность работы pyppeteer проверил.

python3.9 -m poptimizer evolve
  File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/opt/app/poptimizer/__main__.py", line 46, in <module>
    app(prog_name="poptimizer")
  File "/usr/local/lib/python3.9/dist-packages/typer/main.py", line 214, in __call__
    return get_command(self)(*args, **kwargs)
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.9/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.9/dist-packages/typer/main.py", line 500, in wrapper
    return callback(**use_params)  # type: ignore
  File "/opt/app/poptimizer/__main__.py", line 17, in evolve
    ev.evolve()
  File "/opt/app/poptimizer/evolve/evolve.py", line 54, in evolve
    step, current = self._step_setup(step, current)
  File "/opt/app/poptimizer/evolve/evolve.py", line 85, in _step_setup
    self._end = dates[1]
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/indexes/extension.py", line 279, in __getitem__
    result = self._data[key]
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/arrays/datetimelike.py", line 322, in __getitem__
    result = super().__getitem__(key)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/arrays/_mixins.py", line 194, in __getitem__
    result = self._ndarray[key]
IndexError: index 1 is out of bounds for axis 0 with size 0
@WLM1ke
Copy link
Owner

WLM1ke commented Jan 10, 2022

Попробуйте скачать последнюю версию - в пятницу был необычный день, когда торговались только иностранные бумаги. В последней версии по идее должно работать корректно.

@ErQrYfkrju
Copy link
Author

ErQrYfkrju commented Jan 10, 2022

загрузил из master
результат тот же, если вывести на экран len(dates) он нулевой....

0 DatetimeIndex([], dtype='datetime64[ns]', freq=None)

я сделал самый простой setup.py для установки пакета

from setuptools import setup, find_packages
setup(
    name="poptimizer",
    version="1.0",
    packages=find_packages(),
    entry_points={
        'console_scripts': ['app=app.app:main', ]    
    },
)

может накосячил где...

@WLM1ke
Copy link
Owner

WLM1ke commented Jan 10, 2022

Вы загрузили из мастера после моего ответа и перестояли свои контейнеры? Я просто докинул немного коммитов после вашего сообщения об ошибке.

@ErQrYfkrju
Copy link
Author

Да из master выкачал и пересобрал

commit 18756e8bdbfcac3ebd7ba241f86b25bcb27cc22f (HEAD -> master, origin/master, origin/HEAD)
Author: WLM1ke <wlmike@gmail.com>
Date:   Sun Jan 9 13:53:06 2022 +0300

    feat: правило рассылки регулярного сообщения

@WLM1ke
Copy link
Owner

WLM1ke commented Jan 10, 2022

Сложно понять дистанционно в чем проблема. Я попробовал запустить с нуля - у меня ошибка не выпадает, но я запускаю без контейнеров и setup.py.

Может вам тоже попытаться для начала запустить локально напрямую. Выкачать в папочку проекта, создать виртуальное окружение в корне проекта и простой файлик для запука:

from poptimizer import __main__

if __name__ == "__main__":
    __main__.evolve()

@ErQrYfkrju
Copy link
Author

Сейчас буду пробовать

@ErQrYfkrju
Copy link
Author

ErQrYfkrju commented Jan 10, 2022

Да всё тоже самоё....

python3.9 -m venv .venv
source .venv/bin/activate
pip3.9 install -r requirements.txt
python3.9 -m poptimizer evolve

Загружаются данные и вылетает в том же самом месте

2022-01-10 17:48:15.264589 | INFO | Config | config.py | line#46 | pid#329243 | {'P_VALUE': 0.05, 'FORECAST_DAYS': 21, 'HISTORY_DAYS_MIN': 63, 'START_EVOLVE_HOUR': 1, 'STOP_EVOLVE_HOUR': 1, 'COSTS': 0.025, 'TRADING_INTERVAL': 1, 'OPTIMIZER': 'resample'}
2022-01-10 17:48:15.580378 | INFO | EventBus | thread.py | line#58 | pid#329243 | DateCheckRequired(timestamp=datetime.datetime(2022, 1, 10, 17, 48, 15, 579410))
2022-01-10 17:48:15.919126 | INFO | EventBus | thread.py | line#58 | pid#329243 | DateCheckRequired(timestamp=datetime.datetime(2022, 1, 10, 17, 48, 15, 918466))

from poptimizer import __main__
__main__.evolve()
DateCheckRequired(timestamp=datetime.datetime(2022, 1, 10, 17, 50, 16, 481782))
/home/alexey/workspace/poptimizer/portfolio/base.yaml
{'RUR': 10000, 'USD': 0, 'positions': {'FXRU': 35, 'GAZP': 104, 'SBER': 145}}
{'FXRU': 35, 'GAZP': 104, 'SBER': 145}
/home/alexey/workspace/poptimizer/portfolio/base.yaml
{'RUR': 10000, 'USD': 0, 'positions': {'FXRU': 35, 'GAZP': 104, 'SBER': 145}}
{'FXRU': 35, 'GAZP': 104, 'SBER': 145}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/alexey/workspace/poptimizer/poptimizer/__main__.py", line 17, in evolve
    ev.evolve()
  File "/home/alexey/workspace/poptimizer/poptimizer/evolve/evolve.py", line 54, in evolve
    step, current = self._step_setup(step, current)
  File "/home/alexey/workspace/poptimizer/poptimizer/evolve/evolve.py", line 85, in _step_setup
    self._end = dates[1]
  File "/home/alexey/workspace/poptimizer/.venv/lib/python3.9/site-packages/pandas/core/indexes/extension.py", line 279, in __getitem__
    result = self._data[key]
  File "/home/alexey/workspace/poptimizer/.venv/lib/python3.9/site-packages/pandas/core/arrays/datetimelike.py", line 322, in __getitem__
    result = super().__getitem__(key)
  File "/home/alexey/workspace/poptimizer/.venv/lib/python3.9/site-packages/pandas/core/arrays/_mixins.py", line 194, in __getitem__
    result = self._ndarray[key]
IndexError: index 1 is out of bounds for axis 0 with size 0

@WLM1ke
Copy link
Owner

WLM1ke commented Jan 10, 2022

Хорошо, что про портфель написали. Во-первых, это все бессмысленно на трех бумагах - не достаточно данных для обучения сетей. Во-вторых, при таком наборе бумаг вылезает редкий баг - не уверен, что его имеет смысл править, но в общем нужна хотя бы одна иностранная бумага из-за кривого торгового дня в пятницу или ждать завтрашнего дня когда появятся котировки за понедельник.

@ErQrYfkrju
Copy link
Author

ErQrYfkrju commented Jan 11, 2022

Ну я сначала на base.yml из master запускал, но он с нулями не знаю имеет это значение или нет...
Можно ли как то в mongodb загрузить историю за последние 3-5 лет, чтобы потом её как то просмотреть?
После ваших комментариев запустилось обучение как в контейнере так и на голой системе!

@WLM1ke
Copy link
Owner

WLM1ke commented Jan 11, 2022

Ну я сначала на base.yml из master запускал, но он с нулями не знаю имеет это значение или нет...

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

Можно ли как то в mongodb загрузить историю за последние 3-5 лет, чтобы потом её как то просмотреть?

Грузится вся история до последнего полного тортового дня включительно, а используется история с 2015 года. Котировки хранятся в базе data в коллекции quotes.

PS: Утром оказалось, что баг более серьезный, чем я думал, поэтому буду править.

@ErQrYfkrju
Copy link
Author

плохо что серьезный, хорошо что локализовался. пока запустил обучение...
можно как то из имеющихся данных в базе получить df как у yfinance для перечня тикеров?

@WLM1ke
Copy link
Owner

WLM1ke commented Jan 11, 2022

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

def securities(viewer: viewers.Viewer = bootstrap.VIEWER) -> pd.Index:

В файле все бумаги, по которым я обновляю дивиденды https://github.com/WLM1ke/poptimizer/blob/master/portfolio/base.yaml

@ErQrYfkrju
Copy link
Author

https://habr.com/ru/post/561980/
вот по этой статье пробовал строить тестовый портфель, там данные скачиваются с yahoo finance каждый раз. у вас скачаны данные и уже локально доступны для тестовых запросов к ним

@WLM1ke
Copy link
Owner

WLM1ke commented Jan 11, 2022

Если каждый раз дергать MOEX и качать котировки по 1000 бумаг, то вас быстро заблокируют.
Данные скачиваются полностью при первом запуске и инкрементальной обновляются 1 раз каждый день после 00:45, когда обновляются все данные на MOEX ISS.

@ErQrYfkrju
Copy link
Author

я немного про другое,как с помощью имеющихся уже данных собрать входные данные для указанных в статье методов. там скачивание исторических данных идёт с yahoo, для moex добавляя .ME к тикеру.

@WLM1ke
Copy link
Owner

WLM1ke commented Jan 11, 2022

Для получения цен

def all_prices(tickers: tuple[str, ...], price_type: col.PriceType = col.CLOSE) -> pd.DataFrame:

Для получения цен и дивидендов
def div_and_prices(

@ErQrYfkrju
Copy link
Author

вечером посмотрю и сравню результаты...

@WLM1ke WLM1ke closed this as completed in c4f6fa9 Jan 11, 2022
@ErQrYfkrju
Copy link
Author

#93
Поставил на обучение

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants