В предыдущем видео читатель попросил пример работы с Open API Тинькофф Инвестиций по вебсокету (streaming) и сегодня будет такой пример. На скорую руку разберемся как работать с Open API по websocket (и зачем это вообще нужно) на Python с использованием библиотеки tinvest от @daxartio.
На канале есть Плейлист Open API Тинькофф Инвестиции. В нем все видео о работе с этим API с самого начала.
Подробности в видео
Полезные ссылки по работе со streaming в Open API
- Официальная документация по asyncio
- Пост на Хабре по работе с asyncio
- Примеры 1, 2 неофициального SDK по работе со streaming Open API Тинькофф Инвестиций
- endpoint в примере
Код из примера
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
import asyncio import json import tinvest as tinvest import tcs_token """ Пример работы со streaming (websocket) в Open API Тинькофф Инвестиции """ # интересные бумаги """ https://tinkoff.github.io/invest-openapi/faq_errors/ В случае, если подписок на инструменты очень много, то сервер может не успевать передавать новые данные и в этом случае разрывает соединение. Рекомендует подписываться на 30 бумаг. """ figis = [ 'BBG000FR1RP5', 'BBG000NDYB67', 'BBG000FSMWC3', 'BBG000BPH299', 'BBG000BMX289', 'BBG000J2XL74', 'BBG00475KKY8', 'BBG000BFQYY3', 'BBG000BP52R2', 'BBG000BN56Q9', ] # разбор события и ожидаемое в действие # стратегия - Купаемся в Стакане )))) # если в стакане продают то и мы с ними, покупают - и мы тоже async def normal(payload: tinvest.OrderbookStreaming): bids_vol = sum([x for (_, x) in payload.bids]) # покупки asks_vol = sum([x for (_, x) in payload.asks]) # продажи if bids_vol / asks_vol > 2: print(payload.figi, " продают") if asks_vol / bids_vol > 2: print(payload.figi, " покупают") async def main(): async with tinvest.Streaming(tcs_token.sandbox) as streaming: # подписываюсь на все интересные мне бумаги в стакане [await streaming.orderbook.subscribe(figi, 3) for figi in figis] async for e in streaming: if e.event == tinvest.Event.orderbook: # событие пришло, поскал разбирать await normal(e.payload) else: # например сбой сети соотв. todo: reconnect raise Exception("godbye normals") asyncio.run(main()) |
Классно если у тебя есть что сказать по теме работы с Open API Тинькофф Инвестиций. Если ты знаешь что-то лучше меня — пиши без сомнений! Я сам в этой теме только разбираюсь и рад любым подсказкам. Пиши в комментариях к видео (так лучше) или ниже в комментариях к посту.
А если ты только начинаешь , то спрашивай, уточняй, может что-то нужно рассказать подробнее — разберемся вместе. Лайки и позитив в комментах к видео (особенно) помогают выбрать лучший план съемок.
А если ты собираешься стать клиентом Тинькофф Инвестиций то сделай это по моей ссылке. Тинькофф Инвестиции обещают мне за это акций аж на 20 тыщ руб ))))) После истории с акциями за обучение веры, конечно, нет, но что-то может и перепадет и замотивирует продолжать. В нашем деле ведь главное не перегореть.
Иван 2021-07-15
Как это исправить?