diff --git a/src/docs/contracts/instruments.proto b/src/docs/contracts/instruments.proto index 8357e730..f8137344 100644 --- a/src/docs/contracts/instruments.proto +++ b/src/docs/contracts/instruments.proto @@ -531,7 +531,7 @@ message Etf { Quotation fixed_commission = 17; //Размер фиксированной комиссии фонда. string focus_type = 18; //Возможные значения:
**equity** — акции;
**fixed_income** — облигации;
**mixed_allocation** — смешанный;
**money_market** — денежный рынок;
**real_estate** — недвижимость;
**commodity** — товары;
**specialty** — специальный;
**private_equity** — private equity;
**alternative_investment** — альтернативные инвестиции. google.protobuf.Timestamp released_date = 19; //Дата выпуска в часовом поясе UTC. - Quotation num_shares = 20; //Количество акций фонда в обращении. + Quotation num_shares = 20; //Количество паев фонда в обращении. string country_of_risk = 21; //Код страны риска, т.е. страны, в которой компания ведёт основной бизнес. string country_of_risk_name = 22; //Наименование страны риска, т.е. страны, в которой компания ведёт основной бизнес. diff --git a/src/docs/contracts/marketdata.proto b/src/docs/contracts/marketdata.proto index cac6e4fc..9c8ee2a8 100644 --- a/src/docs/contracts/marketdata.proto +++ b/src/docs/contracts/marketdata.proto @@ -35,6 +35,8 @@ service MarketDataService { //Сервис получения биржевой //Метод запроса цен закрытия торговой сессии по инструментам. rpc GetClosePrices(GetClosePricesRequest) returns (GetClosePricesResponse); + + rpc GetTechAnalysis(GetTechAnalysisRequest) returns (GetTechAnalysisResponse); } service MarketDataStreamService { @@ -479,8 +481,79 @@ message InstrumentClosePriceResponse { google.protobuf.Timestamp time = 21; //Дата совершения торгов. } +message GetTechAnalysisRequest { + IndicatorType indicator_type = 1 [(google.api.field_behavior) = REQUIRED]; //Тип технического индикатора. + string instrument_uid = 2 [(google.api.field_behavior) = REQUIRED]; //Uid инструмента. + google.protobuf.Timestamp from = 3 [(google.api.field_behavior) = REQUIRED]; //Начало запрашиваемого периода в часовом поясе UTC. + google.protobuf.Timestamp to = 4 [(google.api.field_behavior) = REQUIRED]; //Окончание запрашиваемого периода в часовом поясе UTC. + IndicatorInterval interval = 5 [(google.api.field_behavior) = REQUIRED]; //Интервал, за который рассчитывается индикатор. + TypeOfPrice type_of_price = 6 [(google.api.field_behavior) = REQUIRED]; //Тип цены, используемый при расчёте индикатора. + int32 length = 7; //Торговый период, за который рассчитывается индикатор. + Deviation deviation = 8; //Параметры отклонения. + Smoothing smoothing = 9; //Параметры сглаживания. + + message Smoothing { + int32 fast_length = 1; //Короткий период сглаживания для первой экспоненциальной скользящей средней (EMA). + int32 slow_length = 2; //Длинный период сглаживания для второй экспоненциальной скользящей средней (EMA). + int32 signal_smoothing = 3; //Период сглаживания для третьей экспоненциальной скользящей средней (EMA) + } + + message Deviation { + Quotation deviation_multiplier = 1; //Кол-во стандартных отклонений, на которые отступает верхняя и нижняя граница + } + + //Интервал свечи. + enum IndicatorInterval { + INDICATOR_INTERVAL_UNSPECIFIED = 0; //Интервал не определён. + INDICATOR_INTERVAL_ONE_MINUTE = 1; //1 минута. + INDICATOR_INTERVAL_FIVE_MINUTES = 2; //5 минут. + INDICATOR_INTERVAL_FIFTEEN_MINUTES = 3; //15 минут. + INDICATOR_INTERVAL_ONE_HOUR = 4; //1 час. + INDICATOR_INTERVAL_ONE_DAY = 5; //1 день. + INDICATOR_INTERVAL_2_MIN = 6; //2 минуты. + INDICATOR_INTERVAL_3_MIN = 7; //3 минуты. + INDICATOR_INTERVAL_10_MIN = 8; //10 минут. + INDICATOR_INTERVAL_30_MIN = 9; //30 минут. + INDICATOR_INTERVAL_2_HOUR = 10; //2 часа. + INDICATOR_INTERVAL_4_HOUR = 11; //4 часа. + INDICATOR_INTERVAL_WEEK = 12; //Неделя + INDICATOR_INTERVAL_MONTH = 13; //Месяц + } + + enum TypeOfPrice { + TYPE_OF_PRICE_UNSPECIFIED = 0; //Не указано. + TYPE_OF_PRICE_CLOSE = 1; //Цена закрытия. + TYPE_OF_PRICE_OPEN = 2; //Цена открытия. + TYPE_OF_PRICE_HIGH = 3; //Максимальное значение за выбранный интервал. + TYPE_OF_PRICE_LOW = 4; //Минимальное значение за выбранный интервал. + TYPE_OF_PRICE_AVG = 5; //Среднее значение по показателям [ (close + open + high + low) / 4 ]. + } + + enum IndicatorType { + INDICATOR_TYPE_UNSPECIFIED = 0; //Не определен. + INDICATOR_TYPE_BB = 1; //Bollinger Bands (Линия Боллинжера). + INDICATOR_TYPE_EMA = 2; //Exponential Moving Average (EMA, Экспоненциальная скользящая средняя). + INDICATOR_TYPE_RSI = 3; //Relative Strength Index (Индекс относительной силы). + INDICATOR_TYPE_MACD = 4; //Moving Average Convergence/Divergence (Схождение/Расхождение скользящих средних). + INDICATOR_TYPE_SMA = 5; //Simple Moving Average (Простое скользящее среднее). + } +} + +message GetTechAnalysisResponse { + repeated TechAnalysisItem technical_indicators = 1; //Массив значений результатов тех. анализа + + message TechAnalysisItem { + google.protobuf.Timestamp timestamp = 1; //Временная метка по UTC, для которой были рассчитаны значения индикатора. + optional Quotation middle_band = 2; //Значение простого скользящего среднего (средней линии). + optional Quotation upper_band = 3; //Значение верхней линии Боллинджера. + optional Quotation lower_band = 4; //Значение нижней линии Боллинджера. + optional Quotation signal = 5; //Значение сигнальной линии. + optional Quotation macd = 6; //Значение линии MACD. + } +} + enum OrderBookType { - ORDERBOOK_TYPE_UNSPECIFIED = 0; //не определен - ORDERBOOK_TYPE_EXCHANGE = 1; //Биржевой стакан - ORDERBOOK_TYPE_DEALER = 2; //Стакан дилера + ORDERBOOK_TYPE_UNSPECIFIED = 0; //не определен + ORDERBOOK_TYPE_EXCHANGE = 1; //Биржевой стакан + ORDERBOOK_TYPE_DEALER = 2; //Стакан дилера } \ No newline at end of file diff --git a/src/docs/contracts/orders.proto b/src/docs/contracts/orders.proto index f616b7c1..be29c1c1 100644 --- a/src/docs/contracts/orders.proto +++ b/src/docs/contracts/orders.proto @@ -174,6 +174,7 @@ message OrderStage { MoneyValue price = 1; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. int64 quantity = 2; //Количество лотов. string trade_id = 3; //Идентификатор сделки. + google.protobuf.Timestamp execution_time = 5; //Время исполнения сделки } //Запрос изменения выставленной заявки. diff --git a/src/docs/errors.md b/src/docs/errors.md index aeae7981..8f4d64e9 100644 --- a/src/docs/errors.md +++ b/src/docs/errors.md @@ -107,6 +107,11 @@ 30210|INVALID_ARGUMENT|trailing data required|Проверьте параметры запроса стоп-заявки. Не заданы indent или spread.| 30211|INVALID_ARGUMENT|indent type required|Проверьте параметры запроса стоп-заявки. Не задан indent_type.| 30212|INVALID_ARGUMENT|spread type required|Проверьте параметры запроса стоп-заявки. Не задан spread_type.| +30213|INVALID_ARGUMENT|indicator_type is invalid|Проверьте параметры запроса. Некорректный indicator_type.| +30214|INVALID_ARGUMENT|type_of_price is invalid|Проверьте параметры запроса. Некорректный type_of_price.| +30215|INVALID_ARGUMENT|length is invalid|Проверьте параметры запроса. Некорректный length.| +30216|INVALID_ARGUMENT|deviation_data is invalid|Проверьте параметры запроса. Некорректный параметр deviation_data.| +30217|INVALID_ARGUMENT|smoothing_data is invalid|Проверьте параметры запроса. Некорректный параметр smoothing_data.| 30218|INVALID_ARGUMENT|quantity of instruments can't be more than 3000|Количество инструментов в списке не может быть больше 3000.| 40002|PERMISSION_DENIED|insufficient privileges|Недостаточно прав для совершения операции.
Токен доступа имеет уровень прав read-only, либо у токена нет доступа к указанному счету.
Подробнее: [Виды токенов](https://russianinvestments.github.io/investAPI/index#_2)| 40003|UNAUTHENTICATED|authentication token is missing or invalid|Токен доступа не найден или не активен.
Вы можете выпустить новый токен по ссылке [Настройки](https://www.tinkoff.ru/invest/settings/)| diff --git a/src/docs/errors/api_errors.json b/src/docs/errors/api_errors.json index c13ac7f6..e0b8a45b 100644 --- a/src/docs/errors/api_errors.json +++ b/src/docs/errors/api_errors.json @@ -524,6 +524,31 @@ "type": "INVALID_ARGUMENT", "description": "Проверьте параметры запроса стоп-заявки. Не задан spread_type." }, + "30213": { + "message": "indicator_type is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный indicator_type." + }, + "30214": { + "message": "type_of_price is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный type_of_price." + }, + "30215": { + "message": "length is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный length." + }, + "30216": { + "message": "deviation_data is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный параметр deviation_data." + }, + "30217": { + "message": "smoothing_data is invalid", + "type": "INVALID_ARGUMENT", + "description": "Проверьте параметры запроса. Некорректный параметр smoothing_data." + }, "30218": { "message": "quantity of instruments can't be more than 3000", "type": "INVALID_ARGUMENT", diff --git a/src/docs/faq_identification.md b/src/docs/faq_identification.md index 6ab77c25..dd568cc1 100644 --- a/src/docs/faq_identification.md +++ b/src/docs/faq_identification.md @@ -28,14 +28,19 @@ ## Идентификаторы из модели финансовых инструментов Тинькофф Инвестиций В Тинькофф Инвестициях применяется иерархическая система идентификации финансовых объектов. -На верхнем уровне находится **актив** - это по сути работающая на финансовом рынке компания, являющаяся эмитентом ценных бумаг. Примером актива может быть например Сбербанк. +На верхнем уровне находится **бренд** - это по сути работающая на финансовом рынке компания, являющаяся эмитентом ценных бумаг. Примером бренда может быть например Сбербанк. -У актива может несколько финансовых инструментов: акции (в т.ч. на разных биржах), облигации и т.д., каждая из подобных ценных бумаг называется **позиция**. То есть *Позиция* - это совокупность актива, типа и торговой площадки(биржи). +У бренда может несколько финансовых инструментов: акции (в т.ч. на разных биржах), облигации и т.д., каждая из подобных ценных бумаг называется **актив**. -Но одна и та же позиция может торговаться в разных режимах торгов и по разной цене: например: валюта разной лотности может иметь различную стоимость; или акцию можно продать за биржевом рынке, так и на внебиржевом (в торговле на выходных). Поэтому есть еще один идентификатор - **торговый инструмент** - он определяется как ценная бумага на торговой площадке (бирже) в указанном режиме торгов. Получить котировки можно только по торговому инструменту. +Один и тот же актив может торговаться на разных биржах, совокупность актива и торговой площадки(биржи) - это *Позиция*. +В некоторых ситуациях размещение бумаг на бирже, выплаты купонов и дивидендов проходят позициям, которые отличаются от тех, что торгуются на бирже или находятся в портфеле. + +Но одна и та же позиция может торговаться в разных режимах торгов и по разной цене: например: валюта разной лотности может иметь различную стоимость; или акцию можно продать за биржевом рынке, так и на внебиржевом (в торговле на выходных). +Поэтому есть еще один идентификатор - **торговый инструмент** - он определяется как ценная бумага на торговой площадке (бирже) в указанном режиме торгов. Получить котировки можно только по торговому инструменту. Подведем итоги, +* идентификатор компании - это uid бренда * идентификатор актива - это asset_uid * идентификатор позиции - это position_uid * идентификатор торгового инструмента - это instrument_uid diff --git a/src/docs/get_tech_indicators.md b/src/docs/get_tech_indicators.md new file mode 100644 index 00000000..e4189ffa --- /dev/null +++ b/src/docs/get_tech_indicators.md @@ -0,0 +1,112 @@ +#Методы работы с индикаторами технического анализа + +В документации приведена [статья](/investAPI/tech_indicators/) в которой можно ознакомиться +с некоторыми существующими индикаторами технического анализа рынка, в TINKOFF INVEST API +представлен [метод](/investAPI/marketdata/#gettechanalysis), позволяющий получить некоторые из них: + +**SMA** — простая скользящая средняя; + +**EMA ** — экспоненциальная (скользящая) средняя; + +**BB** — линии Боллинджера; + +**MACD**; + +**RSI** — индекс относительной силы. + + + +##[Простая(SMA) и экспоненциальная(EMA) скользящие средние](https://www.tinkoff.ru/invest/help/educate/trading/about/ma-ema/) + +###Параметры SMA и EMA + +**interval** — это интервал времени, которому равна каждая свеча на свечном графике или каждая точка на линейном графике; + +**length** — это период, за который рассчитываются средние значения; + +Например, если поставить период скользящей средней 20 единиц, +то при интервале день она будет считать средние значения за 20 торговых дней, +а при интервале час — за 20 торговых часов. + +**signal** — рассчитанные значение в выходных параметрах метода. + + +##Линии Боллинджера(BB) + +###Параметры BB + +Кроме `interval` и `length` у линий Боллинджера существует еще один +необходимый параметр настройки индикатора: + +**deviation_multiplier** — количество стандартных отклонений, на которые отступает верхняя и нижняя граница; + +В результате для каждого интервала определяется три значения: + +**lower_band** — нижняя граница; + +**middle_band** — скользящее среднее значение; + +**upper_band** — верхняя граница; + + +##[MACD](https://www.tinkoff.ru/invest/help/educate/trading/about/macd/) + +###Параметры MACD + +Индикатору MACD кроме `interval` характерны следующие настроечные параметры: + +**fast_lenght** — быстрая линия; + +**slow_lenght** — медленная линия; + +**signal_smoothing** — сглаживание; + +На выходе определяется: + +**macd** — рассчитанный MACD; + +**signal** — значение сигнальной линии; + + +##[Индекс относительной силы (RSI)](https://www.tinkoff.ru/invest/help/educate/trading/about/rsi/) + +###Параметры RSI + +Так как RSI рассчитывается на основе EMA, ему характерны те же входные параметры: `interval` и `length` + +Результатом расчетов будет значение индекса `signal` + + +##Общие параметры для индикаторов теханализа + +Для получения индикаторов также необходимо задать следующие параметры: + +**from** — начало запрашиваемого периода, за который рассчитывается индикатор в часовом поясе UTC; + +**to** — окончание запрашиваемого периода в часовом поясе UTC; + +**type_of_price** — тип цены, используемый при расчёте индикатора; + + +##Обобщенная таблица параметров + +###Входные параметры + +| Indicator | interval | length | deviation_multiplier | fast_length | slow_length | signal_smoothing | from | to | type_of_price | +|:----------|:--------------------|:-------------|:---------------------|:-------------|:--------------|:-----------------|:----------|:----------|:------------------------| +| **SMA** | от минуты до месяца | от 1 до 1000 | | | | | Timestamp | Timestamp | close\open\high\low\avg | +| **EMA** | от минуты до месяца | от 1 до 1000 | | | | | Timestamp | Timestamp | close\open\high\low\avg | +| **BB** | от минуты до месяца | от 1 до 1000 | от 0 до 50 | | | | Timestamp | Timestamp | close\open\high\low\avg | +| **MACD** | от минуты до месяца | | | от 1 до 1000 | от 1 до 1000 | от 0 до 50 | Timestamp | Timestamp | close\open\high\low\avg | +| **RSI** | от минуты до месяца | от 1 до 1000 | | | | | Timestamp | Timestamp | close\open\high\low\avg | + + +###Выходные параметры + +| Indicator | dt | signal | lower_band | middle_band | upper_band | macd | +|:----------|:----------|:---------------------|:---------------|:-------------------|:----------------|:-----| +| **SMA** | Timestamp | скользящее среднее | | | | | +| **EMA** | Timestamp | скользящее среднее | | | | | +| **BB** | Timestamp | | нижняя граница | скользящее среднее | верхняя граница | | +| **MACD** | Timestamp | сигнальное значение | | | | MACD | +| **RSI** | Timestamp | индекс силы | | | | | \ No newline at end of file diff --git a/src/docs/marketdata.md b/src/docs/marketdata.md index 44e2904c..68849623 100644 --- a/src/docs/marketdata.md +++ b/src/docs/marketdata.md @@ -65,6 +65,14 @@ - Тело ответа — [GetClosePricesResponse](#getclosepricesresponse) + +#### GetTechAnalysis + + +- Тело запроса — [GetTechAnalysisRequest](#gettechanalysisrequest) + +- Тело ответа — [GetTechAnalysisResponse](#gettechanalysisresponse) + @@ -739,6 +747,76 @@ subscribeCandles | Изменения статуса подписки на св | time | [google.protobuf.Timestamp](#googleprotobuftimestamp) | Дата совершения торгов. | + + +#### GetTechAnalysisRequest + + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| indicator_type | [GetTechAnalysisRequest.IndicatorType](#gettechanalysisrequestindicatortype) | Тип технического индикатора. | +| instrument_uid | [string](#string) | Uid инструмента. | +| from | [google.protobuf.Timestamp](#googleprotobuftimestamp) | Начало запрашиваемого периода в часовом поясе UTC. | +| to | [google.protobuf.Timestamp](#googleprotobuftimestamp) | Окончание запрашиваемого периода в часовом поясе UTC. | +| interval | [GetTechAnalysisRequest.IndicatorInterval](#gettechanalysisrequestindicatorinterval) | Интервал, за который рассчитывается индикатор. | +| type_of_price | [GetTechAnalysisRequest.TypeOfPrice](#gettechanalysisrequesttypeofprice) | Тип цены, используемый при расчёте индикатора. | +| length | [int32](#int32) | Торговый период, за который рассчитывается индикатор. | +| deviation | [GetTechAnalysisRequest.Deviation](#gettechanalysisrequestdeviation) | Параметры отклонения. | +| smoothing | [GetTechAnalysisRequest.Smoothing](#gettechanalysisrequestsmoothing) | Параметры сглаживания. | + + + + +#### GetTechAnalysisRequest.Smoothing + + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| fast_length | [int32](#int32) | Короткий период сглаживания для первой экспоненциальной скользящей средней (EMA). | +| slow_length | [int32](#int32) | Длинный период сглаживания для второй экспоненциальной скользящей средней (EMA). | +| signal_smoothing | [int32](#int32) | Период сглаживания для третьей экспоненциальной скользящей средней (EMA) | + + + + +#### GetTechAnalysisRequest.Deviation + + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| deviation_multiplier | [Quotation](#quotation) | Кол-во стандартных отклонений, на которые отступает верхняя и нижняя граница | + + + + +#### GetTechAnalysisResponse + + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| technical_indicators | Массив объектов [GetTechAnalysisResponse.TechAnalysisItem](#gettechanalysisresponsetechanalysisitem) | Массив значений результатов тех. анализа | + + + + +#### GetTechAnalysisResponse.TechAnalysisItem + + + +| Field | Type | Description | +| ----- | ---- | ----------- | +| timestamp | [google.protobuf.Timestamp](#googleprotobuftimestamp) | Временная метка по UTC, для которой были рассчитаны значения индикатора. | +| middle_band | [Quotation](#quotation) | Значение простого скользящего среднего (средней линии). | +| upper_band | [Quotation](#quotation) | Значение верхней линии Боллинджера. | +| lower_band | [Quotation](#quotation) | Значение нижней линии Боллинджера. | +| signal | [Quotation](#quotation) | Значение сигнальной линии. | +| macd | [Quotation](#quotation) | Значение линии MACD. | + + ### Enums @@ -843,6 +921,59 @@ subscribeCandles | Изменения статуса подписки на св | ORDERBOOK_TYPE_DEALER | 2 | Стакан дилера | + + +#### GetTechAnalysisRequest.IndicatorInterval +Интервал свечи. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| INDICATOR_INTERVAL_UNSPECIFIED | 0 | Интервал не определён. | +| INDICATOR_INTERVAL_ONE_MINUTE | 1 | 1 минута. | +| INDICATOR_INTERVAL_FIVE_MINUTES | 2 | 5 минут. | +| INDICATOR_INTERVAL_FIFTEEN_MINUTES | 3 | 15 минут. | +| INDICATOR_INTERVAL_ONE_HOUR | 4 | 1 час. | +| INDICATOR_INTERVAL_ONE_DAY | 5 | 1 день. | +| INDICATOR_INTERVAL_2_MIN | 6 | 2 минуты. | +| INDICATOR_INTERVAL_3_MIN | 7 | 3 минуты. | +| INDICATOR_INTERVAL_10_MIN | 8 | 10 минут. | +| INDICATOR_INTERVAL_30_MIN | 9 | 30 минут. | +| INDICATOR_INTERVAL_2_HOUR | 10 | 2 часа. | +| INDICATOR_INTERVAL_4_HOUR | 11 | 4 часа. | +| INDICATOR_INTERVAL_WEEK | 12 | Неделя | +| INDICATOR_INTERVAL_MONTH | 13 | Месяц | + + + + +#### GetTechAnalysisRequest.TypeOfPrice + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| TYPE_OF_PRICE_UNSPECIFIED | 0 | Не указано. | +| TYPE_OF_PRICE_CLOSE | 1 | Цена закрытия. | +| TYPE_OF_PRICE_OPEN | 2 | Цена открытия. | +| TYPE_OF_PRICE_HIGH | 3 | Максимальное значение за выбранный интервал. | +| TYPE_OF_PRICE_LOW | 4 | Минимальное значение за выбранный интервал. | +| TYPE_OF_PRICE_AVG | 5 | Среднее значение по показателям [ (close + open + high + low) / 4 ]. | + + + + +#### GetTechAnalysisRequest.IndicatorType + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| INDICATOR_TYPE_UNSPECIFIED | 0 | Не определен. | +| INDICATOR_TYPE_BB | 1 | Bollinger Bands (Линия Боллинжера). | +| INDICATOR_TYPE_EMA | 2 | Exponential Moving Average (EMA, Экспоненциальная скользящая средняя). | +| INDICATOR_TYPE_RSI | 3 | Relative Strength Index (Индекс относительной силы). | +| INDICATOR_TYPE_MACD | 4 | Moving Average Convergence/Divergence (Схождение/Расхождение скользящих средних). | +| INDICATOR_TYPE_SMA | 5 | Simple Moving Average (Простое скользящее среднее). | + + diff --git a/src/docs/orders.md b/src/docs/orders.md index b036f854..dfa5e8b4 100644 --- a/src/docs/orders.md +++ b/src/docs/orders.md @@ -291,6 +291,7 @@ Stream сделок пользователя | price | [MoneyValue](#moneyvalue) | Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. | | quantity | [int64](#int64) | Количество лотов. | | trade_id | [string](#string) | Идентификатор сделки. | +| execution_time | [google.protobuf.Timestamp](#googleprotobuftimestamp) | Время исполнения сделки | diff --git a/src/docs/swagger-ui/openapi.yaml b/src/docs/swagger-ui/openapi.yaml index a56ca295..659d4908 100644 --- a/src/docs/swagger-ui/openapi.yaml +++ b/src/docs/swagger-ui/openapi.yaml @@ -4,7 +4,7 @@ info: termsOfService: https://www.tinkoff.ru/invest/disclaimers/basic-information/ contact: email: al.a.volkov@tinkoff.ru - version: '1.9' + version: '1.10' license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0 @@ -1047,6 +1047,31 @@ paths: tags: - MarketDataService x-codegen-request-body-name: body + /tinkoff.public.invest.api.contract.v1.MarketDataService/GetTechAnalysis: + post: + operationId: MarketDataService_GetTechAnalysis + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetTechAnalysisRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/v1GetTechAnalysisResponse' + description: A successful response. + default: + content: + application/json: + schema: + $ref: '#/components/schemas/rpcStatus' + description: An unexpected error response. + tags: + - MarketDataService + x-codegen-request-body-name: body /tinkoff.public.invest.api.contract.v1.MarketDataService/GetTradingStatus: post: operationId: MarketDataService_GetTradingStatus @@ -3122,6 +3147,137 @@ components: initialMargin: $ref: '#/components/schemas/v1MoneyValue' type: object + GetTechAnalysisRequestDeviation: + properties: + deviationMultiplier: + $ref: '#/components/schemas/v1Quotation' + type: object + GetTechAnalysisRequestIndicatorInterval: + default: INDICATOR_INTERVAL_UNSPECIFIED + description: |- + Интервал свечи. + + - INDICATOR_INTERVAL_UNSPECIFIED: Интервал не определён. + - INDICATOR_INTERVAL_ONE_MINUTE: 1 минута. + - INDICATOR_INTERVAL_FIVE_MINUTES: 5 минут. + - INDICATOR_INTERVAL_FIFTEEN_MINUTES: 15 минут. + - INDICATOR_INTERVAL_ONE_HOUR: 1 час. + - INDICATOR_INTERVAL_ONE_DAY: 1 день. + - INDICATOR_INTERVAL_2_MIN: 2 минуты. + - INDICATOR_INTERVAL_3_MIN: 3 минуты. + - INDICATOR_INTERVAL_10_MIN: 10 минут. + - INDICATOR_INTERVAL_30_MIN: 30 минут. + - INDICATOR_INTERVAL_2_HOUR: 2 часа. + - INDICATOR_INTERVAL_4_HOUR: 4 часа. + - INDICATOR_INTERVAL_WEEK: Неделя + - INDICATOR_INTERVAL_MONTH: Месяц + enum: + - INDICATOR_INTERVAL_UNSPECIFIED + - INDICATOR_INTERVAL_ONE_MINUTE + - INDICATOR_INTERVAL_FIVE_MINUTES + - INDICATOR_INTERVAL_FIFTEEN_MINUTES + - INDICATOR_INTERVAL_ONE_HOUR + - INDICATOR_INTERVAL_ONE_DAY + - INDICATOR_INTERVAL_2_MIN + - INDICATOR_INTERVAL_3_MIN + - INDICATOR_INTERVAL_10_MIN + - INDICATOR_INTERVAL_30_MIN + - INDICATOR_INTERVAL_2_HOUR + - INDICATOR_INTERVAL_4_HOUR + - INDICATOR_INTERVAL_WEEK + - INDICATOR_INTERVAL_MONTH + type: string + GetTechAnalysisRequestIndicatorType: + default: INDICATOR_TYPE_UNSPECIFIED + description: |2- + - INDICATOR_TYPE_UNSPECIFIED: Не определен. + - INDICATOR_TYPE_BB: Bollinger Bands (Линия Боллинжера). + - INDICATOR_TYPE_EMA: Exponential Moving Average (EMA, Экспоненциальная скользящая средняя). + - INDICATOR_TYPE_RSI: Relative Strength Index (Индекс относительной силы). + - INDICATOR_TYPE_MACD: Moving Average Convergence/Divergence (Схождение/Расхождение скользящих средних). + - INDICATOR_TYPE_SMA: Simple Moving Average (Простое скользящее среднее). + enum: + - INDICATOR_TYPE_UNSPECIFIED + - INDICATOR_TYPE_BB + - INDICATOR_TYPE_EMA + - INDICATOR_TYPE_RSI + - INDICATOR_TYPE_MACD + - INDICATOR_TYPE_SMA + type: string + GetTechAnalysisRequestSmoothing: + properties: + fastLength: + description: >- + Короткий период сглаживания для первой экспоненциальной скользящей + средней (EMA). + format: int32 + type: integer + slowLength: + description: >- + Длинный период сглаживания для второй экспоненциальной скользящей + средней (EMA). + format: int32 + type: integer + signalSmoothing: + format: int32 + title: >- + Период сглаживания для третьей экспоненциальной скользящей средней + (EMA) + type: integer + type: object + GetTechAnalysisRequestTypeOfPrice: + default: TYPE_OF_PRICE_UNSPECIFIED + description: |2- + - TYPE_OF_PRICE_UNSPECIFIED: Не указано. + - TYPE_OF_PRICE_CLOSE: Цена закрытия. + - TYPE_OF_PRICE_OPEN: Цена открытия. + - TYPE_OF_PRICE_HIGH: Максимальное значение за выбранный интервал. + - TYPE_OF_PRICE_LOW: Минимальное значение за выбранный интервал. + - TYPE_OF_PRICE_AVG: Среднее значение по показателям [ (close + open + high + low) / 4 ]. + enum: + - TYPE_OF_PRICE_UNSPECIFIED + - TYPE_OF_PRICE_CLOSE + - TYPE_OF_PRICE_OPEN + - TYPE_OF_PRICE_HIGH + - TYPE_OF_PRICE_LOW + - TYPE_OF_PRICE_AVG + type: string + GetTechAnalysisResponseTechAnalysisItem: + example: + lowerBand: + nano: 6 + units: units + upperBand: + nano: 6 + units: units + macd: + nano: 6 + units: units + signal: + nano: 6 + units: units + timestamp: 2000-01-23T04:56:07.000Z + middleBand: + nano: 6 + units: units + properties: + timestamp: + description: >- + Временная метка по UTC, для которой были рассчитаны значения + индикатора. + format: date-time + type: string + middleBand: + $ref: '#/components/schemas/v1Quotation' + upperBand: + $ref: '#/components/schemas/v1Quotation' + lowerBand: + $ref: '#/components/schemas/v1Quotation' + signal: + $ref: '#/components/schemas/v1Quotation' + macd: + $ref: '#/components/schemas/v1Quotation' + type: object PortfolioRequestCurrencyRequest: default: RUB enum: @@ -8908,13 +9064,15 @@ components: lotsRequested: lotsRequested instrumentUid: instrumentUid stages: - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency units: units tradeId: tradeId - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency @@ -8961,13 +9119,15 @@ components: lotsRequested: lotsRequested instrumentUid: instrumentUid stages: - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency units: units tradeId: tradeId - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency @@ -9087,6 +9247,83 @@ components: title: Массив стоп-заявок по счёту type: array type: object + v1GetTechAnalysisRequest: + properties: + indicatorType: + $ref: '#/components/schemas/GetTechAnalysisRequestIndicatorType' + instrumentUid: + description: Uid инструмента. + type: string + from: + description: Начало запрашиваемого периода в часовом поясе UTC. + format: date-time + type: string + to: + description: Окончание запрашиваемого периода в часовом поясе UTC. + format: date-time + type: string + interval: + $ref: '#/components/schemas/GetTechAnalysisRequestIndicatorInterval' + typeOfPrice: + $ref: '#/components/schemas/GetTechAnalysisRequestTypeOfPrice' + length: + description: Торговый период, за который рассчитывается индикатор. + format: int32 + type: integer + deviation: + $ref: '#/components/schemas/GetTechAnalysisRequestDeviation' + smoothing: + $ref: '#/components/schemas/GetTechAnalysisRequestSmoothing' + required: + - from + - indicatorType + - instrumentUid + - interval + - to + - typeOfPrice + type: object + v1GetTechAnalysisResponse: + example: + technicalIndicators: + - lowerBand: + nano: 6 + units: units + upperBand: + nano: 6 + units: units + macd: + nano: 6 + units: units + signal: + nano: 6 + units: units + timestamp: 2000-01-23T04:56:07.000Z + middleBand: + nano: 6 + units: units + - lowerBand: + nano: 6 + units: units + upperBand: + nano: 6 + units: units + macd: + nano: 6 + units: units + signal: + nano: 6 + units: units + timestamp: 2000-01-23T04:56:07.000Z + middleBand: + nano: 6 + units: units + properties: + technicalIndicators: + items: + $ref: '#/components/schemas/GetTechAnalysisResponseTechAnalysisItem' + title: Массив значений результатов тех. анализа + type: array + type: object v1GetTradingStatusRequest: description: Запрос получения торгового статуса. properties: @@ -11291,6 +11528,7 @@ components: v1OrderStage: description: Сделки в рамках торгового поручения. example: + executionTime: 2000-01-23T04:56:07.000Z quantity: quantity price: nano: 5 @@ -11307,6 +11545,10 @@ components: tradeId: description: Идентификатор сделки. type: string + executionTime: + format: date-time + title: Время исполнения сделки + type: string type: object v1OrderState: description: Информация о торговом поручении. @@ -11333,13 +11575,15 @@ components: lotsRequested: lotsRequested instrumentUid: instrumentUid stages: - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency units: units tradeId: tradeId - - quantity: quantity + - executionTime: 2000-01-23T04:56:07.000Z + quantity: quantity price: nano: 5 currency: currency diff --git a/src/docs/weekend_trading.md b/src/docs/weekend_trading.md index a6be120c..d80e01fa 100644 --- a/src/docs/weekend_trading.md +++ b/src/docs/weekend_trading.md @@ -1,5 +1,6 @@ -# Особенности торговли в выходные дни +# Особенности торговли в выходные дни и на внутреннем рынке +##О торговле в выходные дни В выходные и нерабочие дни, когда торги на биржах не проводятся, в TINKOFF INVEST API есть возможность совершать операции. Заключать сделки возможно только по [ограниченному списку инструментов](/investAPI/faq_instruments/#_20). Торговля по выходным имеет ряд [особенностей](https://www.tinkoff.ru/finance/blog/weekend-trading/). @@ -8,9 +9,29 @@ ## Котировки и рыночные данные Так как торговля осуществляется на внутреннем рынке, [торговый статус](/investAPI/marketdata/#gettradingstatus) инструмента будет DEALER_NORMAL_TRADING. -Стакан получается [обычным](/investAPI/marketdata/#getorderbook) методом. +Стакан можно получить [обычным](/investAPI/marketdata/#getorderbook) методом. + +###Торговый статус инструмента + +Следует различать торговый статус инструмента на бирже и на внутреннем рынке. Возможность торговать инструментом на бирже в API имеет +больший приоритет, чем торговля внутри брокера. Например, если на бирже торговый статус инструмента NORMAL_TRADING +и на внутреннем рынке статус DEALER_NORMAL_TRADING, то в ответе методов будет возвращаться +SECURITY_TRADING_STATUS_NORMAL_TRADING, при этом изменение внутреннего статуса не будет транслироваться в стримы. + +Изменение биржевого статуса всегда передается в стрим. Если после изменения биржевого статуса торги на бирже не доступны, +а внутренний рынок открыт для торговли, то после биржевого статуса в стрим будет продублирован торговый статус +внутреннего рынка. В таблице приведены некоторые ситуации и поведение API: + +| Ситуация(в динамике) | Торговый статус инструмента | Сообщения в стриме | +|:------------------------------------------|:----------------------------|:-----------------------------------------------------| +|Открытие торгов на внутреннем рынке | DEALER_NORMAL_TRADING | DEALER_NORMAL_TRADING | +|Остановка торгов на внутреннем рынке | DEALER_BREAK_IN_TRADING | DEALER_BREAK_IN_TRADING | +|Открытие торгов на бирже | NORMAL_TRADING | NORMAL_TRADING | +|Открытие торгов на внутреннем рынке | NORMAL_TRADING | | +|Остановка торгов на бирже | DEALER_NORMAL_TRADING |сначала BREAK_IN_TRADING, следом DEALER_NORMAL_TRADING| +|Возобновление торгов на бирже | NORMAL_TRADING | NORMAL_TRADING | +|Остановка торгов на внутреннем рынке | NORMAL_TRADING | | -**Важно!** Торговый статус и стакан сейчас недоступны в [стримах](/investAPI/head-marketdata/#bidirectional-stream) и будут добавлены в ближайших релизах. ### Свечи diff --git a/src/docs/ws/asyncapi.yaml b/src/docs/ws/asyncapi.yaml index 71a50f9e..ee10d85b 100644 --- a/src/docs/ws/asyncapi.yaml +++ b/src/docs/ws/asyncapi.yaml @@ -1,7 +1,7 @@ asyncapi: 2.6.0 info: title: Tinkoff Invest API - version: '1.9' + version: '1.10' description: Websocket API for streaming data license: name: Apache 2.0 diff --git a/src/docs/ws/websock/draft-asyncapi.yaml b/src/docs/ws/websock/draft-asyncapi.yaml index 71a50f9e..ee10d85b 100644 --- a/src/docs/ws/websock/draft-asyncapi.yaml +++ b/src/docs/ws/websock/draft-asyncapi.yaml @@ -1,7 +1,7 @@ asyncapi: 2.6.0 info: title: Tinkoff Invest API - version: '1.9' + version: '1.10' description: Websocket API for streaming data license: name: Apache 2.0 diff --git a/src/mkdocs.yml b/src/mkdocs.yml index 0cb51021..eb9b68e3 100644 --- a/src/mkdocs.yml +++ b/src/mkdocs.yml @@ -84,6 +84,7 @@ nav: - Методы: marketdata.md - FAQ: faq_marketdata.md - Получение исторических рыночных данных: get_history.md + - Методы работы с индикаторами технического анализа: get_tech_indicators.md - Сервис стоп-ордеров: - Описание: head-stoporders.md - Методы: stoporders.md