Skip to content

Commit

Permalink
update contracts and crates
Browse files Browse the repository at this point in the history
  • Loading branch information
azoyan committed Oct 6, 2022
1 parent ec87144 commit d439ed6
Show file tree
Hide file tree
Showing 14 changed files with 6,480 additions and 2,266 deletions.
581 changes: 335 additions & 246 deletions Cargo.lock

Large diffs are not rendered by default.

14 changes: 8 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ license = "MIT"
repository = "https://github.com/ovr/tinkoff-invest-rust"

[dependencies]
prost = "0.9"
prost-types = "0.9.0"
uuid = { version = "0.8", features = ["v4"] }
tonic = { version = "0.6.2", features = ["tls", "compression", "tls-roots"]}
prost = "0.11"
prost-types = "0.11"
prost-build = "0.11"
protoc = "2"
uuid = { version = "1", features = ["v4"] }
tonic = { version = "0.8", features = ["tls", "tls-roots", "codegen", "channel"]}

[dev-dependencies]
async-stream = "0.3"
Expand All @@ -20,8 +22,8 @@ tokio-stream = {version = "0.1", features = ["net"]}
futures-util = {version = "0.3.21"}

[build-dependencies]
tonic-build = { version = "0.6.2", features = ["rustfmt"] }
tonic-build = { version = "0.8" }

[patch.crates-io]
# Awaiting release with https://github.com/hyperium/tonic/commit/468e4221f0c496d9ffb4de24d3658b9267e884b1
tonic = { git = "https://github.com/hyperium/tonic", rev = "d6c0fc112b2288a080fd0a727453b24d666e3d79" }
# tonic = { git = "https://github.com/hyperium/tonic", rev = "d6c0fc112b2288a080fd0a727453b24d666e3d79" }
1 change: 0 additions & 1 deletion build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
.build_client(true)
.build_server(false)
.out_dir("src")
.format(true)
.compile(
&[
"contracts/instruments.proto",
Expand Down
Binary file added contracts/.DS_Store
Binary file not shown.
562 changes: 555 additions & 7 deletions contracts/instruments.proto

Large diffs are not rendered by default.

169 changes: 144 additions & 25 deletions contracts/marketdata.proto

Large diffs are not rendered by default.

519 changes: 390 additions & 129 deletions contracts/operations.proto

Large diffs are not rendered by default.

49 changes: 35 additions & 14 deletions contracts/orders.proto
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,14 @@ service OrdersService {/* Сервис предназначен для рабо

//Метод получения списка активных заявок по счёту.
rpc GetOrders(GetOrdersRequest) returns (GetOrdersResponse);

//Метод изменения выставленной заявки.
rpc ReplaceOrder(ReplaceOrderRequest) returns (PostOrderResponse);
}

//Запрос установки соединения.
message TradesStreamRequest {

repeated string accounts = 1; //Идентификаторы счетов.
}

//Информация о торговых поручениях.
Expand All @@ -48,25 +51,26 @@ message TradesStreamResponse {

//Информация об исполнении торгового поручения.
message OrderTrades {
string order_id = 1; //Идентификатор торгового поручения
string order_id = 1; //Идентификатор торгового поручения.
google.protobuf.Timestamp created_at = 2; //Дата и время создания сообщения в часовом поясе UTC.
OrderDirection direction = 3; //Направление сделки (возможные значения)
string figi = 4; //Figi-идентификатор инструмента
repeated OrderTrade trades = 5; //Массив сделок
OrderDirection direction = 3; //Направление сделки.
string figi = 4; //Figi-идентификатор инструмента.
repeated OrderTrade trades = 5; //Массив сделок.
string account_id = 6; //Идентификатор счёта.
}

//Информация о сделке.
message OrderTrade {
google.protobuf.Timestamp date_time = 1; //Дата и время совершения сделки в часовом поясе UTC.
Quotation price = 2; //Цена, по которой совершена сделка
int64 quantity = 3; //Количество лотов в сделке
Quotation price = 2; //Цена одного инструмента, по которой совершена сделка.
int64 quantity = 3; //Количество лотов в сделке.
}

//Запрос выставления торгового поручения.
message PostOrderRequest {
string figi = 1; //Figi-идентификатор инструмента.
int64 quantity = 2; //Количество лотов.
Quotation price = 3; //Цена лота.
Quotation price = 3; //Цена одного инструмента. Для получения стоимости лота требуется умножить на лотность инструмента. Игнорируется для рыночных поручений.
OrderDirection direction = 4; //Направление операции.
string account_id = 5; //Номер счёта.
OrderType order_type = 6; //Тип заявки.
Expand All @@ -89,7 +93,7 @@ message PostOrderResponse {

string figi = 11; // Figi-идентификатор инструмента.
OrderDirection direction = 12; //Направление сделки.
MoneyValue initial_security_price = 13; //Начальная цена инструмента заявки.
MoneyValue initial_security_price = 13; //Начальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
OrderType order_type = 14; //Тип заявки.
string message = 15; //Дополнительные данные об исполнении заявки.
Quotation initial_order_price_pt = 16; //Начальная цена заявки в пунктах (для фьючерсов).
Expand Down Expand Up @@ -136,7 +140,7 @@ message OrderState {
MoneyValue executed_commission = 10; //Фактическая комиссия по итогам исполнения заявки.
string figi = 11; //Figi-идентификатор инструмента.
OrderDirection direction = 12; //Направление заявки.
MoneyValue initial_security_price = 13; //Начальная цена инструмента. Цена инструмента на момент выставления заявки.
MoneyValue initial_security_price = 13; //Начальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
repeated OrderStage stages = 14; //Стадии выполнения заявки.
MoneyValue service_commission = 15; //Сервисная комиссия.
string currency = 16; //Валюта заявки.
Expand All @@ -146,19 +150,29 @@ message OrderState {

//Сделки в рамках торгового поручения.
message OrderStage {
MoneyValue price = 1; //Цена.
MoneyValue price = 1; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента..
int64 quantity = 2; //Количество лотов.
string trade_id = 3; //Идентификатор торговой операции.
}

//Направление операции
//Запрос изменения выставленной заявки.
message ReplaceOrderRequest {
string account_id = 1; //Номер счета.
string order_id = 6; //Идентификатор заявки на бирже.
string idempotency_key = 7; //Новый идентификатор запроса выставления поручения для целей идемпотентности. Максимальная длина 36 символов. Перезатирает старый ключ.
int64 quantity = 11; //Количество лотов.
Quotation price = 12; //Цена за 1 инструмент.
PriceType price_type = 13; //Тип цены.
}

//Направление операции.
enum OrderDirection {
ORDER_DIRECTION_UNSPECIFIED = 0; //Значение не указано
ORDER_DIRECTION_BUY = 1; //Покупка
ORDER_DIRECTION_SELL = 2; //Продажа
}

//Тип заявки
//Тип заявки.
enum OrderType {
ORDER_TYPE_UNSPECIFIED = 0; //Значение не указано
ORDER_TYPE_LIMIT = 1; //Лимитная
Expand All @@ -173,4 +187,11 @@ enum OrderExecutionReportStatus {
EXECUTION_REPORT_STATUS_CANCELLED = 3; //Отменена пользователем
EXECUTION_REPORT_STATUS_NEW = 4; //Новая
EXECUTION_REPORT_STATUS_PARTIALLYFILL = 5; //Частично исполнена
}
}

//Тип цены.
enum PriceType {
PRICE_TYPE_UNSPECIFIED = 0; //Значение не определено.
PRICE_TYPE_POINT = 1; //Цена в пунктах (только для фьючерсов и облигаций).
PRICE_TYPE_CURRENCY = 2; //Цена в валюте расчётов по инструменту.
}
9 changes: 9 additions & 0 deletions contracts/sandbox.proto
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ service SandboxService { //Сервис для работы с песочниц
//Метод выставления торгового поручения в песочнице.
rpc PostSandboxOrder(PostOrderRequest) returns (PostOrderResponse);

//Метод изменения выставленной заявки.
rpc ReplaceSandboxOrder(ReplaceOrderRequest) returns (PostOrderResponse);

//Метод получения списка активных заявок по счёту в песочнице.
rpc GetSandboxOrders(GetOrdersRequest) returns (GetOrdersResponse);

Expand All @@ -43,11 +46,17 @@ service SandboxService { //Сервис для работы с песочниц
//Метод получения операций в песочнице по номеру счёта.
rpc GetSandboxOperations(OperationsRequest) returns (OperationsResponse);

//Метод получения операций в песочнице по номеру счета с пагинацией.
rpc GetSandboxOperationsByCursor(GetOperationsByCursorRequest) returns (GetOperationsByCursorResponse);

//Метод получения портфолио в песочнице.
rpc GetSandboxPortfolio(PortfolioRequest) returns (PortfolioResponse);

//Метод пополнения счёта в песочнице.
rpc SandboxPayIn(SandboxPayInRequest) returns (SandboxPayInResponse);

//Метод получения доступного остатка для вывода средств в песочнице.
rpc GetSandboxWithdrawLimits(WithdrawLimitsRequest) returns (WithdrawLimitsResponse);
}

//Запрос открытия счёта в песочнице.
Expand Down
54 changes: 27 additions & 27 deletions contracts/stoporders.proto
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ service StopOrdersService { /* Сервис предназначен для ра
rpc CancelStopOrder(CancelStopOrderRequest) returns (CancelStopOrderResponse);
}

//Запрос выставления стоп-заявки
//Запрос выставления стоп-заявки.
message PostStopOrderRequest {
string figi = 1; //Figi-идентификатор инструмента
int64 quantity = 2; //Количество лотов
Quotation price = 3; //Цена лота
Quotation stop_price = 4; //Стоп-цена заявки
StopOrderDirection direction = 5; //Направление операции
string account_id = 6; //Номер счёта
StopOrderExpirationType expiration_type = 7; //Тип экспирации заявки
StopOrderType stop_order_type = 8; //Тип заявки
string figi = 1; //Figi-идентификатор инструмента.
int64 quantity = 2; //Количество лотов.
Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
Quotation stop_price = 4; //Стоп-цена заявки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
StopOrderDirection direction = 5; //Направление операции.
string account_id = 6; //Номер счёта.
StopOrderExpirationType expiration_type = 7; //Тип экспирации заявки.
StopOrderType stop_order_type = 8; //Тип заявки.
google.protobuf.Timestamp expire_date = 9; //Дата и время окончания действия стоп-заявки в часовом поясе UTC. **Для ExpirationType = GoodTillDate заполнение обязательно**.
}

Expand All @@ -45,17 +45,17 @@ message PostStopOrderResponse {

//Запрос получения списка активных стоп-заявок.
message GetStopOrdersRequest {
string account_id = 1; //Идентификатор счёта клиента
string account_id = 1; //Идентификатор счёта клиента.
}

//Список активных стоп-заявок.
message GetStopOrdersResponse {
repeated StopOrder stop_orders = 1; //Массив стоп-заявок по счёту
repeated StopOrder stop_orders = 1; //Массив стоп-заявок по счёту.
}

//Запрос отмены выставленной стоп-заявки.
message CancelStopOrderRequest {
string account_id = 1; //Идентификатор счёта клиента
string account_id = 1; //Идентификатор счёта клиента.
string stop_order_id = 2; //Уникальный идентификатор стоп-заявки.
}

Expand All @@ -66,24 +66,24 @@ message CancelStopOrderResponse {

//Информация о стоп-заявке.
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; //Тип стоп-заявки
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; //Цена заявки
MoneyValue stop_price = 11; //Цена активации стоп-заявки
MoneyValue price = 10; //Цена заявки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
MoneyValue stop_price = 11; //Цена активации стоп-заявки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.
}

//Направление сделки стоп-заявки.
enum StopOrderDirection {
STOP_ORDER_DIRECTION_UNSPECIFIED = 0; //Значение не указано
STOP_ORDER_DIRECTION_BUY = 1; //Покупка
STOP_ORDER_DIRECTION_SELL = 2; //Продажа
STOP_ORDER_DIRECTION_UNSPECIFIED = 0; //Значение не указано.
STOP_ORDER_DIRECTION_BUY = 1; //Покупка.
STOP_ORDER_DIRECTION_SELL = 2; //Продажа.
}

//Тип экспирации стоп-заявке.
Expand All @@ -95,8 +95,8 @@ enum StopOrderExpirationType {

//Тип стоп-заявки.
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 заявка
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 заявка.
}
7 changes: 4 additions & 3 deletions contracts/users.proto
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import "google/protobuf/timestamp.proto";
import "common.proto";

service UsersService { /*Сервис предназначен для получения: </br> **1**.
списка счетов пользователя; </br> **2**. маржинальных показателе по счёту.*/
списка счетов пользователя; </br> **2**. маржинальных показателей по счёту.*/

//Метод получения счетов пользователя.
rpc GetAccounts (GetAccountsRequest) returns (GetAccountsResponse);
Expand Down Expand Up @@ -134,7 +134,8 @@ message GetInfoRequest {
message GetInfoResponse {
bool prem_status = 1; //Признак премиум клиента.
bool qual_status = 2; //Признак квалифицированного инвестора.
repeated string qualified_for_work_with = 3; //Набор требующих тестирования инструментов и возможностей, с которыми может работать пользователь.
repeated string qualified_for_work_with = 3; //Набор требующих тестирования инструментов и возможностей, с которыми может работать пользователь. [Подробнее](https://tinkoff.github.io/investAPI/faq_users/).
string tariff = 4; //Наименование тарифа пользователя.
}

//Уровень доступа к счёту.
Expand All @@ -143,4 +144,4 @@ enum AccessLevel {
ACCOUNT_ACCESS_LEVEL_FULL_ACCESS = 1; //Полный доступ к счёту.
ACCOUNT_ACCESS_LEVEL_READ_ONLY = 2; //Доступ с уровнем прав "только чтение".
ACCOUNT_ACCESS_LEVEL_NO_ACCESS = 3; //Доступ отсутствует.
}
}
1 change: 0 additions & 1 deletion src/google.protobuf.rs
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@

Loading

0 comments on commit d439ed6

Please sign in to comment.