invest-python icon indicating copy to clipboard operation
invest-python copied to clipboard

[Bug] Пропадает операция в методе get_operations_by_cursor

Open Ipsilon91 opened this issue 3 years ago • 6 comments

Что случилось?

Если запрашиваю список операций через метод get_operations_by_cursor с конечной датой после 5 декабря 2022 г. по брокерскому счёту, то пропадает операция продажи 65 акций OZON 25.02.2022. Если брать конечную дату 05.12.2022 или раньше, то эта операция появляется. Сам API эту операцию выдаёт во всех случаях (проверено через Swagger tinkoff.github.io/investAPI/swagger-ui).

Воспроизведение

# Get dates in datetime format
def operations(from_, to, broker_account_id):
    with Client(TOKEN) as client:
        def get_request(cursor=""):
            return GetOperationsByCursorRequest(
                account_id=broker_account_id,
                from_=from_,
                to=to,
                cursor=cursor,
                limit=100,
                without_commissions=False,
                without_trades=False,
                without_overnights=False
            )

        operations = []
        operations_with_system_info = client.operations.get_operations_by_cursor(get_request())
        operations += operations_with_system_info.items
        while operations_with_system_info.has_next:
            request = get_request(cursor=operations_with_system_info.next_cursor)
            operations_with_system_info = client.operations.get_operations_by_cursor(request)
            operations += operations_with_system_info.items

    operations.reverse()

    return operations

Tinkoff Invest Version

0.2.0-beta44

Python Version

3.8

OS

Windows

Логи

No response

Ipsilon91 avatar Jan 01 '23 14:01 Ipsilon91

Проверил у другого человека, у него тоже операция продажи пропала, но облигаций ЯТЭК выпуск 2 (figi BBG00ZZNPB92). Сама операция продажи была 28.09.2021 и если выставлять в списке операций конечную дату позже 21.11.2022, то она не отражается. Опять же API её показывает и раньше таких проблем не было.

Ipsilon91 avatar Jan 01 '23 17:01 Ipsilon91

Здравствуйте! К сожалению, я не смог воспроизвести ситуацию. Подскажите, правильно ли я понимаю, что если просто запросить сделки (без курсора) вернется весь набор сделок? А если получать аналогично курсором - то пропадает последняя?

irusland avatar Jan 14 '23 06:01 irusland

С вашей подачи я поэкспериментировал ещё. Для get_operations вроде все операции есть, если для get_operations_by_cursor выставить limit=1000, то тоже все (всего операций на этом счёте 900 с чем-то). А вот если менять периоды запроса или limit так, чтобы все операции дробились на куски, и потом собирались у меня, то некоторые операции теряются. Не только та операция продажи OZON, про которую изначально я писал, а другие тоже. Похоже на стыке блоков операций теряется одна. Ещё раз проверил просто через swagger вручную подставляя номер cursor, там все операции есть.

Ipsilon91 avatar Jan 16 '23 16:01 Ipsilon91

Я посчитал сколько пропадает операций. Если в get_operations_by_cursor выставляю limit=1000 по счёту выдаёт 997 операций, если limit=100, то 994 операции, если limit=50, то 992 операции, если limit=10, то 991 операцию. Даты начала и конца периода при этом одинаковые.

Ipsilon91 avatar Jan 28 '23 13:01 Ipsilon91

Баг всё ещё есть, очень мешает работать

IlyaBlokh avatar May 12 '23 18:05 IlyaBlokh

Вроде перестали пропадать, вы что-то поправили или это случайность какая-то?

Ipsilon91 avatar Jul 21 '23 11:07 Ipsilon91