RAPTOR v18.4: Исправлена отчетность, активированы выходные

This commit is contained in:
root
2026-04-18 23:26:45 +03:00
commit ef0958239e
312 changed files with 54247 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
syntax = "proto3";
package tinkoff.public.invest.api.contract.v1;
option go_package = "./;investapi";
option java_package = "ru.tinkoff.piapi.contract.v1";
option java_multiple_files = true;
option csharp_namespace = "Tinkoff.InvestApi.V1";
option objc_class_prefix = "TIAPI";
option php_namespace = "Tinkoff\\Invest\\V1";
import "google/protobuf/timestamp.proto";
//Тип инструмента.
enum InstrumentType {
INSTRUMENT_TYPE_UNSPECIFIED = 0;
INSTRUMENT_TYPE_BOND = 1; //Облигация.
INSTRUMENT_TYPE_SHARE = 2; //Акция.
INSTRUMENT_TYPE_CURRENCY = 3; //Валюта.
INSTRUMENT_TYPE_ETF = 4; //Exchange-traded fund. Фонд.
INSTRUMENT_TYPE_FUTURES = 5; //Фьючерс.
INSTRUMENT_TYPE_SP = 6; //Структурная нота.
INSTRUMENT_TYPE_OPTION = 7; //Опцион.
INSTRUMENT_TYPE_CLEARING_CERTIFICATE = 8; //Clearing certificate.
INSTRUMENT_TYPE_INDEX = 9; //Индекс.
INSTRUMENT_TYPE_COMMODITY = 10; //Товар.
INSTRUMENT_TYPE_DFA = 11; //Цифровой актив.
}
//Статус запрашиваемых инструментов.
enum InstrumentStatus {
INSTRUMENT_STATUS_UNSPECIFIED = 0; //Значение не определено.
INSTRUMENT_STATUS_BASE = 1; //По умолчанию — базовый список инструментов, которыми можно торговать через T-Invest API. Сейчас списки доступных бумаг в API и других интерфейсах совпадают — кроме внебиржевых бумаг, но в будущем списки могут различаться.
INSTRUMENT_STATUS_ALL = 2; //Список всех инструментов.
}
//Денежная сумма в определенной валюте.
message MoneyValue {
// Строковый ISO-код валюты.
string currency = 1;
// Целая часть суммы, может быть отрицательным числом.
int64 units = 2;
// Дробная часть суммы, может быть отрицательным числом.
int32 nano = 3;
}
//Котировка — денежная сумма без указания валюты.
message Quotation {
// Целая часть суммы, может быть отрицательным числом.
int64 units = 1;
// Дробная часть суммы, может быть отрицательным числом.
int32 nano = 2;
}
//Режим торгов инструмента
enum SecurityTradingStatus {
SECURITY_TRADING_STATUS_UNSPECIFIED = 0; //Торговый статус не определен.
SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING = 1; //Недоступен для торгов.
SECURITY_TRADING_STATUS_OPENING_PERIOD = 2; //Период открытия торгов.
SECURITY_TRADING_STATUS_CLOSING_PERIOD = 3; //Период закрытия торгов.
SECURITY_TRADING_STATUS_BREAK_IN_TRADING = 4; //Перерыв в торговле.
SECURITY_TRADING_STATUS_NORMAL_TRADING = 5; //Нормальная торговля.
SECURITY_TRADING_STATUS_CLOSING_AUCTION = 6; //Аукцион закрытия.
SECURITY_TRADING_STATUS_DARK_POOL_AUCTION = 7; //Аукцион крупных пакетов.
SECURITY_TRADING_STATUS_DISCRETE_AUCTION = 8; //Дискретный аукцион.
SECURITY_TRADING_STATUS_OPENING_AUCTION_PERIOD = 9; //Аукцион открытия.
SECURITY_TRADING_STATUS_TRADING_AT_CLOSING_AUCTION_PRICE = 10; //Период торгов по цене аукциона закрытия.
SECURITY_TRADING_STATUS_SESSION_ASSIGNED = 11; //Сессия назначена.
SECURITY_TRADING_STATUS_SESSION_CLOSE = 12; //Сессия закрыта.
SECURITY_TRADING_STATUS_SESSION_OPEN = 13; //Сессия открыта.
SECURITY_TRADING_STATUS_DEALER_NORMAL_TRADING = 14; //Доступна торговля в режиме внутренней ликвидности брокера.
SECURITY_TRADING_STATUS_DEALER_BREAK_IN_TRADING = 15; //Перерыв торговли в режиме внутренней ликвидности брокера.
SECURITY_TRADING_STATUS_DEALER_NOT_AVAILABLE_FOR_TRADING = 16; //Недоступна торговля в режиме внутренней ликвидности брокера.
SECURITY_TRADING_STATUS_STABILIZATION_AUCTION = 17; //Аукцион обновления цен.
}
message PingRequest {
optional google.protobuf.Timestamp time = 1; //Время формирования запроса.
}
message PingDelaySettings {
optional int32 ping_delay_ms = 15; //Задержка (пинг) сообщений: 5000180 000 миллисекунд. Значение по умолчанию — 120 000.
}
//Проверка активности стрима.
message Ping {
google.protobuf.Timestamp time = 1; //Время проверки.
string stream_id = 2; //Идентификатор соединения.
optional google.protobuf.Timestamp ping_request_time = 4; //Время формирования запроса.
}
//Тип цены.
enum PriceType {
PRICE_TYPE_UNSPECIFIED = 0; //Значение не определено.
PRICE_TYPE_POINT = 1; //Цена в пунктах (только для фьючерсов и облигаций).
PRICE_TYPE_CURRENCY = 2; //Цена в валюте расчетов по инструменту.
}
message Page {
int32 limit = 1; //Максимальное число возвращаемых записей.
int32 page_number = 2; //Порядковый номер страницы, начиная с 0.
}
message PageResponse {
int32 limit = 1; //Максимальное число возвращаемых записей.
int32 page_number = 2; //Порядковый номер страницы, начиная с 0.
int32 total_count = 3; //Общее количество записей.
}
message ResponseMetadata {
string tracking_id = 42; //Идентификатор трекинга.
google.protobuf.Timestamp server_time = 43; //Серверное время.
}
message BrandData {
string logo_name = 1; // Логотип инструмента. Имя файла для получения логотипа.
string logo_base_color = 2; // Цвет бренда.
string text_color = 3; // Цвет текста для цвета логотипа бренда.
}
enum ResultSubscriptionStatus {
RESULT_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Статус подписки не определен.
RESULT_SUBSCRIPTION_STATUS_OK = 1; //Подписка успешно установлена.
RESULT_SUBSCRIPTION_STATUS_ERROR = 13; //Ошибка подписки
}
message ErrorDetail {
string code = 1; //Код ошибки.
string message = 3; //Описание ошибки.
}
//Реальная площадка исполнения расчетов.
enum RealExchange {
REAL_EXCHANGE_UNSPECIFIED = 0; //Тип не определен.
REAL_EXCHANGE_MOEX = 1; //Московская биржа.
REAL_EXCHANGE_RTS = 2; //Санкт-Петербургская биржа.
REAL_EXCHANGE_OTC = 3; //Внебиржевой инструмент.
REAL_EXCHANGE_DEALER = 4; //Инструмент, торгуемый на площадке брокера.
}

View File

@@ -0,0 +1,90 @@
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.api;
import "google/protobuf/descriptor.proto";
option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations";
option java_multiple_files = true;
option java_outer_classname = "FieldBehaviorProto";
option java_package = "com.google.api";
option objc_class_prefix = "GAPI";
extend google.protobuf.FieldOptions {
// A designation of a specific field behavior (required, output only, etc.)
// in protobuf messages.
//
// Examples:
//
// string name = 1 [(google.api.field_behavior) = REQUIRED];
// State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// google.protobuf.Duration ttl = 1
// [(google.api.field_behavior) = INPUT_ONLY];
// google.protobuf.Timestamp expire_time = 1
// [(google.api.field_behavior) = OUTPUT_ONLY,
// (google.api.field_behavior) = IMMUTABLE];
repeated google.api.FieldBehavior field_behavior = 1052;
}
// An indicator of the behavior of a given field (for example, that a field
// is required in requests, or given as output but ignored as input).
// This **does not** change the behavior in protocol buffers itself; it only
// denotes the behavior and may affect how API tooling handles the field.
//
// Note: This enum **may** receive new values in the future.
enum FieldBehavior {
// Conventional default for enums. Do not use this.
FIELD_BEHAVIOR_UNSPECIFIED = 0;
// Specifically denotes a field as optional.
// While all fields in protocol buffers are optional, this may be specified
// for emphasis if appropriate.
OPTIONAL = 1;
// Denotes a field as required.
// This indicates that the field **must** be provided as part of the request,
// and failure to do so will cause an error (usually `INVALID_ARGUMENT`).
REQUIRED = 2;
// Denotes a field as output only.
// This indicates that the field is provided in responses, but including the
// field in a request does nothing (the server *must* ignore it and
// *must not* throw an error as a result of the field's presence).
OUTPUT_ONLY = 3;
// Denotes a field as input only.
// This indicates that the field is provided in requests, and the
// corresponding field is not included in output.
INPUT_ONLY = 4;
// Denotes a field as immutable.
// This indicates that the field may be set once in a request to create a
// resource, but may not be changed thereafter.
IMMUTABLE = 5;
// Denotes that a (repeated) field is an unordered list.
// This indicates that the service may provide the elements of the list
// in any arbitrary order, rather than the order the user originally
// provided. Additionally, the list's order may or may not be stable.
UNORDERED_LIST = 6;
// Denotes that this field returns a non-empty default value if not set.
// This indicates that if the user provides the empty value in a request,
// a non-empty value will be returned. The user will not be aware of what
// non-empty value to expect.
NON_EMPTY_DEFAULT = 7;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,692 @@
syntax = "proto3";
package tinkoff.public.invest.api.contract.v1;
option go_package = "./;investapi";
option java_package = "ru.tinkoff.piapi.contract.v1";
option java_multiple_files = true;
option csharp_namespace = "Tinkoff.InvestApi.V1";
option objc_class_prefix = "TIAPI";
option php_namespace = "Tinkoff\\Invest\\V1";
import "google/protobuf/timestamp.proto";
import "t_tech/invest/grpc/common.proto";
import "t_tech/invest/grpc/google/api/field_behavior.proto";
service MarketDataService {//Сервис для получения биржевой информации:<br/> 1. Свечи.<br/> 2. Стаканы.<br/> 3. Торговые статусы.<br/> 4. Лента сделок.
//GetCandles — исторические свечи по инструменту
rpc GetCandles(GetCandlesRequest) returns (GetCandlesResponse);
//GetLastPrices — цены последних сделок по инструментам
rpc GetLastPrices(GetLastPricesRequest) returns (GetLastPricesResponse);
//GetOrderBook — стакан по инструменту
rpc GetOrderBook(GetOrderBookRequest) returns (GetOrderBookResponse);
//GetTradingStatus — статус торгов по инструменту
rpc GetTradingStatus(GetTradingStatusRequest) returns (GetTradingStatusResponse);
//GetTradingStatuses — статус торгов по инструментам
rpc GetTradingStatuses(GetTradingStatusesRequest) returns (GetTradingStatusesResponse);
//GetLastTrades — обезличенные сделки
//Обезличенные сделки по инструменту. Метод гарантирует получение информации за последний час.
rpc GetLastTrades(GetLastTradesRequest) returns (GetLastTradesResponse);
//GetClosePrices — цены закрытия торговой сессии по инструментам
rpc GetClosePrices(GetClosePricesRequest) returns (GetClosePricesResponse);
//GetTechAnalysis — технические индикаторы по инструменту
rpc GetTechAnalysis(GetTechAnalysisRequest) returns (GetTechAnalysisResponse);
//GetMarketValues — рыночные данные по инструментам
rpc GetMarketValues(GetMarketValuesRequest) returns (GetMarketValuesResponse);
}
service MarketDataStreamService {
//MarketDataStream — bidirectional стрим предоставления биржевой информации
rpc MarketDataStream(stream MarketDataRequest) returns (stream MarketDataResponse);
//MarketDataServerSideStream — server-side стрим предоставления биржевой информации
rpc MarketDataServerSideStream(MarketDataServerSideStreamRequest) returns (stream MarketDataResponse);
}
//Запрос подписки или отписки на определенные биржевые данные.
message MarketDataRequest {
oneof payload {
SubscribeCandlesRequest subscribe_candles_request = 1; //Запрос подписки на свечи.
SubscribeOrderBookRequest subscribe_order_book_request = 2; //Запрос подписки на стаканы.
SubscribeTradesRequest subscribe_trades_request = 3; //Запрос подписки на ленту обезличенных сделок.
SubscribeInfoRequest subscribe_info_request = 4; //Запрос подписки на торговые статусы инструментов.
SubscribeLastPriceRequest subscribe_last_price_request = 5; //Запрос подписки на цены последних сделок.
GetMySubscriptions get_my_subscriptions = 6; //Запрос своих подписок.
PingRequest ping = 7; //Запрос проверки активности соединения.
PingDelaySettings ping_settings = 15; //Запрос настройки пинга.
}
}
message MarketDataServerSideStreamRequest {
SubscribeCandlesRequest subscribe_candles_request = 1; //Запрос подписки на свечи.
SubscribeOrderBookRequest subscribe_order_book_request = 2; //Запрос подписки на стаканы.
SubscribeTradesRequest subscribe_trades_request = 3; //Запрос подписки на ленту обезличенных сделок.
SubscribeInfoRequest subscribe_info_request = 4; //Запрос подписки на торговые статусы инструментов.
SubscribeLastPriceRequest subscribe_last_price_request = 5; //Запрос подписки на цены последних сделок.
PingDelaySettings ping_settings = 15; //Запрос настройки пинга.
}
//Пакет биржевой информации по подписке.
message MarketDataResponse {
oneof payload {
SubscribeCandlesResponse subscribe_candles_response = 1; //Результат подписки на свечи.
SubscribeOrderBookResponse subscribe_order_book_response = 2; //Результат подписки на стаканы.
SubscribeTradesResponse subscribe_trades_response = 3; //Результат подписки на поток обезличенных сделок.
SubscribeInfoResponse subscribe_info_response = 4; //Результат подписки на торговые статусы инструментов.
Candle candle = 5; //Свеча.
Trade trade = 6; //Сделки.
OrderBook orderbook = 7; //Стакан.
TradingStatus trading_status = 8; //Торговый статус.
Ping ping = 9; //Проверка активности стрима.
SubscribeLastPriceResponse subscribe_last_price_response = 10; //Результат подписки на цены последние сделок по инструментам.
LastPrice last_price = 11; //Цена последней сделки.
OpenInterest open_interest = 12; //Открытый интерес.
}
}
// subscribeCandles | Изменения статуса подписки на свечи.
message SubscribeCandlesRequest {
SubscriptionAction subscription_action = 1; //Изменение статуса подписки.
repeated CandleInstrument instruments = 2; //Массив инструментов для подписки на свечи.
bool waiting_close = 3; //Флаг ожидания закрытия временного интервала для отправки свечи.
optional GetCandlesRequest.CandleSource candle_source_type = 9; //Источник свечей.
}
//Тип операции со списком подписок.
enum SubscriptionAction {
SUBSCRIPTION_ACTION_UNSPECIFIED = 0; //Статус подписки не определен.
SUBSCRIPTION_ACTION_SUBSCRIBE = 1; //Подписаться.
SUBSCRIPTION_ACTION_UNSUBSCRIBE = 2; //Отписаться.
}
//Интервал свечи.
enum SubscriptionInterval {
SUBSCRIPTION_INTERVAL_UNSPECIFIED = 0; //Интервал свечи не определен.
SUBSCRIPTION_INTERVAL_ONE_MINUTE = 1; //Минутные свечи.
SUBSCRIPTION_INTERVAL_FIVE_MINUTES = 2; //Пятиминутные свечи.
SUBSCRIPTION_INTERVAL_FIFTEEN_MINUTES = 3; //Пятнадцатиминутные свечи.
SUBSCRIPTION_INTERVAL_ONE_HOUR = 4; //Часовые свечи.
SUBSCRIPTION_INTERVAL_ONE_DAY = 5; //Дневные свечи.
SUBSCRIPTION_INTERVAL_2_MIN = 6; //Двухминутные свечи.
SUBSCRIPTION_INTERVAL_3_MIN = 7; //Трехминутные свечи.
SUBSCRIPTION_INTERVAL_10_MIN = 8; //Десятиминутные свечи.
SUBSCRIPTION_INTERVAL_30_MIN = 9; //Тридцатиминутные свечи.
SUBSCRIPTION_INTERVAL_2_HOUR = 10; //Двухчасовые свечи.
SUBSCRIPTION_INTERVAL_4_HOUR = 11; //Четырехчасовые свечи.
SUBSCRIPTION_INTERVAL_WEEK = 12; //Недельные свечи.
SUBSCRIPTION_INTERVAL_MONTH = 13; //Месячные свечи.
}
//Запрос изменения статус подписки на свечи.
message CandleInstrument {
string figi = 1 [deprecated = true]; // Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
SubscriptionInterval interval = 2; //Интервал свечей. Двухчасовые и четырехчасовые свечи в стриме отсчитываются с 0:00 по UTC.
string instrument_id = 3; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
}
//Результат изменения статус подписки на свечи.
message SubscribeCandlesResponse {
string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](./grpc#tracking-id).
repeated CandleSubscription candles_subscriptions = 2; //Массив статусов подписки на свечи.
}
//Статус подписки на свечи.
message CandleSubscription {
string figi = 1; //FIGI-идентификатор инструмента.
SubscriptionInterval interval = 2; //Интервал свечей.
SubscriptionStatus subscription_status = 3; //Статус подписки.
string instrument_uid = 4; //UID инструмента.
bool waiting_close = 5; //Флаг ожидания закрытия временного интервала для отправки свечи.
string stream_id = 6; //Идентификатор открытого соединения.
string subscription_id = 7; //Идентификатор подписки в формате `UUID`.
SubscriptionAction subscription_action = 8; //Действие подписки.
optional GetCandlesRequest.CandleSource candle_source_type = 9; //Источник свечей.
string ticker = 10; //Тикер инструмента.
string class_code = 11; //Класс-код (секция торгов).
}
//Результат подписки.
enum SubscriptionStatus {
SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Статус подписки не определен.
SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно.
SUBSCRIPTION_STATUS_INSTRUMENT_NOT_FOUND = 2; //Инструмент не найден.
SUBSCRIPTION_STATUS_SUBSCRIPTION_ACTION_IS_INVALID = 3; //Некорректный статус подписки. [Список возможных значений](./marketdata#subscriptionaction).
SUBSCRIPTION_STATUS_DEPTH_IS_INVALID = 4; //Некорректная глубина стакана. Доступные значения — 1, 10, 20, 30, 40, 50.
SUBSCRIPTION_STATUS_INTERVAL_IS_INVALID = 5; //Некорректный интервал свечей. [Список возможных значений](./marketdata#subscriptioninterval).
SUBSCRIPTION_STATUS_LIMIT_IS_EXCEEDED = 6; //Превышен лимит на общее количество подписок в рамках стрима. [Лимитная политика](./limits/).
SUBSCRIPTION_STATUS_INTERNAL_ERROR = 7; //Внутренняя ошибка сервиса.
SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS = 8; //Превышен лимит на количество запросов на подписки в течение установленного отрезка времени.
SUBSCRIPTION_STATUS_SUBSCRIPTION_NOT_FOUND = 9; // Активная подписка не найдена. Ошибка может возникнуть только при отписке от несуществующей подписки.
SUBSCRIPTION_STATUS_SOURCE_IS_INVALID = 10; //Указан некорректный источник.
}
//Запрос на изменение статуса подписки на стаканы.
message SubscribeOrderBookRequest {
SubscriptionAction subscription_action = 1; //Изменение статуса подписки.
repeated OrderBookInstrument instruments = 2; //Массив инструментов для подписки на стаканы.
}
//Запрос подписки на стаканы.
message OrderBookInstrument {
string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
int32 depth = 2; //Глубина стакана.
string instrument_id = 3; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
OrderBookType order_book_type = 4; //Тип стакана. Значение по умолчанию — `ORDERBOOK_TYPE_ALL`, стакан биржевой и дилера.
}
//Результат изменения статуса подписки на стаканы.
message SubscribeOrderBookResponse {
string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](./grpc#tracking-id).
repeated OrderBookSubscription order_book_subscriptions = 2; //Массив статусов подписки на стаканы.
}
//Статус подписки.
message OrderBookSubscription {
string figi = 1; //FIGI-идентификатор инструмента.
int32 depth = 2; //Глубина стакана.
SubscriptionStatus subscription_status = 3; //Статус подписки.
string instrument_uid = 4; //UID инструмента.
string stream_id = 5; //Идентификатор открытого соединения.
string subscription_id = 6; //Идентификатор подписки в формате `UUID`.
OrderBookType order_book_type = 7; //Тип стакана.
SubscriptionAction subscription_action = 8; //Действие подписки.
string ticker = 9; //Тикер инструмента.
string class_code = 10; //Класс-код (секция торгов).
}
//Типы источников сделок.
enum TradeSourceType {
TRADE_SOURCE_UNSPECIFIED = 0; //Тип источника сделки не определён.
TRADE_SOURCE_EXCHANGE = 1; // Биржевые сделки.
TRADE_SOURCE_DEALER = 2; // Сделки дилера.
TRADE_SOURCE_ALL = 3; // Все сделки.
}
//Изменение статуса подписки на поток обезличенных сделок.
message SubscribeTradesRequest {
SubscriptionAction subscription_action = 1; //Изменение статуса подписки.
repeated TradeInstrument instruments = 2; //Массив инструментов для подписки на поток обезличенных сделок.
TradeSourceType trade_source = 3; //Тип источника сделок. Значение по умолчанию — `TRADE_SOURCE_ALL`, все сделки.
bool with_open_interest = 4; //Флаг открытого интереса. **true** - в стриме дополнительно передается информация об открытом интересе для фьючерсов
}
//Запрос подписки на поток обезличенных сделок.
message TradeInstrument {
string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте instrument_id`.
string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
}
//Результат изменения статуса подписки на поток обезличенных сделок.
message SubscribeTradesResponse {
string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](./grpc#tracking-id).
repeated TradeSubscription trade_subscriptions = 2; //Массив статусов подписки на поток сделок.
TradeSourceType trade_source = 3; //Тип источника сделок.
}
//Статус подписки.
message TradeSubscription {
string figi = 1; //FIGI-идентификатор инструмента.
SubscriptionStatus subscription_status = 2; //Статус подписки.
string instrument_uid = 3; //UID инструмента.
string stream_id = 4; //Идентификатор открытого соединения.
string subscription_id = 5; //Идентификатор подписки в формате UUID.
bool with_open_interest = 6; //Флаг открытого интереса. **true** - в стриме дополнительно передается информация об открытом интересе для фьючерсов
SubscriptionAction subscription_action = 7; //Действие подписки.
string ticker = 8; //Тикер инструмента.
string class_code = 9; //Класс-код (секция торгов).
}
//Изменение статуса подписки на торговый статус инструмента.
message SubscribeInfoRequest {
SubscriptionAction subscription_action = 1; //Изменение статуса подписки.
repeated InfoInstrument instruments = 2; //Массив инструментов для подписки на торговый статус.
}
//Запрос подписки на торговый статус.
message InfoInstrument {
string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте instrument_id`.
string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
}
//Результат изменения статуса подписки на торговый статус.
message SubscribeInfoResponse {
string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](./grpc#tracking-id).
repeated InfoSubscription info_subscriptions = 2; //Массив статусов подписки на торговый статус.
}
//Статус подписки.
message InfoSubscription {
string figi = 1; //FIGI-идентификатор инструмента.
SubscriptionStatus subscription_status = 2; //Статус подписки.
string instrument_uid = 3; //UID инструмента.
string stream_id = 4; //Идентификатор открытого соединения.
string subscription_id = 5; //Идентификатор подписки в формате UUID.
SubscriptionAction subscription_action = 6; //Действие подписки.
string ticker = 7; //Тикер инструмента.
string class_code = 8; //Класс-код (секция торгов).
}
//Изменение статуса подписки на цену последней сделки по инструменту.
message SubscribeLastPriceRequest {
SubscriptionAction subscription_action = 1; //Изменение статуса подписки.
repeated LastPriceInstrument instruments = 2; //Массив инструментов для подписки на цену последней сделки.
}
//Запрос подписки на последнюю цену.
message LastPriceInstrument {
string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте instrument_id`.
string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
}
//Результат изменения статуса подписки на цену последней сделки.
message SubscribeLastPriceResponse {
string tracking_id = 1; //Уникальный идентификатор запроса. [Подробнее](./grpc#tracking-id).
repeated LastPriceSubscription last_price_subscriptions = 2; //Массив статусов подписки на цену последней сделки.
}
//Статус подписки на цену последней сделки.
message LastPriceSubscription {
string figi = 1; //FIGI-идентификатор инструмента.
SubscriptionStatus subscription_status = 2; //Статус подписки.
string instrument_uid = 3; //UID инструмента.
string stream_id = 4; //Идентификатор открытого соединения.
string subscription_id = 5; //Идентификатор подписки в формате `UUID`.
SubscriptionAction subscription_action = 6; //Действие подписки.
string ticker = 7; //Тикер инструмента.
string class_code = 8; //Класс-код (секция торгов).
}
//Пакет свечей в рамках стрима.
message Candle {
string figi = 1; //FIGI-идентификатор инструмента.
SubscriptionInterval interval = 2; //Интервал свечи.
Quotation open = 3; //Цена открытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation high = 4; //Максимальная цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation low = 5; //Минимальная цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation close = 6; //Цена закрытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
int64 volume = 7; //Объем сделок в лотах.
google.protobuf.Timestamp time = 8; //Время начала интервала свечи по UTC.
google.protobuf.Timestamp last_trade_ts = 9; //Время последней сделки, вошедшей в свечу по UTC.
string instrument_uid = 10; //UID инструмента.
string ticker = 11; //Тикер инструмента.
string class_code = 12; //Класс-код (секция торгов).
int64 volume_buy = 13; //Объем торгов на покупку.
int64 volume_sell = 14; //Объём торгов на продажу.
CandleSource candle_source_type = 19; //Источник свечей.
}
//Пакет стаканов в рамках стрима.
message OrderBook {
string figi = 1; //FIGI-идентификатор инструмента.
int32 depth = 2; //Глубина стакана.
bool is_consistent = 3; //Флаг консистентности стакана. **false** — не все заявки попали в стакан из-за сетевых задержек или нарушения порядка доставки.
repeated Order bids = 4; //Массив предложений.
repeated Order asks = 5; //Массив спроса.
google.protobuf.Timestamp time = 6; //Время формирования стакана в часовом поясе UTC по времени биржи.
Quotation limit_up = 7; //Верхний лимит цены за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation limit_down = 8; //Нижний лимит цены за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
string instrument_uid = 9; //UID инструмента.
OrderBookType order_book_type = 10; //Тип стакана.
string ticker = 11; //Тикер инструмента.
string class_code = 12; //Класс-код (секция торгов).
}
//Массив предложений/спроса.
message Order {
Quotation price = 1; //Цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
int64 quantity = 2; //Количество в лотах.
}
//Информация о сделке.
message Trade {
string figi = 1; //FIGI-идентификатор инструмента.
TradeDirection direction = 2; //Направление сделки.
Quotation price = 3; //Цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
int64 quantity = 4; //Количество лотов.
google.protobuf.Timestamp time = 5; //Время сделки в часовом поясе UTC по времени биржи.
string instrument_uid = 6; //UID инструмента.
TradeSourceType trade_source = 7; //Тип источника сделки.
string ticker = 8; //Тикер инструмента.
string class_code = 9; //Класс-код (секция торгов).
}
//Направление сделки.
enum TradeDirection {
TRADE_DIRECTION_UNSPECIFIED = 0; //Направление сделки не определено.
TRADE_DIRECTION_BUY = 1; //Покупка.
TRADE_DIRECTION_SELL = 2; //Продажа.
}
//Пакет изменения торгового статуса.
message TradingStatus {
string figi = 1; //FIGI-идентификатор инструмента.
SecurityTradingStatus trading_status = 2; //Статус торговли инструментом.
google.protobuf.Timestamp time = 3; //Время изменения торгового статуса по UTC.
bool limit_order_available_flag = 4; //Признак доступности выставления лимитной заявки по инструменту.
bool market_order_available_flag = 5; //Признак доступности выставления рыночной заявки по инструменту.
string instrument_uid = 6; //UID инструмента.
string ticker = 7; //Тикер инструмента.
string class_code = 8; //Класс-код (секция торгов).
}
//Запрос исторических свечей.
message GetCandlesRequest {
optional string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало запрашиваемого периода по UTC.
google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание запрашиваемого периода по UTC.
CandleInterval interval = 4 [(google.api.field_behavior) = REQUIRED]; //Интервал запрошенных свечей.
optional string instrument_id = 5; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
optional CandleSource candle_source_type = 7; //Тип источника свечи.
optional int32 limit = 10; //Максимальное количество свечей в ответе.
enum CandleSource {
CANDLE_SOURCE_UNSPECIFIED = 0; //Все свечи.
CANDLE_SOURCE_EXCHANGE = 1; //Биржевые свечи.
CANDLE_SOURCE_INCLUDE_WEEKEND = 3; //Все свечи с учетом торговли по выходным.
}
}
//Интервал свечей. Максимальное значение интервала приведено ориентировочно, может отличаться в большую сторону в зависимости от параметров запроса.
enum CandleInterval {
CANDLE_INTERVAL_UNSPECIFIED = 0; //Интервал не определен.
CANDLE_INTERVAL_1_MIN = 1; //От 1 минуты до 1 дня. Максимальное значение `limit` — 2400.
CANDLE_INTERVAL_5_MIN = 2; //От 5 минут до недели. Максимальное значение `limit` — 2400.
CANDLE_INTERVAL_15_MIN = 3; //От 15 минут до 3 недель. Максимальное значение `limit` — 2400.
CANDLE_INTERVAL_HOUR = 4; //От 1 часа до 3 месяцев. Максимальное значение `limit` — 2400.
CANDLE_INTERVAL_DAY = 5; //От 1 дня до 6 лет. Максимальное значение `limit` — 2400.
CANDLE_INTERVAL_2_MIN = 6; //От 2 минут до 1 дня. Максимальное значение `limit` — 1200.
CANDLE_INTERVAL_3_MIN = 7; //От 3 минут до 1 дня. Максимальное значение `limit` — 750.
CANDLE_INTERVAL_10_MIN = 8; //От 10 минут до недели. Максимальное значение `limit` — 1200.
CANDLE_INTERVAL_30_MIN = 9; //От 30 минут до 3 недель. Максимальное значение `limit` — 1200.
CANDLE_INTERVAL_2_HOUR = 10; //От 2 часов до 3 месяцев. Максимальное значение `limit` — 2400.
CANDLE_INTERVAL_4_HOUR = 11; //От 4 часов до 3 месяцев. Максимальное значение `limit` — 700.
CANDLE_INTERVAL_WEEK = 12; //От 1 недели до 5 лет. Максимальное значение `limit` — 300.
CANDLE_INTERVAL_MONTH = 13; //От 1 месяца до 10 лет. Максимальное значение `limit` — 120.
CANDLE_INTERVAL_5_SEC = 14; //От 5 секунд до 200 минут. Максимальное значение `limit` — 2500.
CANDLE_INTERVAL_10_SEC = 15; //От 10 секунд до 200 минут. Максимальное значение `limit` — 1250.
CANDLE_INTERVAL_30_SEC = 16; //От 30 секунд до 20 часов. Максимальное значение `limit` — 2500.
}
enum CandleSource {
CANDLE_SOURCE_UNSPECIFIED = 0; //Источник свечей не определен.
CANDLE_SOURCE_EXCHANGE = 1; //Биржевые свечи.
CANDLE_SOURCE_DEALER_WEEKEND = 2; //Свечи дилера в результате торговли по выходным.
}
//Список свечей.
message GetCandlesResponse {
repeated HistoricCandle candles = 1; //Массив свечей.
}
//Информация о свече.
message HistoricCandle {
Quotation open = 1; //Цена открытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation high = 2; //Максимальная цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation low = 3; //Минимальная цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation close = 4; //Цена закрытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
int64 volume = 5; //Объем торгов в лотах.
google.protobuf.Timestamp time = 6; //Время свечи в часовом поясе UTC.
bool is_complete = 7; //Признак завершенности свечи. **false** — свеча за текущие интервал еще сформирована не полностью.
CandleSource candle_source = 9; //Тип источника свечи
int64 volume_buy = 10; //Объем торгов на покупку.
int64 volume_sell = 11; //Объём торгов на продажу.
}
//Запрос получения цен последних сделок.
message GetLastPricesRequest {
repeated string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
repeated string instrument_id = 2; //Массив идентификаторов инструмента. Принимает значения `figi`, `instrument_uid` или `ticker + '_' + class_code`.
LastPriceType last_price_type = 3; //Тип запрашиваемой последней цены.
optional InstrumentStatus instrument_status = 9; //Статус запрашиваемых инструментов. [Возможные значения](#instrumentstatus).
}
//Список цен последних сделок.
message GetLastPricesResponse {
repeated LastPrice last_prices = 1; //Массив цен последних сделок.
}
//Информация о цене последней сделки.
message LastPrice {
string figi = 1; //FIGI инструмента.
Quotation price = 2; //Цена последней сделки за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
google.protobuf.Timestamp time = 3; //Время получения последней цены в часовом поясе UTC по времени биржи.
string ticker = 9; //Тикер инструмента.
string class_code = 10; //Класс-код (секция торгов).
string instrument_uid = 11; //UID инструмента.
LastPriceType last_price_type = 12; //Тип последней цены.
}
message OpenInterest {
string instrument_uid = 1; //UID инструмента.
google.protobuf.Timestamp time = 2; //Время получения открытого интереса в часовом поясе UTC по времени биржи.
int64 open_interest = 3; //Открытый интерес.
string ticker = 4; //Тикер инструмента.
string class_code = 5; //Класс-код (секция торгов).
}
//Запрос стакана.
message GetOrderBookRequest {
optional string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
int32 depth = 2 [(google.api.field_behavior) = REQUIRED]; //Глубина стакана.
optional string instrument_id = 3; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
}
//Информация о стакане.
message GetOrderBookResponse {
string figi = 1; //FIGI-идентификатор инструмента.
int32 depth = 2; //Глубина стакана.
repeated Order bids = 3; //Множество пар значений на покупку.
repeated Order asks = 4; //Множество пар значений на продажу.
Quotation last_price = 5; //Цена последней сделки за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation close_price = 6; //Цена закрытия за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation limit_up = 7; //Верхний лимит цены за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
Quotation limit_down = 8; //Нижний лимит цены за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. [Подробнее про перевод цен в валюту](./faq_marketdata/#_15).
string instrument_uid = 9; //UID инструмента.
string ticker = 10; //Тикер инструмента.
string class_code = 11; //Класс-код (секция торгов).
google.protobuf.Timestamp last_price_ts = 21; //Время получения цены последней сделки.
google.protobuf.Timestamp close_price_ts = 22; //Время получения цены закрытия.
google.protobuf.Timestamp orderbook_ts = 23; //Время формирования стакана на бирже.
}
//Запрос получения торгового статуса.
message GetTradingStatusRequest {
optional string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
optional string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`
}
//Запрос получения торгового статуса.
message GetTradingStatusesRequest {
repeated string instrument_id = 1; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`
}
//Информация о торговом статусе.
message GetTradingStatusesResponse {
repeated GetTradingStatusResponse trading_statuses = 1; //Массив информации о торговых статусах.
}
//Информация о торговом статусе.
message GetTradingStatusResponse {
string figi = 1; //FIGI-идентификатор инструмента.
SecurityTradingStatus trading_status = 2; //Статус торговли инструментом.
bool limit_order_available_flag = 3; //Признак доступности выставления лимитной заявки по инструменту.
bool market_order_available_flag = 4; //Признак доступности выставления рыночной заявки по инструменту.
bool api_trade_available_flag = 5; //Признак доступности торгов через API.
string instrument_uid = 6; //UID инструмента.
bool bestprice_order_available_flag = 8; //Признак доступности завяки по лучшей цене.
bool only_best_price = 9; //Признак доступности только заявки по лучшей цене.
string ticker = 10; //Тикер инструмента.
string class_code = 11; //Класс-код (секция торгов).
}
//Запрос обезличенных сделок за последний час.
message GetLastTradesRequest {
optional string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало запрашиваемого периода по UTC.
google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание запрашиваемого периода по UTC.
optional string instrument_id = 4; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`
TradeSourceType trade_source = 5; //Тип источника сделок. Значение по умолчанию — `TRADE_SOURCE_ALL`, все сделки.
}
//Обезличенных сделок за последний час.
message GetLastTradesResponse {
repeated Trade trades = 1; //Массив сделок.
}
//Запрос активных подписок. Возвращает по одному сообщению на каждый тип активных подписок — `SubscribeLastPriceResponse`, `SubscribeInfoResponse`, `SubscribeTradesResponse`, `SubscribeOrderBookResponse`, `SubscribeCandlesResponse`.
message GetMySubscriptions {}
//Запрос цен закрытия торговой сессии по инструментам.
message GetClosePricesRequest {
repeated InstrumentClosePriceRequest instruments = 1 [(google.api.field_behavior) = REQUIRED]; //Массив по инструментам.
optional InstrumentStatus instrument_status = 9; //Статус запрашиваемых инструментов. [Возможные значения](#instrumentstatus).
}
//Запрос цен закрытия торговой сессии по инструменту.
message InstrumentClosePriceRequest {
string instrument_id = 1; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`
}
//Цены закрытия торговой сессии по инструментам.
message GetClosePricesResponse {
repeated InstrumentClosePriceResponse close_prices = 1; //Массив по инструментам.
}
//Цена закрытия торговой сессии по инструменту.
message InstrumentClosePriceResponse {
string figi = 1; //FIGI инструмента.
string instrument_uid = 2; //UID инструмента.
string ticker = 3; //Тикер инструмента.
string class_code = 4; //Класс-код (секция торгов).
Quotation price = 11; //Цена закрытия торговой сессии.
Quotation evening_session_price = 12; //Цена последней сделки с вечерней сессии. Цена публикуется биржей по торговым дням и в нерабочие дни не обновляется.
google.protobuf.Timestamp time = 21; //Дата совершения торгов.
google.protobuf.Timestamp evening_session_price_time = 23; //Дата цены закрытия вечерней сессии.
}
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.
}
}
message GetMarketValuesRequest {
repeated string instrument_id = 1; //Массив идентификаторов инструментов. Принимает значения `figi`, `instrument_uid` или `ticker + '_' + class_code`.
repeated MarketValueType values = 2; //Массив запрашиваемых параметров.
}
message GetMarketValuesResponse {
repeated MarketValueInstrument instruments = 1; //Массив значений параметров.
}
message MarketValueInstrument {
string instrument_uid = 1; //Идентификатор инструмента.
repeated MarketValue values = 2; //Массив параметров инструмента.
string ticker = 3; //Тикер инструмента.
string class_code = 4; //Класс-код (секция торгов).
}
message MarketValue {
optional MarketValueType type = 1; //Тип параметра.
optional Quotation value = 2; //Значение.
optional google.protobuf.Timestamp time = 3; //Дата и время.
}
enum MarketValueType {
INSTRUMENT_VALUE_UNSPECIFIED = 0; //Не определен.
INSTRUMENT_VALUE_LAST_PRICE = 1; //Последняя биржевая цена.
INSTRUMENT_VALUE_LAST_PRICE_DEALER = 2; //Последняя цена дилера.
INSTRUMENT_VALUE_CLOSE_PRICE = 3; //Цена закрытия.
INSTRUMENT_VALUE_EVENING_SESSION_PRICE = 4; //Цена последней сделки с вечерней сессии.
INSTRUMENT_VALUE_OPEN_INTEREST = 5; // Открытый интерес, возвращается только для фьючерсов.
INSTRUMENT_VALUE_THEOR_PRICE = 6; //Теоретическая цена, возвращается только для опционов.
INSTRUMENT_VALUE_YIELD = 7; //Доходность
}
enum OrderBookType {
ORDERBOOK_TYPE_UNSPECIFIED = 0; //Не определен.
ORDERBOOK_TYPE_EXCHANGE = 1; //Биржевой стакан.
ORDERBOOK_TYPE_DEALER = 2; //Стакан дилера.
ORDERBOOK_TYPE_ALL = 3; //Стакан биржевой и дилера.
}
//Тип последней цены
enum LastPriceType {
LAST_PRICE_UNSPECIFIED = 0; //Не определен.
LAST_PRICE_EXCHANGE = 1; // Цена биржи.
LAST_PRICE_DEALER = 2; // Цена дилера
}

View File

@@ -0,0 +1,646 @@
syntax = "proto3";
package tinkoff.public.invest.api.contract.v1;
option go_package = "./;investapi";
option java_package = "ru.tinkoff.piapi.contract.v1";
option java_multiple_files = true;
option csharp_namespace = "Tinkoff.InvestApi.V1";
option objc_class_prefix = "TIAPI";
option php_namespace = "Tinkoff\\Invest\\V1";
import "google/protobuf/timestamp.proto";
import "t_tech/invest/grpc/common.proto";
import "t_tech/invest/grpc/google/api/field_behavior.proto";
service OperationsService {/*С помощью методов сервиса можно получить:<br/><br/> **1**. Список операций по счету.<br/> **2**.
Портфель по счету.<br/> **3**. Позиции ценных бумаг на счете.<br/> **4**.
Доступный остаток для вывода средств.<br/> **5**. Различные отчеты.*/
//GetOperations — список операций по счету
//При работе с методом учитывайте [особенности взаимодействия](/invest/services/operations/operations_problems).
rpc GetOperations(OperationsRequest) returns (OperationsResponse);
//GetPortfolio — портфель по счету
rpc GetPortfolio(PortfolioRequest) returns (PortfolioResponse);
//GetPositions — список позиций по счету
rpc GetPositions(PositionsRequest) returns (PositionsResponse);
//GetWithdrawLimits — доступный остаток для вывода средств
rpc GetWithdrawLimits(WithdrawLimitsRequest) returns (WithdrawLimitsResponse);
//GetBrokerReport — брокерский отчет.
rpc GetBrokerReport(BrokerReportRequest) returns (BrokerReportResponse);
//GetDividendsForeignIssuer — отчет «Справка о доходах за пределами РФ»
rpc GetDividendsForeignIssuer(GetDividendsForeignIssuerRequest) returns (GetDividendsForeignIssuerResponse);
//GetOperationsByCursor — список операций по счету с пагинацией
//При работе с методом учитывайте [особенности взаимодействия](/invest/services/operations/operations_problems).
rpc GetOperationsByCursor(GetOperationsByCursorRequest) returns (GetOperationsByCursorResponse);
}
service OperationsStreamService {
//PortfolioStream — стрим обновлений портфеля
rpc PortfolioStream(PortfolioStreamRequest) returns (stream PortfolioStreamResponse);
//PositionsStream — стрим обновлений информации по изменению позиций портфеля
rpc PositionsStream(PositionsStreamRequest) returns (stream PositionsStreamResponse);
//OperationsStream — стрим обновлений операций
rpc OperationsStream(OperationsStreamRequest) returns (stream OperationsStreamResponse);
}
//Запрос получения списка операций по счету.
message OperationsRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента.
optional google.protobuf.Timestamp from = 2; //Начало периода по UTC.
optional google.protobuf.Timestamp to = 3; //Окончание периода по UTC.
optional OperationState state = 4; //Статус запрашиваемых операций.
optional string figi = 5; //FIGI-идентификатор инструмента для фильтрации.
}
//Список операций.
message OperationsResponse {
repeated Operation operations = 1; //Массив операций.
}
//Данные по операции.
message Operation {
string id = 1; //Идентификатор операции.
string parent_operation_id = 2; //Идентификатор родительской операции.
string currency = 3; //Валюта операции.
MoneyValue payment = 4; //Сумма операции.
MoneyValue price = 5; //Цена операции за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента.
OperationState state = 6; //Статус операции.
int64 quantity = 7; //Количество единиц инструмента.
int64 quantity_rest = 8; //Неисполненный остаток по сделке.
string figi = 9; //FIGI-идентификатор инструмента, связанного с операцией.
string instrument_type = 10; //Тип инструмента. Возможные значения: <br/><br/>`bond` — облигация; <br/>`share` — акция; <br/>`currency` — валюта; <br/>`etf` — фонд; <br/>`futures` — фьючерс.
google.protobuf.Timestamp date = 11; //Дата и время операции в формате часовом поясе UTC.
string type = 12; //Текстовое описание типа операции.
OperationType operation_type = 13; //Тип операции.
repeated OperationTrade trades = 14; //Массив сделок.
string asset_uid = 16; //Идентификатор актива
string position_uid = 17; //Уникальный идентификатор позиции.
string instrument_uid = 18; //Уникальный идентификатор инструмента.
repeated ChildOperationItem child_operations = 19; //Массив дочерних операций.
}
//Сделка по операции.
message OperationTrade {
string trade_id = 1; //Идентификатор сделки.
google.protobuf.Timestamp date_time = 2; //Дата и время сделки по UTC.
int64 quantity = 3; //Количество инструментов.
MoneyValue price = 4; //Цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента.
}
//Запрос получения текущего портфеля по счету.
message PortfolioRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета пользователя.
optional CurrencyRequest currency = 2; //Валюта, в которой нужно рассчитать портфель.
enum CurrencyRequest {
RUB = 0; //Рубли
USD = 1; //Доллары
EUR = 2; //Евро
}
}
//Текущий портфель по счету.
message PortfolioResponse {
MoneyValue total_amount_shares = 1; //Общая стоимость акций в портфеле.
MoneyValue total_amount_bonds = 2; //Общая стоимость облигаций в портфеле.
MoneyValue total_amount_etf = 3; //Общая стоимость фондов в портфеле.
MoneyValue total_amount_currencies = 4; //Общая стоимость валют в портфеле.
MoneyValue total_amount_futures = 5; //Общая стоимость фьючерсов в портфеле.
Quotation expected_yield = 6; //Текущая относительная доходность портфеля в %.
repeated PortfolioPosition positions = 7; //Список позиций портфеля.
string account_id = 8; //Идентификатор счета пользователя.
MoneyValue total_amount_options = 9; //Общая стоимость опционов в портфеле.
MoneyValue total_amount_sp = 10; //Общая стоимость структурных нот в портфеле.
MoneyValue total_amount_portfolio = 11; //Общая стоимость портфеля.
repeated VirtualPortfolioPosition virtual_positions = 12; //Массив виртуальных позиций портфеля.
MoneyValue daily_yield = 15; // Рассчитанная доходность портфеля за день в рублях.
Quotation daily_yield_relative = 16; //Относительная доходность в день в %.
MoneyValue total_amount_dfa = 17; //Общая стоимость смарт-активов в портфеле в рублях.
}
//Запрос позиций портфеля по счету.
message PositionsRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета пользователя.
}
//Список позиций по счету.
message PositionsResponse {
repeated MoneyValue money = 1; //Массив валютных позиций портфеля.
repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля.
repeated PositionsSecurities securities = 3; //Список ценно-бумажных позиций портфеля.
bool limits_loading_in_progress = 4; //Признак идущей выгрузки лимитов в данный момент.
repeated PositionsFutures futures = 5; //Список фьючерсов портфеля.
repeated PositionsOptions options = 6; //Список опционов портфеля.
string account_id = 15; //Идентификатор счёта пользователя.
}
//Запрос доступного остатка для вывода.
message WithdrawLimitsRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета пользователя.
}
//Доступный остаток для вывода.
message WithdrawLimitsResponse {
repeated MoneyValue money = 1; //Массив валютных позиций портфеля.
repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля.
repeated MoneyValue blocked_guarantee = 3; //Заблокировано под гарантийное обеспечение фьючерсов.
}
//Позиции портфеля.
message PortfolioPosition {
string figi = 1; //FIGI-идентификатор инструмента.
string instrument_type = 2; //Тип инструмента.
Quotation quantity = 3; //Количество инструмента в портфеле в штуках.
MoneyValue average_position_price = 4; //Средневзвешенная цена позиции. Для пересчета возможна задержка до одной секунды.
Quotation expected_yield = 5; //Текущая рассчитанная доходность позиции.
MoneyValue current_nkd = 6; // Текущий НКД.
Quotation average_position_price_pt = 7 [ deprecated = true ]; // Deprecated Средняя цена позиции в пунктах (для фьючерсов). Для пересчета возможна задержка до одной секунды.
MoneyValue current_price = 8; //Текущая цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента.
MoneyValue average_position_price_fifo = 9; //Средняя цена позиции по методу FIFO. Для пересчета возможна задержка до одной секунды.
Quotation quantity_lots = 10 [ deprecated = true ]; //Deprecated Количество лотов в портфеле.
bool blocked = 21; //Заблокировано на бирже.
Quotation blocked_lots = 22; //Количество бумаг, заблокированных выставленными заявками.
string position_uid = 24; //Уникальный идентификатор позиции.
string instrument_uid = 25; //Уникальный идентификатор инструмента.
MoneyValue var_margin = 26; //Вариационная маржа.
Quotation expected_yield_fifo = 27; //Текущая рассчитанная доходность позиции.
MoneyValue daily_yield = 31; // Рассчитанная доходность портфеля за день.
string ticker = 32; //Тикер инструмента.
string class_code = 33; //Класс-код (секция торгов).
}
message VirtualPortfolioPosition {
string position_uid = 1; //Уникальный идентификатор позиции.
string instrument_uid = 2; //Уникальный идентификатор инструмента.
string figi = 3; //FIGI-идентификатор инструмента.
string instrument_type = 4; //Тип инструмента.
Quotation quantity = 5; //Количество инструмента в портфеле в штуках.
MoneyValue average_position_price = 6; //Средневзвешенная цена позиции. Для пересчета возможна задержка до одной секунды.
Quotation expected_yield = 7; //Текущая рассчитанная доходность позиции.
Quotation expected_yield_fifo = 8; //Текущая рассчитанная доходность позиции.
google.protobuf.Timestamp expire_date = 9; //Дата, до которой нужно продать виртуальные бумаги. После этой даты виртуальная позиция «сгораетт».
MoneyValue current_price = 10; //Текущая цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента.
MoneyValue average_position_price_fifo = 11; //Средняя цена позиции по методу FIFO. Для пересчета возможна задержка до одной секунды.
MoneyValue daily_yield = 31; // Рассчитанная доходность портфеля за день.
string ticker = 32; //Тикер инструмента.
string class_code = 33; //Класс-код (секция торгов).
}
//Баланс позиции ценной бумаги.
message PositionsSecurities {
string figi = 1; //FIGI-идентификатор бумаги.
int64 blocked = 2; //Количество бумаг, заблокированных выставленными заявками.
int64 balance = 3; //Текущий незаблокированный баланс.
string position_uid = 4; //Уникальный идентификатор позиции.
string instrument_uid = 5; //Уникальный идентификатор инструмента.
string ticker = 6; //Тикер инструмента.
string class_code = 7; //Класс-код (секция торгов).
bool exchange_blocked = 11; //Заблокировано на бирже.
string instrument_type = 16; //Тип инструмента.
}
//Баланс фьючерса.
message PositionsFutures {
string figi = 1; //FIGI-идентификатор фьючерса.
int64 blocked = 2; //Количество бумаг, заблокированных выставленными заявками.
int64 balance = 3; //Текущий незаблокированный баланс.
string position_uid = 4; //Уникальный идентификатор позиции.
string instrument_uid = 5; //Уникальный идентификатор инструмента.
string ticker = 6; //Тикер инструмента.
string class_code = 7; //Класс-код (секция торгов).
}
//Баланс опциона.
message PositionsOptions {
string position_uid = 1; //Уникальный идентификатор позиции опциона.
string instrument_uid = 2; //Уникальный идентификатор инструмента.
string ticker = 3; //Тикер инструмента.
string class_code = 4; //Класс-код (секция торгов).
int64 blocked = 11; //Количество бумаг, заблокированных выставленными заявками.
int64 balance = 21; //Текущий незаблокированный баланс.
}
message BrokerReportRequest {
oneof payload {
GenerateBrokerReportRequest generate_broker_report_request = 1;
GetBrokerReportRequest get_broker_report_request = 2;
}
}
message BrokerReportResponse {
oneof payload {
GenerateBrokerReportResponse generate_broker_report_response = 1;
GetBrokerReportResponse get_broker_report_response = 2;
}
}
message GenerateBrokerReportRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента.
google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало периода по UTC.
google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание периода по UTC.
}
message GenerateBrokerReportResponse {
string task_id = 1; //Идентификатор задачи формирования брокерского отчета.
}
message GetBrokerReportRequest {
string task_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор задачи формирования брокерского отчета.
optional int32 page = 2; //Номер страницы отчета, начинается с 1. Значение по умолчанию — 0.
}
message GetBrokerReportResponse {
repeated BrokerReport broker_report = 1;
int32 itemsCount = 2; //Количество записей в отчете.
int32 pagesCount = 3; //Количество страниц с данными отчета, начинается с 0.
int32 page = 4; //Текущая страница, начинается с 0.
string task_id = 5; //Идентификатор задачи формирования брокерского отчета.
}
message BrokerReport {
string trade_id = 1;//Номер сделки.
string order_id = 2; //Номер поручения.
string figi = 3; //FIGI-идентификаторинструмента.
string execute_sign = 4; //Признак исполнения.
google.protobuf.Timestamp trade_datetime = 5; //Дата и время заключения по UTC.
string exchange = 6; //Торговая площадка.
string class_code = 7; //Режим торгов.
string direction = 8; //Вид сделки.
string name = 9; //Сокращенное наименование актива.
string ticker = 10; //Код актива.
MoneyValue price = 11; //Цена за единицу.
int64 quantity = 12; //Количество.
MoneyValue order_amount = 13; //Сумма без НКД.
Quotation aci_value = 14; //НКД.
MoneyValue total_order_amount = 15; //Сумма сделки.
MoneyValue broker_commission = 16; //Комиссия брокера.
MoneyValue exchange_commission = 17; //Комиссия биржи.
MoneyValue exchange_clearing_commission = 18; //Комиссия клирингового центра.
Quotation repo_rate = 19; //Ставка РЕПО, %.
string party = 20; //Контрагент или брокерарокер.
google.protobuf.Timestamp clear_value_date = 21; //Дата расчетов по UTC.
google.protobuf.Timestamp sec_value_date = 22; //Дата поставки по UTC.
string broker_status = 23; //Статус брокера.
string separate_agreement_type = 24; //Тип договора.
string separate_agreement_number = 25; //Номер договора.
string separate_agreement_date = 26; //Дата договора.
string delivery_type = 27; //Тип расчета по сделке.
}
//Статус запрашиваемых операций.
enum OperationState {
OPERATION_STATE_UNSPECIFIED = 0; //Статус операции не определен.
OPERATION_STATE_EXECUTED = 1; //Исполнена частично или полностью.
OPERATION_STATE_CANCELED = 2; //Отменена.
OPERATION_STATE_PROGRESS = 3; //Исполняется.
}
//Тип операции.
enum OperationType {
OPERATION_TYPE_UNSPECIFIED = 0; //Тип операции не определен.
OPERATION_TYPE_INPUT = 1; //Пополнение брокерского счета.
OPERATION_TYPE_BOND_TAX = 2; //Удержание НДФЛ по купонам.
OPERATION_TYPE_OUTPUT_SECURITIES = 3; //Вывод ЦБ.
OPERATION_TYPE_OVERNIGHT = 4; //Доход по сделке РЕПО овернайт.
OPERATION_TYPE_TAX = 5; //Удержание налога.
OPERATION_TYPE_BOND_REPAYMENT_FULL = 6; //Полное погашение облигаций.
OPERATION_TYPE_SELL_CARD = 7; //Продажа ЦБ с карты.
OPERATION_TYPE_DIVIDEND_TAX = 8; //Удержание налога по дивидендам.
OPERATION_TYPE_OUTPUT = 9; //Вывод денежных средств.
OPERATION_TYPE_BOND_REPAYMENT = 10; //Частичное погашение облигаций.
OPERATION_TYPE_TAX_CORRECTION = 11; //Корректировка налога.
OPERATION_TYPE_SERVICE_FEE = 12; //Удержание комиссии за обслуживание брокерского счета.
OPERATION_TYPE_BENEFIT_TAX = 13; //Удержание налога за материальную выгоду.
OPERATION_TYPE_MARGIN_FEE = 14; //Удержание комиссии за непокрытую позицию.
OPERATION_TYPE_BUY = 15; //Покупка ЦБ.
OPERATION_TYPE_BUY_CARD = 16; //Покупка ЦБ с карты.
OPERATION_TYPE_INPUT_SECURITIES = 17; //Перевод ценных бумаг из другого депозитария.
OPERATION_TYPE_SELL_MARGIN = 18; //Продажа в результате Margin-call.
OPERATION_TYPE_BROKER_FEE = 19; //Удержание комиссии за операцию.
OPERATION_TYPE_BUY_MARGIN = 20; //Покупка в результате Margin-call.
OPERATION_TYPE_DIVIDEND = 21; //Выплата дивидендов.
OPERATION_TYPE_SELL = 22; //Продажа ЦБ.
OPERATION_TYPE_COUPON = 23; //Выплата купонов.
OPERATION_TYPE_SUCCESS_FEE = 24; //Удержание комиссии SuccessFee.
OPERATION_TYPE_DIVIDEND_TRANSFER = 25; //Передача дивидендного дохода.
OPERATION_TYPE_ACCRUING_VARMARGIN = 26; //Зачисление вариационной маржи.
OPERATION_TYPE_WRITING_OFF_VARMARGIN = 27; //Списание вариационной маржи.
OPERATION_TYPE_DELIVERY_BUY = 28; //Покупка в рамках экспирации фьючерсного контракта.
OPERATION_TYPE_DELIVERY_SELL = 29; //Продажа в рамках экспирации фьючерсного контракта.
OPERATION_TYPE_TRACK_MFEE = 30; //Комиссия за управление по счету автоследования.
OPERATION_TYPE_TRACK_PFEE = 31; //Комиссия за результат по счету автоследования.
OPERATION_TYPE_TAX_PROGRESSIVE = 32; //Удержание налога по ставке 15%.
OPERATION_TYPE_BOND_TAX_PROGRESSIVE = 33; //Удержание налога по купонам по ставке 15%.
OPERATION_TYPE_DIVIDEND_TAX_PROGRESSIVE = 34; //Удержание налога по дивидендам по ставке 15%.
OPERATION_TYPE_BENEFIT_TAX_PROGRESSIVE = 35; //Удержание налога за материальную выгоду по ставке 15%.
OPERATION_TYPE_TAX_CORRECTION_PROGRESSIVE = 36; //Корректировка налога по ставке 15%.
OPERATION_TYPE_TAX_REPO_PROGRESSIVE = 37; //Удержание налога за возмещение по сделкам РЕПО по ставке 15%.
OPERATION_TYPE_TAX_REPO = 38; //Удержание налога за возмещение по сделкам РЕПО.
OPERATION_TYPE_TAX_REPO_HOLD = 39; //Удержание налога по сделкам РЕПО.
OPERATION_TYPE_TAX_REPO_REFUND = 40; //Возврат налога по сделкам РЕПО.
OPERATION_TYPE_TAX_REPO_HOLD_PROGRESSIVE = 41; //Удержание налога по сделкам РЕПО по ставке 15%.
OPERATION_TYPE_TAX_REPO_REFUND_PROGRESSIVE = 42; //Возврат налога по сделкам РЕПО по ставке 15%.
OPERATION_TYPE_DIV_EXT = 43; //Выплата дивидендов на карту.
OPERATION_TYPE_TAX_CORRECTION_COUPON = 44; //Корректировка налога по купонам.
OPERATION_TYPE_CASH_FEE = 45; //Комиссия за валютный остаток.
OPERATION_TYPE_OUT_FEE = 46; //Комиссия за вывод валюты с брокерского счета.
OPERATION_TYPE_OUT_STAMP_DUTY = 47; //Гербовый сбор.
OPERATION_TYPE_OUTPUT_SWIFT = 50; // SWIFT-перевод.
OPERATION_TYPE_INPUT_SWIFT = 51; // SWIFT-перевод.
OPERATION_TYPE_OUTPUT_ACQUIRING = 53; // Перевод на карту.
OPERATION_TYPE_INPUT_ACQUIRING = 54; // Перевод с карты.
OPERATION_TYPE_OUTPUT_PENALTY = 55; // Комиссия за вывод средств.
OPERATION_TYPE_ADVICE_FEE = 56; // Списание оплаты за сервис Советов.
OPERATION_TYPE_TRANS_IIS_BS = 57; // Перевод ценных бумаг с ИИС на брокерский счет.
OPERATION_TYPE_TRANS_BS_BS = 58; // Перевод ценных бумаг с одного брокерского счета на другой.
OPERATION_TYPE_OUT_MULTI = 59; // Вывод денежных средств со счета.
OPERATION_TYPE_INP_MULTI = 60; // Пополнение денежных средств со счета.
OPERATION_TYPE_OVER_PLACEMENT = 61; // Размещение биржевого овернайта.
OPERATION_TYPE_OVER_COM = 62; // Списание комиссии.
OPERATION_TYPE_OVER_INCOME = 63; // Доход от оверанайта.
OPERATION_TYPE_OPTION_EXPIRATION = 64; // Экспирация опциона.
OPERATION_TYPE_FUTURE_EXPIRATION = 65; // Экспирация фьючерса.
OPERATION_TYPE_OTHER_FEE = 66; // Прочие комиссии;
OPERATION_TYPE_OTHER = 67; // Операция по счету;
OPERATION_TYPE_DFA_REDEMPTION = 68; // погашение ЦФА-токена;
OPERATION_TYPE_PRIMARY_ORDER =69; // отмена заявки на первичное размещение по ЦФА;
}
message GetDividendsForeignIssuerRequest {
oneof payload {
GenerateDividendsForeignIssuerReportRequest generate_div_foreign_issuer_report = 1; //Объект запроса формирования отчета.
GetDividendsForeignIssuerReportRequest get_div_foreign_issuer_report = 2; //Объект запроса сформированного отчета.
}
}
message GetDividendsForeignIssuerResponse {
oneof payload {
GenerateDividendsForeignIssuerReportResponse generate_div_foreign_issuer_report_response = 1; //Объект результата задачи запуска формирования отчета.
GetDividendsForeignIssuerReportResponse div_foreign_issuer_report = 2; //Отчет «Справка о доходах за пределами РФ».
}
}
//Объект запроса формирования отчета «Справка о доходах за пределами РФ».
message GenerateDividendsForeignIssuerReportRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента.
google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало периода по UTC.
google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание периода по UTC. Как правило, можно сформировать отчет по дату на несколько дней меньше текущей. Начало и окончание периода должны быть в рамках одного календарного года.
}
// Объект запроса сформированного отчета «Справка о доходах за пределами РФ».
message GetDividendsForeignIssuerReportRequest {
string task_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор задачи формирования отчета.
optional int32 page = 2; //Номер страницы отчета (начинается с 0), значение по умолчанию: 0.
}
// Объект результата задачи запуска формирования отчета «Справка о доходах за пределами РФ».
message GenerateDividendsForeignIssuerReportResponse {
string task_id = 1; //Идентификатор задачи формирования отчета.
}
message GetDividendsForeignIssuerReportResponse {
repeated DividendsForeignIssuerReport dividends_foreign_issuer_report = 1;
int32 itemsCount = 2; //Количество записей в отчете.
int32 pagesCount = 3; //Количество страниц с данными отчета, начинается с 0.
int32 page = 4; //Текущая страница, начинается с 0.
}
// Отчет «Справка о доходах за пределами РФ».
message DividendsForeignIssuerReport {
google.protobuf.Timestamp record_date = 1; //Дата фиксации реестра.
google.protobuf.Timestamp payment_date = 2; //Дата выплаты.
string security_name = 3; //Наименование ценной бумаги.
string isin = 4; //ISIN-идентификатор ценной бумаги.
string issuer_country = 5; //Страна эмитента. Для депозитарных расписок указывается страна эмитента базового актива.
int64 quantity = 6; //Количество ценных бумаг.
Quotation dividend = 7; //Выплаты на одну бумагу
Quotation external_commission = 8; //Комиссия внешних платежных агентов.
Quotation dividend_gross = 9; //Сумма до удержания налога.
Quotation tax = 10; //Сумма налога, удержанного агентом.
Quotation dividend_amount = 11; //Итоговая сумма выплаты.
string currency = 12; //Валюта.
}
//Запрос установки stream-соединения.
message PortfolioStreamRequest {
repeated string accounts = 1; //Массив идентификаторов счетов пользователя.
PingDelaySettings ping_settings = 15; //Запрос настройки пинга.
}
//Информация по позициям и доходностям портфелей.
message PortfolioStreamResponse {
oneof payload {
PortfolioSubscriptionResult subscriptions = 1; //Объект результата подписки.
PortfolioResponse portfolio = 2; //Объект стриминга портфеля.
Ping ping = 3; //Проверка активности стрима.
}
}
//Объект результата подписки.
message PortfolioSubscriptionResult {
repeated AccountSubscriptionStatus accounts = 1; //Массив счетов клиента.
string tracking_id = 7; //Уникальный идентификатор запроса, подробнее: [tracking_id](/invest/intro/developer/protocols/grpc#tracking-id).
string stream_id = 8; //Идентификатор открытого соединения
}
//Счет клиента.
message AccountSubscriptionStatus {
string account_id = 1; //Идентификатор счета.
PortfolioSubscriptionStatus subscription_status = 6; //Результат подписки.
}
//Результат подписки.
enum PortfolioSubscriptionStatus {
PORTFOLIO_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определен.
PORTFOLIO_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно.
PORTFOLIO_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счет не найден или недостаточно прав.
PORTFOLIO_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка.
}
//Запрос списка операций по счету с пагинацией.
message GetOperationsByCursorRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента, обязательный параметр. Остальные параметры опциональны.
optional string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
optional google.protobuf.Timestamp from = 6; //Начало периода по UTC.
optional google.protobuf.Timestamp to = 7; //Окончание периода по UTC.
optional string cursor = 11; //Идентификатор элемента, с которого начать формировать ответ.
optional int32 limit = 12; //Лимит количества операций. По умолчанию — `100`, максимальное значение — `1000`.
repeated OperationType operation_types = 13; //Тип операции. Принимает значение из списка `OperationType`.
optional OperationState state = 14; //Статус запрашиваемых операций. Возможные значения указаны в `OperationState`.
optional bool without_commissions = 15; //Флаг возврата комиссии. По умолчанию — `false`.
optional bool without_trades = 16; //Флаг получения ответа без массива сделок.
optional bool without_overnights = 17; //Флаг показа overnight операций.
}
//Список операций по счету с пагинацией.
message GetOperationsByCursorResponse {
bool has_next = 1; //Признак, есть ли следующий элемент.
string next_cursor = 2; //Следующий курсор.
repeated OperationItem items = 6; //Список операций.
}
//Данные об операции.
message OperationItem {
string cursor = 1; //Курсор.
string broker_account_id = 6; //Номер счета клиента.
string id = 16; //Идентификатор операции, может меняться с течением времени.
string parent_operation_id = 17; //Идентификатор родительской операции. Может измениться, если изменился ID родительской операции.
string name = 18; //Название операции.
google.protobuf.Timestamp date = 21; //Дата поручения.
OperationType type = 22; //Тип операции.
string description = 23; //Описание операции.
OperationState state = 24; //Статус поручения.
string instrument_uid = 31; //Уникальный идентификатор инструмента.
string figi = 32; //FIGI.
string instrument_type = 33; //Тип инструмента.
InstrumentType instrument_kind = 34; //Тип инструмента.
string position_uid = 35; //Уникальный идентификатор позиции.
string ticker = 36; //Тикер инструмента.
string class_code = 37; //Класс-код (секция торгов).
MoneyValue payment = 41; //Сумма операции.
MoneyValue price = 42; //Цена операции за 1 инструмент.
MoneyValue commission = 43; //Комиссия.
MoneyValue yield = 44; //Доходность.
Quotation yield_relative = 45; //Относительная доходность.
MoneyValue accrued_int = 46; //Накопленный купонный доход.
int64 quantity = 51; //Количество единиц инструмента.
int64 quantity_rest = 52; //Неисполненный остаток по сделке.
int64 quantity_done = 53; //Исполненный остаток.
google.protobuf.Timestamp cancel_date_time = 56; //Дата и время снятия заявки.
string cancel_reason = 57; //Причина отмены операции.
OperationItemTrades trades_info = 61; //Массив сделок.
string asset_uid = 64; //Идентификатор актива.
repeated ChildOperationItem child_operations = 65; //Массив дочерних операций.
}
//Массив с информацией о сделках.
message OperationItemTrades {
repeated OperationItemTrade trades = 6;
}
//Сделка по операции.
message OperationItemTrade {
string num = 1; //Номер сделки.
google.protobuf.Timestamp date = 6; //Дата сделки.
int64 quantity = 11; //Количество в единицах.
MoneyValue price = 16; //Цена.
MoneyValue yield = 21; //Доходность.
Quotation yield_relative = 22; //Относительная доходность.
}
//Запрос установки stream-соединения позиций.
message PositionsStreamRequest {
repeated string accounts = 1; //Массив идентификаторов счетов пользователя.
bool with_initial_positions = 3; //Получение состояния позиций на момент подключения.
PingDelaySettings ping_settings = 15; //Запрос настройки пинга.
}
//Информация по изменению позиций портфеля.
message PositionsStreamResponse {
oneof payload {
PositionsSubscriptionResult subscriptions = 1; //Объект результата подписки.
PositionData position = 2; //Объект стриминга позиций.
Ping ping = 3; //Проверка активности стрима.
PositionsResponse initial_positions = 5; //Текущие позиции.
}
}
//Объект результата подписки.
message PositionsSubscriptionResult {
repeated PositionsSubscriptionStatus accounts = 1; //Массив счетов клиента.
string tracking_id = 7; //Уникальный идентификатор запроса, подробнее: [tracking_id](/invest/intro/developer/protocols/grpc#tracking-id).
string stream_id = 8; //Идентификатор открытого соединения
}
//Счет клиента.
message PositionsSubscriptionStatus {
string account_id = 1; //Идентификатор счета.
PositionsAccountSubscriptionStatus subscription_status = 6; //Результат подписки.
}
//Результат подписки.
enum PositionsAccountSubscriptionStatus {
POSITIONS_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определен.
POSITIONS_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно.
POSITIONS_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счет не найден или недостаточно прав.
POSITIONS_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка.
}
//Данные о позиции портфеля.
message PositionData {
string account_id = 1; //Идентификатор счета.
repeated PositionsMoney money = 2; //Массив валютных позиций портфеля.
repeated PositionsSecurities securities = 3; //Список ценно-бумажных позиций портфеля.
repeated PositionsFutures futures = 4; //Список фьючерсов портфеля.
repeated PositionsOptions options = 5; //Список опционов портфеля.
google.protobuf.Timestamp date = 6; //Дата и время операции в формате UTC.
}
//Валютная позиция портфеля.
message PositionsMoney {
MoneyValue available_value = 1; //Доступное количество валютный позиций.
MoneyValue blocked_value = 2; //Заблокированное количество валютных позиций.
}
message ChildOperationItem {
string instrument_uid = 1; //Уникальный идентификатор инструмента.
MoneyValue payment = 2; //Сумма операции.
}
//Запрос установки stream-соединения операций.
message OperationsStreamRequest {
repeated string accounts = 1; //Массив идентификаторов счетов пользователя.
PingDelaySettings ping_settings = 15; //Запрос настройки пинга.
}
//Информация по операциям.
message OperationsStreamResponse {
oneof payload {
OperationsSubscriptionResult subscriptions = 1; //Объект результата подписки.
OperationData operation = 2; //Объект стриминга операций.
Ping ping = 3; //Проверка активности стрима.
}
}
//Объект результата подписки.
message OperationsSubscriptionResult {
repeated string accounts = 1; //Массив счетов клиента.
OperationsAccountSubscriptionStatus subscription_status = 2; //Результат подписки.
string tracking_id = 7; //Уникальный идентификатор запроса, подробнее: [tracking_id](/invest/intro/developer/protocols/grpc#tracking-id).
string stream_id = 8; //Идентификатор открытого соединения
}
//Результат подписки.
enum OperationsAccountSubscriptionStatus {
OPERATIONS_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определен.
OPERATIONS_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно.
OPERATIONS_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счет не найден или недостаточно прав.
OPERATIONS_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка.
}
//Данные об операции.
message OperationData {
string broker_account_id = 1; //Идентификатор счета.
string id = 2; //Номер поручения.
string parent_operation_id = 3; //Номер родительского поручения.
string name = 4; //Название инструмента.
google.protobuf.Timestamp date = 5; //Дата.
OperationType type = 6; //Тип операции.
OperationState state = 7; //Статус поручения.
string instrument_uid = 8; //Уникальный идентификатор инструмента.
string figi = 9; //FIGI-идентификатор инструмента.
string instrument_type = 10; //Тип инструмента.
InstrumentType instrument_kind = 11; //Тип инструмента.
string position_uid = 12; //Идентификатор позиции.
string ticker = 13; //Тикер инструмента.
string class_code = 14; //Класс-код (секция торгов).
MoneyValue payment = 15; //Сумма операции.
}

View File

@@ -0,0 +1,417 @@
syntax = "proto3";
package tinkoff.public.invest.api.contract.v1;
option go_package = "./;investapi";
option java_package = "ru.tinkoff.piapi.contract.v1";
option java_multiple_files = true;
option csharp_namespace = "Tinkoff.InvestApi.V1";
option objc_class_prefix = "TIAPI";
option php_namespace = "Tinkoff\\Invest\\V1";
import "t_tech/invest/grpc/common.proto";
import "google/protobuf/timestamp.proto";
import "t_tech/invest/grpc/google/api/field_behavior.proto";
service OrdersStreamService {
//TradesStream — стрим сделок пользователя
rpc TradesStream(TradesStreamRequest) returns (stream TradesStreamResponse);
//OrderStateStream — стрим поручений пользователя
//Перед работой прочитайте [статью](/invest/services/orders/orders_state_stream).
rpc OrderStateStream(OrderStateStreamRequest) returns (stream OrderStateStreamResponse);
}
service OrdersService {/* Сервис предназначен для работы с торговыми поручениями:<br/> **1**.
выставление;<br/> **2**. отмена;<br/> **3**. получение статуса;<br/> **4**.
расчет полной стоимости;<br/> **5**. получение списка заявок.*/
//PostOrder — выставить заявку
rpc PostOrder(PostOrderRequest) returns (PostOrderResponse);
//PostOrderAsync — выставить заявку асинхронным методом
//Особенности работы приведены в [статье](/invest/services/orders/async).
rpc PostOrderAsync(PostOrderAsyncRequest) returns (PostOrderAsyncResponse);
//CancelOrder — отменить заявку
rpc CancelOrder(CancelOrderRequest) returns (CancelOrderResponse);
//GetOrderState — получить статус торгового поручения
rpc GetOrderState(GetOrderStateRequest) returns (OrderState);
//GetOrders — получить список активных заявок по счету
rpc GetOrders(GetOrdersRequest) returns (GetOrdersResponse);
//ReplaceOrder — изменить выставленную заявку
rpc ReplaceOrder(ReplaceOrderRequest) returns (PostOrderResponse);
//GetMaxLots — расчет количества доступных для покупки/продажи лотов
rpc GetMaxLots(GetMaxLotsRequest) returns (GetMaxLotsResponse);
//GetOrderPrice — получить предварительную стоимость для лимитной заявки
rpc GetOrderPrice(GetOrderPriceRequest) returns (GetOrderPriceResponse);
}
//Запрос установки соединения.
message TradesStreamRequest {
repeated string accounts = 1; //Идентификаторы счетов.
optional int32 ping_delay_ms = 15; //Задержка (пинг) сообщений: 5000180 000 миллисекунд. Значение по умолчанию — 120 000.
}
//Информация о торговых поручениях.
message TradesStreamResponse {
oneof payload {
OrderTrades order_trades = 1; //Информация об исполнении торгового поручения.
Ping ping = 2; //Проверка активности стрима.
SubscriptionResponse subscription = 3; //Ответ на запрос на подписку.
}
}
//Информация об исполнении торгового поручения.
message OrderTrades {
string order_id = 1; //Идентификатор торгового поручения.
google.protobuf.Timestamp created_at = 2; //Дата и время создания сообщения в часовом поясе UTC.
OrderDirection direction = 3; //Направление сделки.
string figi = 4; //Figi-идентификатор инструмента.
repeated OrderTrade trades = 5; //Массив сделок.
string account_id = 6; //Идентификатор счета.
string instrument_uid = 7; //UID идентификатор инструмента.
}
//Информация о сделке.
message OrderTrade {
google.protobuf.Timestamp date_time = 1; //Дата и время совершения сделки в часовом поясе UTC.
Quotation price = 2; //Цена за 1 инструмент, по которой совершена сделка.
int64 quantity = 3; //Количество штук в сделке.
string trade_id = 4; //Идентификатор сделки.
}
//Запрос выставления торгового поручения.
message PostOrderRequest {
optional string figi = 1 [deprecated = true]; //Deprecated Figi-идентификатор инструмента. Необходимо использовать instrument_id.
int64 quantity = 2 [(google.api.field_behavior) = REQUIRED]; //Количество лотов.
optional Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Игнорируется для рыночных поручений.
OrderDirection direction = 4 [(google.api.field_behavior) = REQUIRED]; //Направление операции.
string account_id = 5 [(google.api.field_behavior) = REQUIRED]; //Номер счета.
OrderType order_type = 6 [(google.api.field_behavior) = REQUIRED]; //Тип заявки.
string order_id = 7 [(google.api.field_behavior) = REQUIRED]; //Идентификатор запроса выставления поручения для целей идемпотентности в формате UID. Максимальная длина 36 символов.
string instrument_id = 8; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
TimeInForceType time_in_force = 9; //Алгоритм исполнения поручения, применяется только к лимитной заявке.
PriceType price_type = 10; //Тип цены.
bool confirm_margin_trade = 11; // Согласие на выставление заявки, которая может привести к непокрытой позиции, по умолчанию false.
}
//Прочитайте про ключ идемпотентности [здесь](./head-orders/)
//Информация о выставлении поручения.
message PostOrderResponse {
string order_id = 1; //Биржевой идентификатор заявки.
OrderExecutionReportStatus execution_report_status = 2; //Текущий статус заявки.
int64 lots_requested = 3; //Запрошено лотов.
int64 lots_executed = 4; //Исполнено лотов.
MoneyValue initial_order_price = 5; //Начальная цена заявки. Произведение количества запрошенных лотов на цену.
MoneyValue executed_order_price = 6; //Исполненная средняя цена одного инструмента в заявке.
MoneyValue total_order_amount = 7; //Итоговая стоимость заявки, включающая все комиссии.
MoneyValue initial_commission = 8; //Начальная комиссия. Комиссия рассчитанная при выставлении заявки.
MoneyValue executed_commission = 9; //Фактическая комиссия по итогам исполнения заявки.
MoneyValue aci_value = 10; //Значение НКД (накопленного купонного дохода) на дату. Подробнее: [НКД при выставлении торговых поручений](./head-orders#coupon)
string figi = 11; // Figi-идентификатор инструмента.
OrderDirection direction = 12; //Направление сделки.
MoneyValue initial_security_price = 13; //Начальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
OrderType order_type = 14; //Тип заявки.
string message = 15; //Дополнительные данные об исполнении заявки.
Quotation initial_order_price_pt = 16; //Начальная цена заявки в пунктах (для фьючерсов).
string instrument_uid = 17; //UID идентификатор инструмента.
string ticker = 18; //Тикер инструмента.
string class_code = 19; //Класс-код (секция торгов).
string order_request_id = 20; //Идентификатор ключа идемпотентности, переданный клиентом, в формате UID. Максимальная длина 36 символов.
ResponseMetadata response_metadata = 254; //Метадата
}
//Запрос выставления асинхронного торгового поручения.
message PostOrderAsyncRequest {
string instrument_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
int64 quantity = 2 [(google.api.field_behavior) = REQUIRED]; //Количество лотов.
optional Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Игнорируется для рыночных поручений.
OrderDirection direction = 4 [(google.api.field_behavior) = REQUIRED]; //Направление операции.
string account_id = 5 [(google.api.field_behavior) = REQUIRED]; //Номер счета.
OrderType order_type = 6 [(google.api.field_behavior) = REQUIRED]; //Тип заявки.
string order_id = 7 [(google.api.field_behavior) = REQUIRED]; //Идентификатор запроса выставления поручения для целей идемпотентности в формате UID. Максимальная длина 36 символов.
optional TimeInForceType time_in_force = 8; //Алгоритм исполнения поручения, применяется только к лимитной заявке.
optional PriceType price_type = 9; //Тип цены.
bool confirm_margin_trade = 10; // Согласие на выставление заявки, которая может привести к непокрытой позиции, по умолчанию false.
}
//Результат выставления асинхронного торгового поручения.
message PostOrderAsyncResponse {
string order_request_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор ключа идемпотентности, переданный клиентом, в формате UID. Максимальная длина 36 символов.
OrderExecutionReportStatus execution_report_status = 2 [(google.api.field_behavior) = REQUIRED]; //Текущий статус заявки.
optional string trade_intent_id = 3; //Идентификатор торгового поручения.
}
//Запрос отмены торгового поручения.
message CancelOrderRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счета.
string order_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор заявки.
optional OrderIdType order_id_type = 3; //Тип идентификатора заявки.
}
//Результат отмены торгового поручения.
message CancelOrderResponse {
google.protobuf.Timestamp time = 1; //Дата и время отмены заявки в часовом поясе UTC.
ResponseMetadata response_metadata = 254; //Метадата
}
//Запрос получения статуса торгового поручения.
message GetOrderStateRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счета.
string order_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор заявки.
PriceType price_type = 3; //Тип цены.
optional OrderIdType order_id_type = 4; //Тип идентификатора заявки.
}
//Запрос получения списка активных торговых поручений.
message GetOrdersRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счета.
optional GetOrdersRequestFilters advanced_filters = 2; //Дополнительные фильтры.
message GetOrdersRequestFilters {
optional google.protobuf.Timestamp from = 1; //Дата и время, начиная с которой нужно получить информацию в часовом поясе UTC. Параметр применим только к ордерам, созданным сегодня.
optional google.protobuf.Timestamp to = 2; //Дата и время, до которой нужно получить информацию в часовом поясе UTC. Параметр применим только к ордерам, созданным сегодня.
repeated OrderExecutionReportStatus execution_status = 3; //Статусы заявок.
}
}
//Список активных торговых поручений.
message GetOrdersResponse {
repeated OrderState orders = 1; //Массив активных заявок.
}
//Информация о торговом поручении.
message OrderState {
string order_id = 1; //Биржевой идентификатор заявки.
OrderExecutionReportStatus execution_report_status = 2; //Текущий статус заявки.
int64 lots_requested = 3; //Запрошено лотов.
int64 lots_executed = 4; //Исполнено лотов.
MoneyValue initial_order_price = 5; //Начальная цена заявки. Произведение количества запрошенных лотов на цену.
MoneyValue executed_order_price = 6; //Исполненная цена заявки. Произведение средней цены покупки на количество лотов.
MoneyValue total_order_amount = 7; //Итоговая стоимость заявки, включающая все комиссии.
MoneyValue average_position_price = 8; //Средняя цена позиции по сделке.
MoneyValue initial_commission = 9; //Начальная комиссия. Комиссия, рассчитанная на момент подачи заявки.
MoneyValue executed_commission = 10; //Фактическая комиссия по итогам исполнения заявки.
string figi = 11; //Figi-идентификатор инструмента.
OrderDirection direction = 12; //Направление заявки.
MoneyValue initial_security_price = 13; //Начальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
repeated OrderStage stages = 14; //Стадии выполнения заявки.
MoneyValue service_commission = 15; //Сервисная комиссия.
string currency = 16; //Валюта заявки.
OrderType order_type = 17; //Тип заявки.
google.protobuf.Timestamp order_date = 18; //Дата и время выставления заявки в часовом поясе UTC.
string instrument_uid = 19; //UID идентификатор инструмента.
string order_request_id = 20; //Идентификатор ключа идемпотентности, переданный клиентом, в формате UID. Максимальная длина 36 символов.
string ticker = 21; //Тикер инструмента.
string class_code = 22; //Класс-код (секция торгов).
}
//Сделки в рамках торгового поручения.
message OrderStage {
MoneyValue price = 1; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
int64 quantity = 2; //Количество лотов.
string trade_id = 3; //Идентификатор сделки.
google.protobuf.Timestamp execution_time = 5; //Время исполнения сделки
}
//Запрос изменения выставленной заявки.
message ReplaceOrderRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счета.
optional OrderIdType order_id_type = 5; //Тип идентификатора заявки.
string order_id = 6 [(google.api.field_behavior) = REQUIRED]; //Идентификатор заявки на бирже.
string idempotency_key = 7 [(google.api.field_behavior) = REQUIRED]; //Новый идентификатор запроса выставления поручения для целей идемпотентности. Максимальная длина 36 символов. Перезатирает старый ключ.
int64 quantity = 11 [(google.api.field_behavior) = REQUIRED]; //Количество лотов.
optional Quotation price = 12; //Цена за 1 инструмент.
optional PriceType price_type = 13; //Тип цены.
bool confirm_margin_trade = 14; // Согласие на выставление заявки, которая может привести к непокрытой позиции, по умолчанию false.
}
//Запрос на расчет количества доступных для покупки/продажи лотов. Если не указывать цену инструмента, то расчет произведется по текущум ценам в стакане: по лучшему предложению для покупки и по лучшему спросу для продажи.
message GetMaxLotsRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счета
string instrument_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
optional Quotation price = 3; //Цена инструмента
}
//Результат количество доступных для покупки/продажи лотов
message GetMaxLotsResponse {
string currency = 1; //Валюта инструмента
BuyLimitsView buy_limits = 2; //Лимиты для покупок на собственные деньги
BuyLimitsView buy_margin_limits = 3; //Лимиты для покупок с учетом маржинального кредитования
SellLimitsView sell_limits = 4; //Лимиты для продаж по собственной позиции
SellLimitsView sell_margin_limits = 5; //Лимиты для продаж с учетом маржинального кредитования
message BuyLimitsView {
Quotation buy_money_amount = 1; //Количество доступной валюты для покупки
int64 buy_max_lots = 2; //Максимальное доступное количество лотов для покупки
int64 buy_max_market_lots = 3; //Максимальное доступное количество лотов для покупки для заявки по рыночной цене на текущий момент
}
message SellLimitsView {
int64 sell_max_lots = 1; //Максимальное доступное количество лотов для продажи
}
}
//Запрос получения предварительной стоимости заявки
message GetOrderPriceRequest {
string account_id = 1; //Номер счета
string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
Quotation price = 3; //Цена инструмента
OrderDirection direction = 12; //Направление заявки
int64 quantity = 13; //Количество лотов
}
//Предварительная стоимость заявки
message GetOrderPriceResponse {
MoneyValue total_order_amount = 1; //Итоговая стоимость заявки
MoneyValue initial_order_amount = 5; //Стоимость заявки без комиссий, НКД, ГО (для фьючерсов — стоимость контрактов)
int64 lots_requested = 3; //Запрошено лотов
MoneyValue executed_commission = 7; //Общая комиссия
MoneyValue executed_commission_rub = 8; //Общая комиссия в рублях
MoneyValue service_commission = 9; //Сервисная комиссия
MoneyValue deal_commission = 10; //Комиссия за проведение сделки
oneof instrument_extra {
ExtraBond extra_bond = 12; //Дополнительная информация по облигациям
ExtraFuture extra_future = 13; //Дополнительная информация по фьючерсам
}
message ExtraBond {
MoneyValue aci_value = 2; //Значение НКД (накопленного купонного дохода) на дату
Quotation nominal_conversion_rate = 3; //Курс конвертации для замещающих облигаций
}
message ExtraFuture {
MoneyValue initial_margin = 2; //Гарантийное обеспечение для фьючерса
}
}
//Запрос установки стрим-соединения торговых поручений
message OrderStateStreamRequest {
repeated string accounts = 1; //Идентификаторы счетов.
optional int32 ping_delay_millis = 15; //Задержка (пинг) сообщений: 1000-120 000 миллисекунд. Значение по умолчанию — 120 000.
}
//Информация по подпискам
message SubscriptionResponse {
string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](./grpc#tracking-id).
ResultSubscriptionStatus status = 2; //Статус подписки.
string stream_id = 4; //Идентификатор открытого соединения
repeated string accounts = 5; //Идентификаторы счетов.
optional ErrorDetail error = 7;
}
//Информация по заявкам
message OrderStateStreamResponse {
oneof payload {
OrderState order_state = 1; //Информация об исполнении торгового поручения.
Ping ping = 2; //Проверка активности стрима.
SubscriptionResponse subscription = 3; //Ответ на запрос на подписку.
}
//Заявка
message OrderState {
string order_id = 1; //Биржевой идентификатор заявки.
optional string order_request_id = 2; //Идентификатор ключа идемпотентности, переданный клиентом, в формате UID. Максимальная длина 36 символов.
string client_code = 3; //Код клиента на бирже.
google.protobuf.Timestamp created_at = 4; //Дата создания заявки.
OrderExecutionReportStatus execution_report_status = 5; //Статус заявки.
optional StatusCauseInfo status_info = 6; //Дополнительная информация по статусу.
string ticker = 7; //Тикер инструмента.
string class_code = 8; //Класс-код (секция торгов).
int32 lot_size = 9; //Лотность инструмента заявки.
OrderDirection direction = 10; //Направление заявки.
TimeInForceType time_in_force = 11; //Алгоритм исполнения поручения.
OrderType order_type = 12; //Тип заявки.
string account_id = 13; //Номер счета.
string trade_order_id = 14 [(google.api.field_behavior) = REQUIRED]; //Идентификатор торгового поручения.
MoneyValue initial_order_price = 22; //Начальная цена заявки.
MoneyValue order_price = 23; //Цена выставления заявки.
optional MoneyValue amount = 24; //Предрассчитанная стоимость полной заявки.
MoneyValue executed_order_price = 25; //Исполненная цена заявки.
string currency = 26; //Валюта исполнения.
int64 lots_requested = 27; //Запрошено лотов.
int64 lots_executed = 28; //Исполнено лотов.
int64 lots_left = 29; //Число неисполненных лотов по заявке.
int64 lots_cancelled = 30; //Отмененные лоты.
optional MarkerType marker = 31; //Спецсимвол.
repeated OrderTrade trades = 33; // Список сделок.
google.protobuf.Timestamp completion_time = 35; //Время исполнения заявки.
string exchange = 36; //Код биржи.
string instrument_uid = 41; //UID идентификатор инструмента.
}
//Маркер
enum MarkerType {
MARKER_UNKNOWN = 0; //не определено
MARKER_BROKER = 1; //сделки брокера
MARKER_CHAT = 2; //исполнение поручение, полученного от клиента через каналы связи
MARKER_PAPER = 3; //исполнение поручение, полученного от клиента в бумажной форме
MARKER_MARGIN = 4; //принудительное закрытие позиций
MARKER_TKBNM = 5; //сделки по управлению ликвидностью
MARKER_SHORT = 6; //сделки РЕПО по привлечению у клиентов бумаг
MARKER_SPECMM = 7; //перенос временно непокрытых позиций
MARKER_PO = 8;
}
//Дополнительная информация по статусу заявки
enum StatusCauseInfo {
CAUSE_UNSPECIFIED = 0; //Не определено
CAUSE_CANCELLED_BY_CLIENT = 15; //Отменено клиентом
CAUSE_CANCELLED_BY_EXCHANGE = 1; //Отменено биржей
CAUSE_CANCELLED_NOT_ENOUGH_POSITION = 2; //Заявка не выставлена из-за нехватки средств
CAUSE_CANCELLED_BY_CLIENT_BLOCK = 3; //Отменено из-за блокировки клиента
CAUSE_REJECTED_BY_BROKER = 4; //Отклонено брокером
CAUSE_REJECTED_BY_EXCHANGE = 5; //Отклонено биржей
CAUSE_CANCELLED_BY_BROKER = 6; //Отменено брокером
}
}
//Направление операции.
enum OrderDirection {
ORDER_DIRECTION_UNSPECIFIED = 0; //Значение не указано
ORDER_DIRECTION_BUY = 1; //Покупка
ORDER_DIRECTION_SELL = 2; //Продажа
}
//Тип заявки.
enum OrderType {
ORDER_TYPE_UNSPECIFIED = 0; //Значение не указано
ORDER_TYPE_LIMIT = 1; //Лимитная
ORDER_TYPE_MARKET = 2; //Рыночная
ORDER_TYPE_BESTPRICE = 3; //Лучшая цена
}
//Текущий статус заявки (поручения)
enum OrderExecutionReportStatus {
EXECUTION_REPORT_STATUS_UNSPECIFIED = 0;
EXECUTION_REPORT_STATUS_FILL = 1; //Исполнена
EXECUTION_REPORT_STATUS_REJECTED = 2; //Отклонена
EXECUTION_REPORT_STATUS_CANCELLED = 3; //Отменена пользователем
EXECUTION_REPORT_STATUS_NEW = 4; //Новая
EXECUTION_REPORT_STATUS_PARTIALLYFILL = 5; //Частично исполнена
}
//Алгоритм исполнения заявки
enum TimeInForceType {
TIME_IN_FORCE_UNSPECIFIED = 0; //Значение не определено см. TIME_IN_FORCE_DAY
TIME_IN_FORCE_DAY = 1; //Заявка действует до конца торгового дня. Значение по умолчанию
TIME_IN_FORCE_FILL_AND_KILL = 2; //Если в момент выставления возможно исполнение заявки(в т.ч. частичное), заявка будет исполнена или отменена сразу после выставления
TIME_IN_FORCE_FILL_OR_KILL = 3; //Если в момент выставления возможно полное исполнение заявки, заявка будет исполнена или отменена сразу после выставления, недоступно для срочного рынка и торговли по выходным
}
//Тип идентификатора заявки
enum OrderIdType {
ORDER_ID_TYPE_UNSPECIFIED = 0; //Тип идентификатора не указан.
ORDER_ID_TYPE_EXCHANGE = 1; //Биржевой идентификатор
ORDER_ID_TYPE_REQUEST = 2; //Ключ идемпотентности, переданный клиентом
}

View File

@@ -0,0 +1,114 @@
syntax = "proto3";
package tinkoff.public.invest.api.contract.v1;
option go_package = "./;investapi";
option java_package = "ru.tinkoff.piapi.contract.v1";
option java_multiple_files = true;
option csharp_namespace = "Tinkoff.InvestApi.V1";
option objc_class_prefix = "TIAPI";
option php_namespace = "Tinkoff\\Invest\\V1";
import "t_tech/invest/grpc/common.proto";
import "t_tech/invest/grpc/orders.proto";
import "t_tech/invest/grpc/operations.proto";
import "t_tech/invest/grpc/stoporders.proto";
import "t_tech/invest/grpc/users.proto";
import "t_tech/invest/grpc/google/api/field_behavior.proto";
service SandboxService { // Методы для работы с песочницей T-Invest API
//OpenSandboxAccount — зарегистрировать счет
rpc OpenSandboxAccount(OpenSandboxAccountRequest) returns (OpenSandboxAccountResponse);
//GetSandboxAccounts — счета пользователя
rpc GetSandboxAccounts(GetAccountsRequest) returns (GetAccountsResponse);
//CloseSandboxAccount — закрыть счет
rpc CloseSandboxAccount(CloseSandboxAccountRequest) returns (CloseSandboxAccountResponse);
//PostSandboxOrder — выставить заявку
rpc PostSandboxOrder(PostOrderRequest) returns (PostOrderResponse);
//PostSandboxOrderAsync — выставить заявку асинхронным методом
//Особенности работы приведены в [статье](/invest/services/orders/async).
rpc PostSandboxOrderAsync(PostOrderAsyncRequest) returns (PostOrderAsyncResponse);
//ReplaceSandboxOrder — изменить выставленную заявку
rpc ReplaceSandboxOrder(ReplaceOrderRequest) returns (PostOrderResponse);
//GetSandboxOrders — получить список активных заявок по счету
rpc GetSandboxOrders(GetOrdersRequest) returns (GetOrdersResponse);
//CancelSandboxOrder — отменить заявку
rpc CancelSandboxOrder(CancelOrderRequest) returns (CancelOrderResponse);
//GetSandboxOrderState — получить статус торгового поручения
rpc GetSandboxOrderState(GetOrderStateRequest) returns (OrderState);
//GetSandboxOrderPrice — получить предварительную стоимость для лимитной заявки
rpc GetSandboxOrderPrice(GetOrderPriceRequest) returns (GetOrderPriceResponse);
//GetSandboxPositions — список позиций по счету
rpc GetSandboxPositions(PositionsRequest) returns (PositionsResponse);
//GetSandboxOperations — список операций по счету
//При работе с методом учитывайте [особенности взаимодействия](/invest/services/operations/operations_problems).
rpc GetSandboxOperations(OperationsRequest) returns (OperationsResponse);
//GetSandboxOperationsByCursor — список операций по счету с пагинацией
//При работе с методом учитывайте [особенности взаимодействия](/invest/services/operations/operations_problems).
rpc GetSandboxOperationsByCursor(GetOperationsByCursorRequest) returns (GetOperationsByCursorResponse);
//GetSandboxPortfolio — портфель по счету
rpc GetSandboxPortfolio(PortfolioRequest) returns (PortfolioResponse);
//SandboxPayIn — пополнить счет.
rpc SandboxPayIn(SandboxPayInRequest) returns (SandboxPayInResponse);
//GetSandboxWithdrawLimits — доступный остаток для вывода средств
rpc GetSandboxWithdrawLimits(WithdrawLimitsRequest) returns (WithdrawLimitsResponse);
//GetSandboxMaxLots — расчет количества доступных для покупки/продажи лотов
rpc GetSandboxMaxLots(GetMaxLotsRequest) returns (GetMaxLotsResponse);
//PostSandboxStopOrder — выставить стоп-заявку
rpc PostSandboxStopOrder(PostStopOrderRequest) returns (PostStopOrderResponse);
//GetSandboxStopOrders — получить список активных стоп-заявок по счету
rpc GetSandboxStopOrders(GetStopOrdersRequest) returns (GetStopOrdersResponse);
//CancelSandboxStopOrder — отменить стоп-заявку
rpc CancelSandboxStopOrder(CancelStopOrderRequest) returns (CancelStopOrderResponse);
}
//Запрос открытия счета в песочнице.
message OpenSandboxAccountRequest {
optional string name = 1; // Название счета
}
//Номер открытого счета в песочнице.
message OpenSandboxAccountResponse {
string account_id = 1; //Номер счета
}
//Запрос закрытия счета в песочнице.
message CloseSandboxAccountRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счета
}
//Результат закрытия счета в песочнице.
message CloseSandboxAccountResponse {
//пустой ответ
}
//Запрос пополнения счета в песочнице.
message SandboxPayInRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Номер счета
MoneyValue amount = 2 [(google.api.field_behavior) = REQUIRED]; //Сумма пополнения счета в рублях
}
//Результат пополнения счета, текущий баланс.
message SandboxPayInResponse {
MoneyValue balance = 1; //Текущий баланс счета
}

View File

@@ -0,0 +1,109 @@
syntax = "proto3";
package tinkoff.public.invest.api.contract.v1;
option go_package = "./;investapi";
option java_package = "ru.tinkoff.piapi.contract.v1";
option java_multiple_files = true;
option csharp_namespace = "Tinkoff.InvestApi.V1";
option objc_class_prefix = "TIAPI";
option php_namespace = "Tinkoff\\Invest\\V1";
import "google/protobuf/timestamp.proto";
import "t_tech/invest/grpc/google/api/field_behavior.proto";
import "t_tech/invest/grpc/common.proto";
service SignalService {//Сервис для получения технических сигналов и мнений аналитиков по инструментам.
//GetStrategies — стратегии
rpc GetStrategies(GetStrategiesRequest) returns (GetStrategiesResponse);
//GetSignals — сигналы
rpc GetSignals(GetSignalsRequest) returns (GetSignalsResponse);
}
//Запрос стратегий.
message GetStrategiesRequest {
optional string strategy_id = 1; //Идентификатор стратегии.
}
//Стратегии
message GetStrategiesResponse {
repeated Strategy strategies = 1;
}
//Стратегия
message Strategy {
string strategy_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор стратегии.
string strategy_name = 2 [(google.api.field_behavior) = REQUIRED]; //Название стратегии.
optional string strategy_description = 3; //Описание стратегии.
optional string strategy_url = 4; //Ссылка на страницу с описанием стратегии.
StrategyType strategy_type = 5 [(google.api.field_behavior) = REQUIRED]; //Тип стратегии.
int32 active_signals = 6 [(google.api.field_behavior) = REQUIRED]; //Количество активных сигналов.
int32 total_signals = 7 [(google.api.field_behavior) = REQUIRED]; //Общее количество сигналов.
int64 time_in_position = 8 [(google.api.field_behavior) = REQUIRED]; //Среднее время нахождения сигнала в позиции.
Quotation average_signal_yield = 9 [(google.api.field_behavior) = REQUIRED]; //Средняя доходность сигнала в стратегии.
Quotation average_signal_yield_year = 10 [(google.api.field_behavior) = REQUIRED]; //Средняя доходность сигналов в стратегии за последний год.
Quotation yield = 11 [(google.api.field_behavior) = REQUIRED]; //Доходность стратегии.
Quotation yield_year = 12 [(google.api.field_behavior) = REQUIRED]; //Доходность стратегии за последний год.
}
//Запрос сигналов.
message GetSignalsRequest {
optional string signal_id = 1; //Идентификатор сигнала.
optional string strategy_id = 2; //Идентификатор стратегии.
optional StrategyType strategy_type = 3; //Тип стратегии.
optional string instrument_uid = 4; // Идентификатор бумаги.
optional google.protobuf.Timestamp from = 5; // Дата начала запрашиваемого интервала по UTC.
optional google.protobuf.Timestamp to = 6; // Дата конца запрашиваемого интервала по UTC.
optional SignalDirection direction = 7; // Направление сигнала.
optional SignalState active = 8; //Состояние сигнала.
optional Page paging = 9; //Настройки пагинации.
}
//Сигналы.
message GetSignalsResponse {
repeated Signal signals = 1; //Массив сигналов.
PageResponse paging = 2; //Данные по пагинации.
}
//Сигнал.
message Signal {
string signal_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор сигнала.
string strategy_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор стратегии.
string strategy_name = 3 [(google.api.field_behavior) = REQUIRED]; //Название стратегии.
string instrument_uid = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор бумаги.
google.protobuf.Timestamp create_dt = 5 [(google.api.field_behavior) = REQUIRED]; //Дата и время создания сигнала по UTC.
SignalDirection direction = 6 [(google.api.field_behavior) = REQUIRED]; //Направление сигнала.
Quotation initial_price = 7 [(google.api.field_behavior) = REQUIRED]; //Цена бумаги на момент формирования сигнала.
optional string info = 8; //Дополнительная информация о сигнале.
string name = 9 [(google.api.field_behavior) = REQUIRED]; //Название сигнала.
Quotation target_price = 10 [(google.api.field_behavior) = REQUIRED]; //Целевая цена.
google.protobuf.Timestamp end_dt = 11 [(google.api.field_behavior) = REQUIRED]; //Дата и время дедлайна сигнала по UTC.
optional int32 probability = 12; //Вероятность сигнала.
optional Quotation stoploss = 13; //Порог закрытия сигнала по стоплосс.
optional Quotation close_price = 14; //Цена закрытия сигнала.
optional google.protobuf.Timestamp close_dt = 15; //Дата и время закрытия сигнала по UTC.
}
//Тип стратегии.
enum StrategyType {
STRATEGY_TYPE_UNSPECIFIED = 0; //Не определен.
STRATEGY_TYPE_TECHNICAL = 1; //Техническая стратегия.
STRATEGY_TYPE_FUNDAMENTAL = 2; //Фундаментальная стратегия.
}
//Направление сигнала.
enum SignalDirection {
SIGNAL_DIRECTION_UNSPECIFIED = 0; //Не определен.
SIGNAL_DIRECTION_BUY = 1; //Покупка.
SIGNAL_DIRECTION_SELL = 2; //Продажа.
}
//Статус сигнала.
enum SignalState {
SIGNAL_STATE_UNSPECIFIED = 0; //Не определен.
SIGNAL_STATE_ACTIVE = 1; //Активный сигнал.
SIGNAL_STATE_CLOSED = 2; //Закрытый сигнал.
SIGNAL_STATE_ALL = 3; //Все состояния.
}

View File

@@ -0,0 +1,177 @@
syntax = "proto3";
package tinkoff.public.invest.api.contract.v1;
option go_package = "./;investapi";
option java_package = "ru.tinkoff.piapi.contract.v1";
option java_multiple_files = true;
option csharp_namespace = "Tinkoff.InvestApi.V1";
option objc_class_prefix = "TIAPI";
option php_namespace = "Tinkoff\\Invest\\V1";
import "google/protobuf/timestamp.proto";
import "t_tech/invest/grpc/google/api/field_behavior.proto";
import "t_tech/invest/grpc/common.proto";
service StopOrdersService { /* Сервис для работы со стоп-заявками: выставление, отмена, получение списка стоп-заявок.*/
//PostStopOrder — выставить стоп-заявку
rpc PostStopOrder(PostStopOrderRequest) returns (PostStopOrderResponse);
//GetStopOrders — получить список активных стоп-заявок по счету
rpc GetStopOrders(GetStopOrdersRequest) returns (GetStopOrdersResponse);
//CancelStopOrder — отменить стоп-заявку
rpc CancelStopOrder(CancelStopOrderRequest) returns (CancelStopOrderResponse);
}
//Запрос выставления стоп-заявки.
message PostStopOrderRequest {
optional string figi = 1 [ deprecated = true ]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
int64 quantity = 2 [(google.api.field_behavior) = REQUIRED]; //Количество лотов.
optional Quotation price = 3; //Цена за 1 инструмент биржевой заявки, которая будет выставлена при срабатывании по достижению `stop_price`. Чтобы получить стоимость лота, нужно умножить на лотность инструмента.
optional Quotation stop_price = 4; //Стоп-цена заявки за 1 инструмент. При достижении стоп-цены происходит активация стоп-заявки, в результате чего выставляется биржевая заявка. Чтобы получить стоимость лота, нужно умножить на лотность инструмента.
StopOrderDirection direction = 5 [(google.api.field_behavior) = REQUIRED]; //Направление операции.
string account_id = 6 [(google.api.field_behavior) = REQUIRED]; //Номер счета.
StopOrderExpirationType expiration_type = 7 [(google.api.field_behavior) = REQUIRED]; //Тип экспирации заявки.
StopOrderType stop_order_type = 8 [(google.api.field_behavior) = REQUIRED]; //Тип заявки.
optional google.protobuf.Timestamp expire_date = 9; //Дата и время окончания действия стоп-заявки по UTC. Для `ExpirationType = GoodTillDate` заполнение обязательно, для `GoodTillCancel` игнорируется.
string instrument_id = 10 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`.
ExchangeOrderType exchange_order_type = 11; //Тип дочерней биржевой заявки.
TakeProfitType take_profit_type = 12; //Подтип стоп-заявки — `TakeProfit`.
TrailingData trailing_data = 13; //Массив с параметрами трейлинг-стопа.
PriceType price_type = 14; //Тип цены.
string order_id = 15 [(google.api.field_behavior) = REQUIRED]; //Идентификатор запроса выставления поручения для целей идемпотентности в формате `UID`. Максимальная длина — 36 символов.
bool confirm_margin_trade = 16; //Согласие на выставление заявки, которая может привести к непокрытой позиции, по умолчанию false.
optional bool instant_execution = 17; //Признак необходимости моментальной активации, используется только для трейлинг-стопа.
message TrailingData {
Quotation indent = 1; //Отступ.
TrailingValueType indent_type = 2; //Тип величины отступа.
Quotation spread = 3; //Размер защитного спреда.
TrailingValueType spread_type = 4; //Тип величины защитного спреда.
}
}
//Результат выставления стоп-заявки.
message PostStopOrderResponse {
string stop_order_id = 1; //Уникальный идентификатор стоп-заявки.
string order_request_id = 2; //Идентификатор ключа идемпотентности, переданный клиентом, в формате `UID`. Максимальная длина 36 — символов.
ResponseMetadata response_metadata = 254; //Метадата.
}
//Запрос получения списка активных стоп-заявок.
message GetStopOrdersRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента.
StopOrderStatusOption status = 2; //Статус заявок.
google.protobuf.Timestamp from = 3; //Левая граница.
google.protobuf.Timestamp to = 4; //Правая граница.
}
//Список активных стоп-заявок.
message GetStopOrdersResponse {
repeated StopOrder stop_orders = 1; //Массив стоп-заявок по счету.
}
//Запрос отмены выставленной стоп-заявки.
message CancelStopOrderRequest {
string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента.
string stop_order_id = 2 [(google.api.field_behavior) = REQUIRED]; //Уникальный идентификатор стоп-заявки.
}
//Результат отмены выставленной стоп-заявки.
message CancelStopOrderResponse {
google.protobuf.Timestamp time = 1; //Время отмены заявки по UTC.
}
//Информация о стоп-заявке.
message StopOrder {
string stop_order_id = 1; //Уникальный идентификатор стоп-заявки.
int64 lots_requested = 2; //Запрошено лотов.
string figi = 3; //FIGI-идентификатор инструмента.
StopOrderDirection direction = 4; //Направление операции.
string currency = 5; //Валюта стоп-заявки.
StopOrderType order_type = 6; //Тип стоп-заявки.
google.protobuf.Timestamp create_date = 7; //Дата и время выставления заявки по UTC.
google.protobuf.Timestamp activation_date_time = 8; //Дата и время конвертации стоп-заявки в биржевую по UTC.
google.protobuf.Timestamp expiration_time = 9; //Дата и время снятия заявки по UTC.
MoneyValue price = 10; //Цена заявки за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента.
MoneyValue stop_price = 11; //Цена активации стоп-заявки за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента.
string instrument_uid = 12; //`instrument_uid`-идентификатор инструмента.
TakeProfitType take_profit_type = 13; //Подтип стоп-заявки — `TakeProfit`.
TrailingData trailing_data = 14; //Параметры трейлинг-стопа.
StopOrderStatusOption status = 15; //Статус заявки.
ExchangeOrderType exchange_order_type = 16; //Тип дочерней биржевой заявки для тейкпрофита.
optional string exchange_order_id = 17; //Идентификатор биржевой заявки.
string ticker = 18; //Тикер инструмента.
string class_code = 19; //Класс-код (секция торгов).
bool instant_execution = 20; //Признак необходимости моментальной активации, используется только для трейлинг-стопа.
message TrailingData {
Quotation indent = 1; //Отступ.
TrailingValueType indent_type = 2; //Тип величины отступа.
Quotation spread = 3; //Размер защитного спреда.
TrailingValueType spread_type = 4; //Тип величины защитного спреда.
TrailingStopStatus status = 5; //Статус трейлинг-стопа.
Quotation price = 7; //Цена исполнения.
Quotation extr = 8; //Локальный экстремум.
}
}
//Направление сделки стоп-заявки.
enum StopOrderDirection {
STOP_ORDER_DIRECTION_UNSPECIFIED = 0; //Значение не указано.
STOP_ORDER_DIRECTION_BUY = 1; //Покупка.
STOP_ORDER_DIRECTION_SELL = 2; //Продажа.
}
//Тип экспирации стоп-заявке.
enum StopOrderExpirationType {
STOP_ORDER_EXPIRATION_TYPE_UNSPECIFIED = 0; //Значение не указано.
STOP_ORDER_EXPIRATION_TYPE_GOOD_TILL_CANCEL = 1; //Действительно до отмены.
STOP_ORDER_EXPIRATION_TYPE_GOOD_TILL_DATE = 2; //Действительно до даты снятия.
}
//Тип стоп-заявки.
enum StopOrderType {
STOP_ORDER_TYPE_UNSPECIFIED = 0; //Значение не указано.
STOP_ORDER_TYPE_TAKE_PROFIT = 1; //`Take-profit`-заявка.
STOP_ORDER_TYPE_STOP_LOSS = 2; //`Stop-loss`-заявка.
STOP_ORDER_TYPE_STOP_LIMIT = 3; //`Stop-limit`-заявка.
}
//Статус стоп-заяки.
enum StopOrderStatusOption {
STOP_ORDER_STATUS_UNSPECIFIED = 0; //Значение не указано.
STOP_ORDER_STATUS_ALL = 1; //Все заявки.
STOP_ORDER_STATUS_ACTIVE = 2; //Активные заявки.
STOP_ORDER_STATUS_EXECUTED = 3; //Исполненные заявки.
STOP_ORDER_STATUS_CANCELED = 4; //Отмененные заявки.
STOP_ORDER_STATUS_EXPIRED = 5; //Истекшие заявки.
}
//Тип выставляемой заявки.
enum ExchangeOrderType {
EXCHANGE_ORDER_TYPE_UNSPECIFIED = 0; //Значение не указано.
EXCHANGE_ORDER_TYPE_MARKET = 1; //Заявка по рыночной цене.
EXCHANGE_ORDER_TYPE_LIMIT = 2; //Лимитная заявка.
}
//Тип TakeProfit-заявки.
enum TakeProfitType {
TAKE_PROFIT_TYPE_UNSPECIFIED = 0; //Значение не указано.
TAKE_PROFIT_TYPE_REGULAR = 1; //Обычная заявка, значение по умолчанию.
TAKE_PROFIT_TYPE_TRAILING = 2; //Трейлинг-стоп.
}
//Тип параметров значений трейлинг-стопа.
enum TrailingValueType {
TRAILING_VALUE_UNSPECIFIED = 0; //Значение не указано.
TRAILING_VALUE_ABSOLUTE = 1; //Абсолютное значение в единицах цены.
TRAILING_VALUE_RELATIVE = 2; //Относительное значение в процентах.
}
//Статус трейлинг-стопа.
enum TrailingStopStatus {
TRAILING_STOP_UNSPECIFIED = 0; //Значение не указано.
TRAILING_STOP_ACTIVE = 1; //Активный.
TRAILING_STOP_ACTIVATED = 2; //Активированный.
}

View File

@@ -0,0 +1,249 @@
syntax = "proto3";
package tinkoff.public.invest.api.contract.v1;
option go_package = "./;investapi";
option java_package = "ru.tinkoff.piapi.contract.v1";
option java_multiple_files = true;
option csharp_namespace = "Tinkoff.InvestApi.V1";
option objc_class_prefix = "TIAPI";
option php_namespace = "Tinkoff\\Invest\\V1";
import "google/protobuf/timestamp.proto";
import "t_tech/invest/grpc/google/api/field_behavior.proto";
import "t_tech/invest/grpc/common.proto";
service UsersService { /*С помощью сервиса можно получить: <br/> 1.
список счетов пользователя; <br/> 2. маржинальные показатели по счeту.*/
//GetAccounts — счета пользователя
//Получить список счетов.
rpc GetAccounts (GetAccountsRequest) returns (GetAccountsResponse);
//GetMarginAttributes — маржинальные показатели по счeту
//Метод позволяет получить маржинальные показатели и ликвидность по заданному счeту.
rpc GetMarginAttributes (GetMarginAttributesRequest) returns (GetMarginAttributesResponse);
//GetUserTariff — тариф пользователя
//Получить информацию о текущих лимитах на подклчение, согласно текущему тарифу пользователя.
rpc GetUserTariff (GetUserTariffRequest) returns (GetUserTariffResponse);
//GetInfo — информация о пользователе
//Получить информацию о пользователе: тариф, признак квалификации, пройденные тесты и др.
rpc GetInfo (GetInfoRequest) returns (GetInfoResponse);
//GetBankAccounts — банковские счета пользователя
//Получить список счетов пользователя, в том числе и банковских.
rpc GetBankAccounts(GetBankAccountsRequest) returns (GetBankAccountsResponse);
//CurrencyTransfer — перевод денежных средств между счетами
//Перевести денежные средства между брокерскими счетами
rpc CurrencyTransfer(CurrencyTransferRequest) returns (CurrencyTransferResponse);
//PayIn — пополнение брокерского счета
//Пополнить брокерский счёт с банковского
rpc PayIn(PayInRequest) returns (PayInResponse);
//GetAccountValues — дополнительные показатели счетов
//Метод предназначен для получения дополнительных показателей счетов
rpc GetAccountValues(GetAccountValuesRequest) returns (GetAccountValuesResponse);
}
//Запрос получения счетов пользователя.
message GetAccountsRequest {
optional AccountStatus status = 1; //Статус счета.
}
//Список счетов пользователя.
message GetAccountsResponse {
// Массив счетов клиента.
repeated Account accounts = 1;
}
//Информация о счeте.
message Account {
// Идентификатор счeта.
string id = 1;
// Тип счeта.
AccountType type = 2;
// Название счeта.
string name = 3;
// Статус счeта.
AccountStatus status = 4;
// Дата открытия счeта в часовом поясе UTC.
google.protobuf.Timestamp opened_date = 5;
// Дата закрытия счeта в часовом поясе UTC.
google.protobuf.Timestamp closed_date = 6;
// Уровень доступа к текущему счeту (определяется токеном).
AccessLevel access_level = 7;
}
//Тип счeта.
enum AccountType {
ACCOUNT_TYPE_UNSPECIFIED = 0; //Тип аккаунта не определeн.
ACCOUNT_TYPE_TINKOFF = 1; //Брокерский счeт Т-Инвестиций.
ACCOUNT_TYPE_TINKOFF_IIS = 2; //ИИС.
ACCOUNT_TYPE_INVEST_BOX = 3; //Инвесткопилка.
ACCOUNT_TYPE_INVEST_FUND = 4; //Фонд денежного рынка.
ACCOUNT_TYPE_DEBIT = 5; //Дебетовый карточный счeт.
ACCOUNT_TYPE_SAVING = 6; //Накопительный счeт.
ACCOUNT_TYPE_DFA = 7; //Смарт-счет.
}
//Статус счeта.
enum AccountStatus {
ACCOUNT_STATUS_UNSPECIFIED = 0; //Статус счeта не определeн.
ACCOUNT_STATUS_NEW = 1; //Новый, в процессе открытия.
ACCOUNT_STATUS_OPEN = 2; //Открытый и активный счeт.
ACCOUNT_STATUS_CLOSED = 3; //Закрытый счeт.
ACCOUNT_STATUS_ALL = 4; //Все счета.
}
//Запрос маржинальных показателей по счeту.
message GetMarginAttributesRequest {
// Идентификатор счeта пользователя.
string account_id = 1 [(google.api.field_behavior) = REQUIRED];
}
//Маржинальные показатели по счeту.
message GetMarginAttributesResponse {
// Ликвидная стоимость портфеля. [Подробнее про ликвидный портфель](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q4).
MoneyValue liquid_portfolio = 1;
// Начальная маржа — начальное обеспечение для совершения новой сделки. [Подробнее про начальную и минимальную маржу](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q6).
MoneyValue starting_margin = 2;
// Минимальная маржа — это минимальное обеспечение для поддержания позиции, которую вы уже открыли. [Подробнее про начальную и минимальную маржу](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q6).
MoneyValue minimal_margin = 3;
// Уровень достаточности средств. Соотношение стоимости ликвидного портфеля к начальной марже.
Quotation funds_sufficiency_level = 4;
// Объем недостающих средств. Разница между стартовой маржой и ликвидной стоимости портфеля.
MoneyValue amount_of_missing_funds = 5;
// Скорректированная маржа. Начальная маржа, в которой плановые позиции рассчитываются с учeтом активных заявок на покупку позиций лонг или продажу позиций шорт.
MoneyValue corrected_margin = 6;
// Размер гарантийного обеспечения, заблокированного под фьючерсы.
MoneyValue guarantee_for_futures = 7;
}
//Запрос текущих лимитов пользователя.
message GetUserTariffRequest {
}
//Текущие лимиты пользователя.
message GetUserTariffResponse {
repeated UnaryLimit unary_limits = 1; //Массив лимитов пользователя по unary-запросам.
repeated StreamLimit stream_limits = 2; //Массив лимитов пользователей для stream-соединений.
}
//Лимит unary-методов.
message UnaryLimit {
int32 limit_per_minute = 1; //Количество unary-запросов в минуту.
repeated string methods = 2; //Названия методов.
optional int32 limit_per_second = 3; //Количество unary-запросов в секунду.
}
//Лимит stream-соединений.
message StreamLimit {
int32 limit = 1; //Максимальное количество stream-соединений.
repeated string streams = 2; //Названия stream-методов.
int32 open = 3; //Текущее количество открытых stream-соединений.
}
//Запрос информации о пользователе.
message GetInfoRequest {
}
//Информация о пользователе.
message GetInfoResponse {
bool prem_status = 1; //Признак премиум клиента.
bool qual_status = 2; //Признак квалифицированного инвестора.
repeated string qualified_for_work_with = 3; //Набор требующих тестирования инструментов и возможностей, с которыми может работать пользователь. [Подробнее](/invest/services/accounts/faq_users).
string tariff = 4; //Наименование тарифа пользователя.
string user_id = 9; //Идентификатор пользователя.
string risk_level_code = 12; // Категория риска.
}
//Уровень доступа к счeту.
enum AccessLevel {
ACCOUNT_ACCESS_LEVEL_UNSPECIFIED = 0; //Уровень доступа не определeн.
ACCOUNT_ACCESS_LEVEL_FULL_ACCESS = 1; //Полный доступ к счeту.
ACCOUNT_ACCESS_LEVEL_READ_ONLY = 2; //Доступ с уровнем прав «только чтение».
ACCOUNT_ACCESS_LEVEL_NO_ACCESS = 3; //Доступа нет.
}
//Запрос списка банковских счетов пользователя.
message GetBankAccountsRequest {
}
//Список банковских счетов пользователя.
message GetBankAccountsResponse {
repeated BankAccount bank_accounts = 1; //Массив банковских счетов.
}
//Банковский счeт.
message BankAccount {
string id = 1; //Идентификатор счeта.
string name = 2; //Название счeта.
repeated MoneyValue money = 3; //Список валютных позиций на счeте.
google.protobuf.Timestamp opened_date = 4; //Дата открытия счeта в часовом поясе UTC.
AccountType type = 5; //Тип счeта.
}
message CurrencyTransferRequest {
string from_account_id = 1 [(google.api.field_behavior) = REQUIRED]; // Номер счета списания.
string to_account_id = 2 [(google.api.field_behavior) = REQUIRED]; // Номер счета зачисления.
MoneyValue amount = 3 [(google.api.field_behavior) = REQUIRED]; // Сумма перевода с указанием валюты.
string transaction_id = 4; // Идентификатор запроса выставления поручения для целей идемпотентности в формате UUID.
}
message CurrencyTransferResponse {
}
message PayInRequest {
string from_account_id = 1 [(google.api.field_behavior) = REQUIRED]; // Номер счета списания.
string to_account_id = 2 [(google.api.field_behavior) = REQUIRED]; // Номер брокерского счета зачисления.
MoneyValue amount = 3 [(google.api.field_behavior) = REQUIRED]; // Сумма перевода с указанием валюты.
}
message PayInResponse {
}
enum AccountValue {
ACCOUNT_VALUE_UNSPECIFIED = 0; // Не определён.
ACCOUNT_VALUE_MARGIN_FEE = 1; // Размер комиссии за маржинальное кредитование.
ACCOUNT_VALUE_AMOUNT_WITHOUT_EXTRA_FEE = 2; // Остаток доступного лимита с текущей комиссией.
}
message GetAccountValuesRequest {
repeated string accounts = 1; // Массив счетов пользователя.
repeated AccountValue values = 2; // Массив запрашиваемых параметров.
}
message GetAccountValuesResponse {
repeated AccountValuesWithParameters accounts = 1; // Массив счетов с параметрами.
}
message AccountValuesWithParameters {
string account_id = 1; // Номер счета.
repeated InstrumentParameter values = 2; // Массив параметров инструмента.
}
message InstrumentParameter {
AccountValue name = 1; // Тип запрашиваемого параметра.
MoneyValue value = 2; // Значение запрашиваемого параметра.
}