Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update contracts and crates #3

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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