Метод getCandles в API v2 Тинькофф Инвестиции отдает нам исторические свечи по инструменту. Т.е. это набор цен открытия, закрытия, максимальное значение цены за период и минимальное. А также объем и время свечки. Этот набор принято обозначать как OHLCV (open, high, low, close, volume). Используя этот набор мы можем заниматься техническим анализом инструмента для принятия решений по сделкам.
В API v2 Тинькофф Инвестиции можно получить исторические свечи максим за прошедший год (365 дней). За один запрос get_candles можно получить ограниченное количество данных в зависимости от выбранного таймфрейма. Об этом и многих других нюансах я рассказал в видео:
Полезные ссылки по методу getCandles API v2 Тиньков Инвестиции
- Мой полный плейлист по работе с API v2
- Документация по API
- Официальное SDK на Python
Код из видео
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
from datetime import datetime, timedelta from pandas import DataFrame from ta.trend import ema_indicator from tinkoff.invest import Client, RequestError, CandleInterval, HistoricCandle import creds import pandas as pd import matplotlib.pyplot as plt pd.set_option('display.max_rows', 500) pd.set_option('display.max_columns', 500) pd.set_option('display.width', 1000) """ Для видео по get_candles https://tinkoff.github.io/investAPI https://tinkoff.github.io/investAPI/marketdata/#getcandlesrequest https://github.com/Tinkoff/invest-python https://technical-analysis-library-in-python.readthedocs.io/en/latest/index.html pip install ta """ def run(): try: with Client(creds.token_ro_acc_main) as client: r = client.market_data.get_candles( figi='USD000UTSTOM', from_=datetime.utcnow() - timedelta(days=7), to=datetime.utcnow(), interval=CandleInterval.CANDLE_INTERVAL_HOUR # см. utils.get_all_candles ) # print(r) df = create_df(r.candles) # https://technical-analysis-library-in-python.readthedocs.io/en/latest/ta.html#ta.trend.ema_indicator df['ema'] = ema_indicator(close=df['close'], window=9) print(df[['time', 'close', 'ema']].tail(30)) ax=df.plot(x='time', y='close') df.plot(ax=ax, x='time', y='ema') plt.show() except RequestError as e: print(str(e)) def create_df(candles : [HistoricCandle]): df = DataFrame([{ 'time': c.time, 'volume': c.volume, 'open': cast_money(c.open), 'close': cast_money(c.close), 'high': cast_money(c.high), 'low': cast_money(c.low), } for c in candles]) return df def cast_money(v): """ https://tinkoff.github.io/investAPI/faq_custom_types/ :param v: :return: """ return v.units + v.nano / 1e9 # nano - 9 нулей |
Михаил 2022-02-18
Если возможно, то прошу Вас рассказать о выставлении торговых поручений и, в частности, про то как правильно задавать order_id при выставлении заявки с помощью PostOrder.
Этот order_id никогда не должен повторяться за всю историю использования счёта или всё таки на следующий день он сбрасывается и можно снова пользоваться предыдущими значениями?