yatis 0.2.1

Yet Another T-bank Investment Sdk
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
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 "common.proto";
import "google/api/field_behavior.proto";

service MarketDataService {//Сервис для получения биржевой информации:<br/> 1. Свечи.<br/> 2. Стаканы.<br/> 3. Торговые статусы.<br/> 4. Лента сделок.

  //Запросить исторические свечи по инструменту.
  rpc GetCandles(GetCandlesRequest) returns (GetCandlesResponse);

  //Запросить цены последних сделок по инструментам.
  rpc GetLastPrices(GetLastPricesRequest) returns (GetLastPricesResponse);

  //Получить стакан по инструменту.
  rpc GetOrderBook(GetOrderBookRequest) returns (GetOrderBookResponse);

  //Запросить статус торгов по инструментам.
  rpc GetTradingStatus(GetTradingStatusRequest) returns (GetTradingStatusResponse);

  //Запросить статус торгов по инструментам.
  rpc GetTradingStatuses(GetTradingStatusesRequest) returns (GetTradingStatusesResponse);

  //Запросить обезличенные сделки за последний час.
  rpc GetLastTrades(GetLastTradesRequest) returns (GetLastTradesResponse);

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

  //Получить технические индикаторы по инструменту.
  rpc GetTechAnalysis(GetTechAnalysisRequest) returns (GetTechAnalysisResponse);
}

service MarketDataStreamService {
  //Bidirectional-стрим предоставления биржевой информации.
  rpc MarketDataStream(stream MarketDataRequest) returns (stream MarketDataResponse);

  //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; //Цена последней сделки.
  }
}

// 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`.
}

//Результат изменения статус подписки на свечи.
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`.
  optional GetCandlesRequest.CandleSource candle_source_type = 9; //Источник свечей.
}

//Результат подписки.
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`.
  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; //Тип стакана.
}

//Типы источников сделок.
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`, все сделки.
}

//Запрос подписки на поток обезличенных сделок.
message TradeInstrument {
  string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте instrument_id`.
  string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`.
}

//Результат изменения статуса подписки на поток обезличенных сделок.
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.
}

//Изменение статуса подписки на торговый статус инструмента.
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`.
}

//Результат изменения статуса подписки на торговый статус.
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.
}

//Изменение статуса подписки на цену последней сделки по инструменту.
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`.
}

//Результат изменения статуса подписки на цену последней сделки.
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`.
}

//Пакет свечей в рамках стрима.
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 инструмента.
  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; //Тип стакана.
}

//Массив предложений/спроса.
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; //Тип источника сделки.
}

//Направление сделки.
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 инструмента.
}

//Запрос исторических свечей.
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`.
  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.
}

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;  //Тип источника свечи
}

//Запрос получения цен последних сделок.
message GetLastPricesRequest {
  repeated string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
  repeated string instrument_id = 2; //Массив идентификаторов инструмента. Принимает значения `figi` или `instrument_uid`.
  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 instrument_uid = 11; //UID инструмента.
  LastPriceType last_price_type = 12; //Тип последней цены.
}

//Запрос стакана.
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`.
}

//Информация о стакане.
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).
  google.protobuf.Timestamp last_price_ts = 21; //Время получения цены последней сделки.
  google.protobuf.Timestamp close_price_ts = 22; //Время получения цены закрытия.
  google.protobuf.Timestamp orderbook_ts = 23; //Время формирования стакана на бирже.
  string instrument_uid = 9; //UID инструмента.
}

//Запрос получения торгового статуса.
message GetTradingStatusRequest {
  optional string figi = 1 [deprecated = true]; //Deprecated FIGI-идентификатор инструмента. Используйте `instrument_id`.
  optional string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`.
}

//Запрос получения торгового статуса.
message GetTradingStatusesRequest {
  repeated string instrument_id = 1; //Идентификатор инструмента. Принимает значение `figi` или `instrument_uid`.
}

//Информация о торговом статусе.
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; //Признак доступности только заявки по лучшей цене.
}

//Запрос обезличенных сделок за последний час.
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`.
  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`.
}

//Цены закрытия торговой сессии по инструментам.
message GetClosePricesResponse {
  repeated InstrumentClosePriceResponse close_prices = 1; //Массив по инструментам.
}

//Цена закрытия торговой сессии по инструменту.
message InstrumentClosePriceResponse {
  string figi = 1; //FIGI инструмента.
  string instrument_uid = 2; //UID инструмента.
  Quotation price = 11; //Цена закрытия торговой сессии.
  Quotation evening_session_price = 12; //Цена последней сделки с вечерней сессии. Цена публикуется биржей по торговым дням и в нерабочие дни не обновляется.
  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_ALL = 3; //Стакан биржевой и дилера.
}

//Тип последней цены
enum LastPriceType {
  LAST_PRICE_UNSPECIFIED = 0; //Не определен.
  LAST_PRICE_EXCHANGE = 1; // Цена биржи.
  LAST_PRICE_DEALER = 2; // Цена дилера
}