Tinkoff / invest-python

Tinkoff Invest Python gRPC client
https://tinkoff.github.io/invest-python/
Apache License 2.0
317 stars 90 forks source link

Отсутствие в классе Operation наименования ценных бумаг #93

Closed kov-pavel closed 2 years ago

kov-pavel commented 2 years ago

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

Я разрабатываю простого бота, который бы круглосуточно мониторил состояние ценных бумаг в моём портфеле и генерировал отчёт примерно в таком формате: "доходность, количество акций, стоимость бумаг, наименование бумаг (тикер, имя компании или любое другое название, позволяющее идентифицировать актив простому человеку)". Данные я получаю через OperationsService::GetOperations, по их figi'ам получаю текущий курс бумаг и анализирую уже доходность. Однако в классе Operation (https://tinkoff.github.io/investAPI/operations/#operation) отсутствует поле с наименованием этих бумаг, есть лишь figi. И всё бы ничего, да вот только во всём API я не нашёл функции, переводящей figi в какой-нибудь более-менее человеко-понятный вид, а подключать сторонние API - кажется, что-то идёт уже не так. Примечательно, что в классе BrokerReport (https://tinkoff.github.io/investAPI/operations/#brokerreport) есть и name, и ticker - значит, как-то программно это можно реализовать. Хочется узнать, либо что я делаю не так, либо почему такое(-ие) поле(-я) отсутствуют в классе Operation.

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

No response

Tinkoff Invest Version

0.2.0-beta30

Python Version

3.10

OS

Windows

Логи

No response

irusland commented 2 years ago

Если я правильно понял, то хочется по figi находить инструмент.

Рассмотрите следующий код:

import os
from pprint import pprint

from tinkoff.invest import Client, InstrumentIdType

TOKEN = os.environ["INVEST_TOKEN"]

def main():
    with Client(TOKEN) as client:
        # получили figi из операций
        figi = "BBG00P35VS94"

        short_info, = client.instruments.find_instrument(query=figi).instruments
        print('Short instrument info')
        pprint(short_info)

        full_info = client.instruments.etf_by(
            id_type=InstrumentIdType.INSTRUMENT_ID_TYPE_FIGI,
            class_code=short_info.class_code,
            id=short_info.figi,
        )
        print('Full instrument info')
        pprint(full_info.instrument)

if __name__ == "__main__":
    main()

Он выдаст нужный вам инструмент, в моем примере - ETF

Short instrument info
InstrumentShort(isin='US46435U2188',
                figi='BBG00P35VS94',
                ticker='SUSL',
                class_code='SUSL',
                instrument_type='etf',
                name='iShares ESG MSCI USA Leaders ETF',
                uid='1284db59-c4ef-4dee-ba50-a3333153e3e1',
                position_uid='ad982d84-1f06-4626-b126-81b19d1ac873',
                api_trade_available_flag=False)
Full instrument info
Etf(figi='BBG00P35VS94',
    ticker='SUSL',
    class_code='SUSL',
    isin='US46435U2188',
    lot=1,
    currency='usd',
    klong=Quotation(units=0, nano=0),
    kshort=Quotation(units=0, nano=0),
    dlong=Quotation(units=0, nano=0),
    dshort=Quotation(units=0, nano=0),
    dlong_min=Quotation(units=0, nano=0),
    dshort_min=Quotation(units=0, nano=0),
    short_enabled_flag=False,
    name='iShares ESG MSCI USA Leaders ETF',
    exchange='nasdaq',
    fixed_commission=Quotation(units=0, nano=0),
    focus_type='equity',
    released_date=datetime.datetime(1970, 1, 1, 0, 0, tzinfo=datetime.timezone.utc),
    num_shares=Quotation(units=0, nano=0),
    country_of_risk='US',
    country_of_risk_name='Соединенные Штаты Америки',
    sector='other',
    rebalancing_freq='',
    trading_status=<SecurityTradingStatus.SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING: 1>,
    otc_flag=True,
    buy_available_flag=True,
    sell_available_flag=True,
    min_price_increment=Quotation(units=0, nano=0),
    api_trade_available_flag=False,
    uid='1284db59-c4ef-4dee-ba50-a3333153e3e1',
    real_exchange=<RealExchange.REAL_EXCHANGE_OTC: 3>,
    position_uid='ad982d84-1f06-4626-b126-81b19d1ac873')

У полученного объекта инструмента помимо прочей информации есть поле name

kov-pavel commented 2 years ago

Спасибо большое! Помогло