Skip to content

Отличаются FIGI у операций связанных по parent_id #459

Closed
Rashid567 opened this issue Jul 18, 2023 · 10 comments

Comments

@Rashid567
Copy link

Добрый день!

GetOperationsByCursorRequest мне вернул данные по двум связанным операциям:

Opr №1 - 'Покупка 20 облигаций Синара - Транспортные Машины выпуск 3'

id = '33877822245'
position_uid = '1213388c-113f-4889-b74f-02a27a66f3ce'
date = datetime.datetime(2022, 12, 16, 8, 8, 8, tzinfo=zoneinfo.ZoneInfo(key='Etc/UTC'))
figi = 'TCSS0A105M91'
instrument_uid = '34eb0ecc-e03f-46a6-8e78-4094a58efe7d'

Opr №2 - 'Комиссия брокера' - 'Синара - Транспортные Машины выпуск 3'

id = '3574444564'
parent_operation_id = '33877822245'
position_uid = '1213388c-113f-4889-b74f-02a27a66f3ce'
date = datetime.datetime(2022, 12, 16, 13, 8, 46, 197000, tzinfo=zoneinfo.ZoneInfo(key='Etc/UTC'))
figi = 'TCS00A105M91'
instrument_uid = 'f508293e-50e2-4593-a2ed-2a1338ef4323'

У них отличаются figi (на один символ), но совпадают position_uid.

Как с этим быть и можно ли вообще полагаться на FIGI?

@nonamegithub
Copy link

и можно ли вообще полагаться на FIGI?

не нужно

@Rashid567
Copy link
Author

@nonamegithub, Спасибо!

Ещё один вопрос: position_uid это внешний ключ на Asset.uid?

@nonamegithub
Copy link

на Asset.uid?

Не боюсь показаться недалеким, но я не понял зачем он вообще нужен, даже прочитав документацию. Уверен, что и из команды разработчиков вряд ли кто сможет внятно объяснить его предназначение.

а

position_uid это внешний ключ

на position_uid из методов bonds, currencies, etfs, futures, shares, options из InstrumentsService

@Rashid567
Copy link
Author

@nonamegithub, покопавшись в данных и связях сложилась следующая картина:

Links

  1. Здесь Asset начинает играть ключевую роль, если требуется агрегация операций по активу (акции / облигации и т.д.).

  2. Не покидают меня ощущения, что position_uid ведет на скрытый параметр Asset-а или на скрытый объект, который соотносится с Asset-ом связью 1 к 1.

  3. Выяснил, почему FIGI нужно избегать использовать (вместо него использовать instrument_uid), но не везде это получится сделать.

    Почему следуют избегать: У инструмента могут поменять FIGI (происходит это редко). В этом случае старый инструмент удаляется/скрывается от пользователей, и создается новый. Так же создается связь между старым и новым инструментом с type = figi_changed.

    Пример изменения FIGI: Акции обыкновенные Совкомфлота

    Где придётся использовать FIGI:

    • Получение купонов
    • Получение дивидендов
    • Другие методы сервиса инструментов

И появились новые вопросы:

  1. Зачем применять тип quotation там, где он не нужен?
    Пример: issue_size_plan в AssetBond

  2. Зачем нужно было связывать купоны и дивиденды с инструментами, а не с активами? И что с ними произойдёт при смене инструмента?

@AlexanderVolkovTCS
Copy link
Collaborator

figi TCSS0A105M91 = это инструмент RU000A105M91_PSAU
figi TCS00A105M91 = это инструмент RU000A105M91_TQCB

Оба инструмента относятся к одной и той же позиции. Это нормальная ситуация, когда вы одну и ту же позицию можете изменять разными торговыми инструментами (например, биржевой и внебиржевой)

По второму вопросу действительно иерархия такая:
Asset (актив) -> Position(позиция) -> Instrument (инструмент)
Связь 1 к N, у актива может быть несколько позиций, а позицию можно изменять несколькими инструментами.

Здесь Asset начинает играть ключевую роль, если требуется агрегация операций по активу (акции / облигации и т.д.).

верно

Где придётся использовать FIGI:

Получение купонов
Получение дивидендов

в эти методы будет добавлен instrument_uid в 1.7

Зачем применять тип quotation там, где он не нужен?
Пример: issue_size_plan в AssetBond

Сделано так исходя из внутреннего представления параметра как числа с плавающей точкой, вероятно на случай, если параметр не будет целым.

Зачем нужно было связывать купоны и дивиденды с инструментами, а не с активами? И что с ними произойдёт при смене инструмента?

Legacy брокера. Планируется добавить параметр position_uid после доработки внутренних сервисов.

@nonamegithub
Copy link

Не боюсь показаться недалеким, но я не понял зачем он вообще нужен, даже прочитав документацию. Уверен, что и из команды разработчиков вряд ли кто сможет внятно объяснить его предназначение.

Оказался в состоянии когнитивного диссонанса, ознакомившись с ответом специалиста, и соотнеся его с информацией, полученной мною ранее, из документации. По факту оказалось, что я, как и прежде, в порядке, а причиной явилось переписывание разработчиками "втихую" раздела investAPI-main\src\docs\faq_identification.md документации. Я не против, на самом деле: пусть таким способом, но будем вносить ясность во все "темные" моменты документации InvestAPI.

@Rashid567
Copy link
Author

@AlexanderVolkovTCS, @nonamegithub Спасибо за разъяснения!

@nonamegithub
Copy link

nonamegithub commented Jul 31, 2023

ту же позицию можете изменять разными торговыми инструментами

@AlexanderVolkovTCS - слово "изменять" постоянно режет слух в вышеупомянутом контексте. Может есть смысл использовать слово "представлять", если Вы конечно не против? Например: "...позиция может быть представлена различными торговыми инструментами..."

@AlexanderVolkovTCS
Copy link
Collaborator

переписывание разработчиками "втихую"

Это я и переписал) Не думаю, что каждое обновление документации нужно как-то дополнительно анонсировать.

слово "изменять" постоянно режет слух в вышеупомянутом контексте

@nonamegithub да в том то и дело, что слово "представление" тоже не совсем корректно.
Позиция в терминах Тинькофф Инвестиций - актив, которым вы владеете, позиция имеет только количественную оценку.
Например, у вас в позициях акции сбера в количестве 2х штук.
GetPositions() возвращает список ваших позиций.

А инструмент - это способ купить/продать позицию в указанном режиме торгов. Инструмент уже имеет котировки. Инструментов может быть несколько. Ордера могут выставляться только по инструментам.

Можно использовать термин "увеличить/уменьшить позицию"

@nonamegithub
Copy link

nonamegithub commented Aug 2, 2023

mshukilovich неплохо мысли выражает по русски, в отличие от SRadyukov. Пусть подключается к процессу.

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

No branches or pull requests

3 participants