Closed kov-pavel closed 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
Спасибо большое! Помогло
Что случилось?
Я разрабатываю простого бота, который бы круглосуточно мониторил состояние ценных бумаг в моём портфеле и генерировал отчёт примерно в таком формате: "доходность, количество акций, стоимость бумаг, наименование бумаг (тикер, имя компании или любое другое название, позволяющее идентифицировать актив простому человеку)". Данные я получаю через 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