cdump / investments

Analysis of Interactive Brokers reports for tax reporting in Russia
MIT License
110 stars 20 forks source link

Ошибка в TickersStorage #62

Open RomanS2N opened 1 year ago

RomanS2N commented 1 year ago

Приветствую!

У меня на отчётах за 2022 год, выводит ошибку, подскажите в чём может быть причина или как диагностировать её? замечу что на отчётах за 2021 г. всё работает!


>python -m investments.ibtax --activity-reports-dir D:\NDFL\Reports\ --confirmation-reports-dir D:\Config\

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\__main__.py", line 3, in <module>
    main()
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\ibtax.py", line 291, in main
    parser_object = parse_reports(args.activity_reports_dir, args.confirmation_reports_dir)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\ibtax.py", line 263, in parse_reports
    parser_object.parse_csv(
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\report_parsers\ib.py", line 190, in parse_csv
    self._real_parse_activity_csv(csv.reader(ac_fh, delimiter=','), {
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\report_parsers\ib.py", line 260, in _real_parse_activity_csv
    parser_fn(fields)
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\report_parsers\ib.py", line 265, in _parse_instrument_information
    self._tickers.put(
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\report_parsers\ib.py", line 79, in put
    assert self._conid_to_ticker[conid] == ticker
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^
Указывает на ошибку conid: KeyError: '589316229' 

Заранее благодарен за ваш отзыв!

RomanS2N commented 1 year ago

Здесь вижу ticker повторно появляется в записи и if ticker not in self._tickers: не срабатывает.

Поставил после ticker = Ticker(symbol, kind)

print ('Ticker = ', ticker, 'Conid = ', conid)

Вывело:

Ticker = AAPL (Stock) Conid = 416310868 if ticker not in self._tickers: - прошёл успешно

Ticker = AAPL (Stock) Conid = 589316229 if ticker not in self._tickers: - не прошёл, вызвал assert self._conid_to_ticker[conid] == ticker программа свалилась ......

Непонятно, то ли в коде так должно быть, толи в файлах проблема. Как можно решить вопрос?

esemi commented 1 year ago

Привет!

Выглядит как-будто в отчёте что-то странное, может сплит акций эпла был в этом году?

RomanS2N commented 1 year ago

Это я к сожалению, не знаю ... Т.е. вы считаете что Conid 589316229 нужно просто заменить на 416310868 в самом отчёте и это проблему вылечит, без каких либо дополнительных косяков?

esemi commented 1 year ago

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

Можете попробовать обезличенный отчёт закинуть сюда, я подебажу интересу ради)

RomanS2N commented 1 year ago

Попробую, заменить Conid, может исправиться, чистить это целая работа , а Conid - это что за переменная?

RomanS2N commented 1 year ago

В общем, замена не помогла, другую ошибку выкинул: File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\report_parsers\ib.py", line 231, in _parse_trade_confirmation_csv if f['LevelOfDetail'] != 'EXECUTION': ~^^^^^^^^^^^^^^^^^

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

RomanS2N commented 1 year ago

esemi, как можно извлечь ошибочные записи из большого массива? Не получается запись с ошибкой вытащить из большого массива данных!

К примеру на такой сделки проблема в отчёте: Financial Instrument Information,Data,Stocks,PT,PINTEC TECHNOLOGY HOLDINGS L,338719507,US72352G1076,NASDAQ,1,ADR,

В сделках: XXXX,"","","USD","STK","PT","PINTEC TECHNOLOGY HOLDINGS L","338719507","US72352G1076","ISIN","72352G107","US72352G1076","NASDAQ","","","","","","1","","","","","ExchTrade","4545206975","2322341648","000.6229f848.01.01","004fa918.000.62299061.0001","","","","0","","","2022-03-10,10:14:02","2022-03-10,10:14:04","2022-03-10","2022-03-14","2022-03-10","ISLAND","BUY","300","0.5932","177.96","-177.96","-179.46","-1.5","-1.5","0","0","0","0","0","USD","0","C

конфликтует с записью: Financial Instrument Information,Data,Stocks,PT,PINTEC TECHNOLOGY HOLDINGS L,559931429,US72352G2066,NASDAQ,1,ADR,

XXX,"","","USD","STK","PT","PINTEC TECHNOLOGY HOLDINGS L","559931429","US72352G2066","ISIN","72352G206","US72352G2066","NASDAQ","","","","","","1","","","","","ExchTrade","5029423077","2576325978","000.6346ad3b.01.01","004fa918.000.634645ce.0002","","","","0","","","2022-10-12,12:42:28","2022-10-12,12:42:28","2022-10-12","2022-10-14","2022-10-12","ISLAND","BUY","100","0.579","57.9","-57.9","-58.4","-0.5","-0.5","0","0","0","0","0","USD","0","C

Разница в conid 338719507 <> 559931429

Хотя может взять один отчёт с одной сделкой и копировать записи в пустой второй с заменой conid, так при помощи замены вызвать ошибку при которых в двух файлах разные conid стоять будут! И протестить ...

RomanS2N commented 1 year ago

Если есть возможность в ручную подправить, не дожидаясь длинного фикса, буду так же рад!

RomanS2N commented 1 year ago

Ребята, если будите фиксить, вот некоторые тикеты которые выдают ошибки:

HOTH Conid 353038807 vs 593821783 2022-01-03 <> 2022-01-06 AVCT Conid 416310868 vs 589316229 2022-08-28 <> 2022-10-11 PT Conid 338719507 vs 559931429 2022-03-09 <> 2022-10-11

не одно ошибки 2021, а в 2022 тикеры с разными Conid десятки появились.