Skip to content

Commit

Permalink
Release v1.10
Browse files Browse the repository at this point in the history
  • Loading branch information
p977ac committed Feb 16, 2024
1 parent 517e854 commit 7657551
Show file tree
Hide file tree
Showing 14 changed files with 638 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/docs/contracts/instruments.proto
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,7 @@ message Etf {
Quotation fixed_commission = 17; //Размер фиксированной комиссии фонда.
string focus_type = 18; //Возможные значения: </br>**equity** — акции;</br>**fixed_income** — облигации;</br>**mixed_allocation** — смешанный;</br>**money_market** — денежный рынок;</br>**real_estate** — недвижимость;</br>**commodity** — товары;</br>**specialty** — специальный;</br>**private_equity** — private equity;</br>**alternative_investment** — альтернативные инвестиции.
google.protobuf.Timestamp released_date = 19; //Дата выпуска в часовом поясе UTC.
Quotation num_shares = 20; //Количество акций фонда в обращении.
Quotation num_shares = 20; //Количество паев фонда в обращении.

string country_of_risk = 21; //Код страны риска, т.е. страны, в которой компания ведёт основной бизнес.
string country_of_risk_name = 22; //Наименование страны риска, т.е. страны, в которой компания ведёт основной бизнес.
Expand Down
79 changes: 76 additions & 3 deletions src/docs/contracts/marketdata.proto
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ service MarketDataService { //Сервис получения биржевой

//Метод запроса цен закрытия торговой сессии по инструментам.
rpc GetClosePrices(GetClosePricesRequest) returns (GetClosePricesResponse);

rpc GetTechAnalysis(GetTechAnalysisRequest) returns (GetTechAnalysisResponse);
}

service MarketDataStreamService {
Expand Down Expand Up @@ -479,8 +481,79 @@ message InstrumentClosePriceResponse {
google.protobuf.Timestamp time = 21; //Дата совершения торгов.
}

message GetTechAnalysisRequest {
IndicatorType indicator_type = 1 [(google.api.field_behavior) = REQUIRED]; //Тип технического индикатора.
string instrument_uid = 2 [(google.api.field_behavior) = REQUIRED]; //Uid инструмента.
google.protobuf.Timestamp from = 3 [(google.api.field_behavior) = REQUIRED]; //Начало запрашиваемого периода в часовом поясе UTC.
google.protobuf.Timestamp to = 4 [(google.api.field_behavior) = REQUIRED]; //Окончание запрашиваемого периода в часовом поясе UTC.
IndicatorInterval interval = 5 [(google.api.field_behavior) = REQUIRED]; //Интервал, за который рассчитывается индикатор.
TypeOfPrice type_of_price = 6 [(google.api.field_behavior) = REQUIRED]; //Тип цены, используемый при расчёте индикатора.
int32 length = 7; //Торговый период, за который рассчитывается индикатор.
Deviation deviation = 8; //Параметры отклонения.
Smoothing smoothing = 9; //Параметры сглаживания.

message Smoothing {
int32 fast_length = 1; //Короткий период сглаживания для первой экспоненциальной скользящей средней (EMA).
int32 slow_length = 2; //Длинный период сглаживания для второй экспоненциальной скользящей средней (EMA).
int32 signal_smoothing = 3; //Период сглаживания для третьей экспоненциальной скользящей средней (EMA)
}

message Deviation {
Quotation deviation_multiplier = 1; //Кол-во стандартных отклонений, на которые отступает верхняя и нижняя граница
}

//Интервал свечи.
enum IndicatorInterval {
INDICATOR_INTERVAL_UNSPECIFIED = 0; //Интервал не определён.
INDICATOR_INTERVAL_ONE_MINUTE = 1; //1 минута.
INDICATOR_INTERVAL_FIVE_MINUTES = 2; //5 минут.
INDICATOR_INTERVAL_FIFTEEN_MINUTES = 3; //15 минут.
INDICATOR_INTERVAL_ONE_HOUR = 4; //1 час.
INDICATOR_INTERVAL_ONE_DAY = 5; //1 день.
INDICATOR_INTERVAL_2_MIN = 6; //2 минуты.
INDICATOR_INTERVAL_3_MIN = 7; //3 минуты.
INDICATOR_INTERVAL_10_MIN = 8; //10 минут.
INDICATOR_INTERVAL_30_MIN = 9; //30 минут.
INDICATOR_INTERVAL_2_HOUR = 10; //2 часа.
INDICATOR_INTERVAL_4_HOUR = 11; //4 часа.
INDICATOR_INTERVAL_WEEK = 12; //Неделя
INDICATOR_INTERVAL_MONTH = 13; //Месяц
}

enum TypeOfPrice {
TYPE_OF_PRICE_UNSPECIFIED = 0; //Не указано.
TYPE_OF_PRICE_CLOSE = 1; //Цена закрытия.
TYPE_OF_PRICE_OPEN = 2; //Цена открытия.
TYPE_OF_PRICE_HIGH = 3; //Максимальное значение за выбранный интервал.
TYPE_OF_PRICE_LOW = 4; //Минимальное значение за выбранный интервал.
TYPE_OF_PRICE_AVG = 5; //Среднее значение по показателям [ (close + open + high + low) / 4 ].
}

enum IndicatorType {
INDICATOR_TYPE_UNSPECIFIED = 0; //Не определен.
INDICATOR_TYPE_BB = 1; //Bollinger Bands (Линия Боллинжера).
INDICATOR_TYPE_EMA = 2; //Exponential Moving Average (EMA, Экспоненциальная скользящая средняя).
INDICATOR_TYPE_RSI = 3; //Relative Strength Index (Индекс относительной силы).
INDICATOR_TYPE_MACD = 4; //Moving Average Convergence/Divergence (Схождение/Расхождение скользящих средних).
INDICATOR_TYPE_SMA = 5; //Simple Moving Average (Простое скользящее среднее).
}
}

message GetTechAnalysisResponse {
repeated TechAnalysisItem technical_indicators = 1; //Массив значений результатов тех. анализа

message TechAnalysisItem {
google.protobuf.Timestamp timestamp = 1; //Временная метка по UTC, для которой были рассчитаны значения индикатора.
optional Quotation middle_band = 2; //Значение простого скользящего среднего (средней линии).
optional Quotation upper_band = 3; //Значение верхней линии Боллинджера.
optional Quotation lower_band = 4; //Значение нижней линии Боллинджера.
optional Quotation signal = 5; //Значение сигнальной линии.
optional Quotation macd = 6; //Значение линии MACD.
}
}

enum OrderBookType {
ORDERBOOK_TYPE_UNSPECIFIED = 0; //не определен
ORDERBOOK_TYPE_EXCHANGE = 1; //Биржевой стакан
ORDERBOOK_TYPE_DEALER = 2; //Стакан дилера
ORDERBOOK_TYPE_UNSPECIFIED = 0; //не определен
ORDERBOOK_TYPE_EXCHANGE = 1; //Биржевой стакан
ORDERBOOK_TYPE_DEALER = 2; //Стакан дилера
}
1 change: 1 addition & 0 deletions src/docs/contracts/orders.proto
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ message OrderStage {
MoneyValue price = 1; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
int64 quantity = 2; //Количество лотов.
string trade_id = 3; //Идентификатор сделки.
google.protobuf.Timestamp execution_time = 5; //Время исполнения сделки
}

//Запрос изменения выставленной заявки.
Expand Down
5 changes: 5 additions & 0 deletions src/docs/errors.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@
30210|INVALID_ARGUMENT|trailing data required|Проверьте параметры запроса стоп-заявки. Не заданы indent или spread.|
30211|INVALID_ARGUMENT|indent type required|Проверьте параметры запроса стоп-заявки. Не задан indent_type.|
30212|INVALID_ARGUMENT|spread type required|Проверьте параметры запроса стоп-заявки. Не задан spread_type.|
30213|INVALID_ARGUMENT|indicator_type is invalid|Проверьте параметры запроса. Некорректный indicator_type.|
30214|INVALID_ARGUMENT|type_of_price is invalid|Проверьте параметры запроса. Некорректный type_of_price.|
30215|INVALID_ARGUMENT|length is invalid|Проверьте параметры запроса. Некорректный length.|
30216|INVALID_ARGUMENT|deviation_data is invalid|Проверьте параметры запроса. Некорректный параметр deviation_data.|
30217|INVALID_ARGUMENT|smoothing_data is invalid|Проверьте параметры запроса. Некорректный параметр smoothing_data.|
30218|INVALID_ARGUMENT|quantity of instruments can't be more than 3000|Количество инструментов в списке не может быть больше 3000.|
40002|PERMISSION_DENIED|insufficient privileges|Недостаточно прав для совершения операции.</br>Токен доступа имеет уровень прав read-only, либо у токена нет доступа к указанному счету.</br>Подробнее: [Виды токенов](https://russianinvestments.github.io/investAPI/index#_2)|
40003|UNAUTHENTICATED|authentication token is missing or invalid|Токен доступа не найден или не активен.</br>Вы можете выпустить новый токен по ссылке [Настройки](https://www.tinkoff.ru/invest/settings/)|
Expand Down
25 changes: 25 additions & 0 deletions src/docs/errors/api_errors.json
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,31 @@
"type": "INVALID_ARGUMENT",
"description": "Проверьте параметры запроса стоп-заявки. Не задан spread_type."
},
"30213": {
"message": "indicator_type is invalid",
"type": "INVALID_ARGUMENT",
"description": "Проверьте параметры запроса. Некорректный indicator_type."
},
"30214": {
"message": "type_of_price is invalid",
"type": "INVALID_ARGUMENT",
"description": "Проверьте параметры запроса. Некорректный type_of_price."
},
"30215": {
"message": "length is invalid",
"type": "INVALID_ARGUMENT",
"description": "Проверьте параметры запроса. Некорректный length."
},
"30216": {
"message": "deviation_data is invalid",
"type": "INVALID_ARGUMENT",
"description": "Проверьте параметры запроса. Некорректный параметр deviation_data."
},
"30217": {
"message": "smoothing_data is invalid",
"type": "INVALID_ARGUMENT",
"description": "Проверьте параметры запроса. Некорректный параметр smoothing_data."
},
"30218": {
"message": "quantity of instruments can't be more than 3000",
"type": "INVALID_ARGUMENT",
Expand Down
11 changes: 8 additions & 3 deletions src/docs/faq_identification.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,19 @@
## Идентификаторы из модели финансовых инструментов Тинькофф Инвестиций

В Тинькофф Инвестициях применяется иерархическая система идентификации финансовых объектов.
На верхнем уровне находится **актив** - это по сути работающая на финансовом рынке компания, являющаяся эмитентом ценных бумаг. Примером актива может быть например Сбербанк.
На верхнем уровне находится **бренд** - это по сути работающая на финансовом рынке компания, являющаяся эмитентом ценных бумаг. Примером бренда может быть например Сбербанк.

У актива может несколько финансовых инструментов: акции (в т.ч. на разных биржах), облигации и т.д., каждая из подобных ценных бумаг называется **позиция**. То есть *Позиция* - это совокупность актива, типа и торговой площадки(биржи).
У бренда может несколько финансовых инструментов: акции (в т.ч. на разных биржах), облигации и т.д., каждая из подобных ценных бумаг называется **актив**.

Но одна и та же позиция может торговаться в разных режимах торгов и по разной цене: например: валюта разной лотности может иметь различную стоимость; или акцию можно продать за биржевом рынке, так и на внебиржевом (в торговле на выходных). Поэтому есть еще один идентификатор - **торговый инструмент** - он определяется как ценная бумага на торговой площадке (бирже) в указанном режиме торгов. Получить котировки можно только по торговому инструменту.
Один и тот же актив может торговаться на разных биржах, совокупность актива и торговой площадки(биржи) - это *Позиция*.
В некоторых ситуациях размещение бумаг на бирже, выплаты купонов и дивидендов проходят позициям, которые отличаются от тех, что торгуются на бирже или находятся в портфеле.

Но одна и та же позиция может торговаться в разных режимах торгов и по разной цене: например: валюта разной лотности может иметь различную стоимость; или акцию можно продать за биржевом рынке, так и на внебиржевом (в торговле на выходных).
Поэтому есть еще один идентификатор - **торговый инструмент** - он определяется как ценная бумага на торговой площадке (бирже) в указанном режиме торгов. Получить котировки можно только по торговому инструменту.

Подведем итоги,

* идентификатор компании - это uid бренда
* идентификатор актива - это asset_uid
* идентификатор позиции - это position_uid
* идентификатор торгового инструмента - это instrument_uid
Expand Down

0 comments on commit 7657551

Please sign in to comment.