ids-apis 1.0.195

IDS APIs in Rust
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
// @generated
// This file is @generated by prost-build.
// ============================================================================
// Messages
// ============================================================================

/// MM 심볼 정보
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMaking {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 현재 상태
    #[prost(enumeration="MarketMakingState", tag="2")]
    pub state: i32,
    /// MM 설정
    #[prost(message, optional, tag="3")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
    /// 펀드 코드
    #[prost(string, tag="4")]
    pub fund_code: ::prost::alloc::string::String,
    /// ETF tick size (Price internal representation)
    #[prost(int64, tag="5")]
    pub tick_size: i64,
}
/// MM 상태 상세
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMakingStatus {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 현재 상태
    #[prost(enumeration="MarketMakingState", tag="2")]
    pub state: i32,
    /// MM 설정 (config 필드에 momentum 포함)
    #[prost(message, optional, tag="3")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
    /// 활성 여부
    #[prost(bool, tag="5")]
    pub active: bool,
    /// 펀드 코드
    #[prost(string, tag="6")]
    pub fund_code: ::prost::alloc::string::String,
}
/// MM 엔진 설정 (MmConfig 대응)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMakingConfiguration {
    /// Pricing 전략: "plain_follow", "mean_bidask", "nav", "krx_nav"
    #[prost(string, tag="1")]
    pub pricing: ::prost::alloc::string::String,
    /// Skew 설정
    #[prost(message, optional, tag="2")]
    pub skew: ::core::option::Option<MarketMakingSkew>,
    /// Trade Analyzer 설정
    #[prost(message, optional, tag="3")]
    pub trade_analyzer: ::core::option::Option<MarketMakingTradeAnalyzer>,
    /// Screening 설정
    #[prost(message, optional, tag="4")]
    pub screening: ::core::option::Option<MarketMakingScreening>,
    /// MM 활성화 여부
    #[prost(bool, tag="6")]
    pub enabled: bool,
    /// Momentum 설정 (최근 가격 흐름 → bid/ask 조정)
    #[prost(message, optional, tag="7")]
    pub momentum: ::core::option::Option<MarketMakingMomentum>,
    /// 순노출 hard limit 제어 설정
    #[prost(message, optional, tag="8")]
    pub exposure_guard: ::core::option::Option<MarketMakingExposureGuard>,
    /// 중기 buy/sell imbalance 복원 설정
    #[prost(message, optional, tag="9")]
    pub inventory_balancer: ::core::option::Option<MarketMakingInventoryBalancer>,
    /// 기준가격 대비 bid 조정값 (Price internal representation)
    #[prost(int64, tag="10")]
    pub bid_adjustment: i64,
    /// 기준가격 대비 ask 조정값 (Price internal representation)
    #[prost(int64, tag="11")]
    pub ask_adjustment: i64,
}
/// Skew 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMakingSkew {
    /// Skew 모드: "fixed" or "slide_on_trade"
    #[prost(string, tag="1")]
    pub mode: ::prost::alloc::string::String,
    /// SlideOnTrade 트리거 수량
    #[prost(int64, tag="2")]
    pub trigger_amt: i64,
    /// 트리거당 skew 틱 수
    #[prost(int32, tag="3")]
    pub skew_unit: i32,
}
/// Trade Analyzer 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketMakingTradeAnalyzer {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 분석 윈도우 크기
    #[prost(uint32, tag="2")]
    pub window: u32,
    /// Adverse fill ratio 임계값
    #[prost(double, tag="3")]
    pub ratio_threshold: f64,
    /// Take-fill strength 임계값
    #[prost(double, tag="4")]
    pub strength_threshold: f64,
    /// 최대 decoration 틱 수
    #[prost(int32, tag="5")]
    pub max_deco_tick: i32,
}
/// Pre-trade Screening 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketMakingScreening {
    /// 최대 스프레드 폭 (틱 단위, 0=비활성)
    #[prost(int32, tag="1")]
    pub max_spread_width_ticks: i32,
    /// 최소 가격 (0=비활성)
    #[prost(int64, tag="2")]
    pub min_price: i64,
    /// 최대 가격 (0=비활성)
    #[prost(int64, tag="3")]
    pub max_price: i64,
}
/// Momentum 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketMakingMomentum {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 최근 가격 샘플을 유지할 시간 창 (ms)
    #[prost(uint64, tag="2")]
    pub window_ms: u64,
    /// 연속 모멘텀 강도를 정규화할 기준 틱 수
    #[prost(int32, tag="3")]
    pub trigger_ticks: i32,
    /// 정규화된 모멘텀 강도를 bid 추종 틱으로 바꾸는 민감도
    #[prost(double, tag="4")]
    pub follow_sensitivity: f64,
    /// 정규화된 모멘텀 강도를 ask/bid 도망 틱으로 바꾸는 민감도
    #[prost(double, tag="5")]
    pub escape_sensitivity: f64,
    /// bid 추종 최대 틱 수
    #[prost(int32, tag="6")]
    pub max_follow_ticks: i32,
    /// ask/bid 도망 최대 틱 수
    #[prost(int32, tag="7")]
    pub max_escape_ticks: i32,
    /// 인버스 방향으로 해석할지 여부
    #[prost(bool, tag="8")]
    pub is_opposite: bool,
}
/// 순노출 hard limit 제어 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketMakingExposureGuard {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 이 배수부터 같은 방향 수량을 줄이기 시작한다
    #[prost(int32, tag="2")]
    pub reduce_start_multiple: i32,
    /// 이 배수에 도달하면 같은 방향 호가 수량을 0으로 clamp 한다
    #[prost(int32, tag="3")]
    pub max_inventory_multiple: i32,
}
/// 중기 buy/sell imbalance 복원 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketMakingInventoryBalancer {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// imbalance가 이 배수만큼 쌓이면 복원 로직이 발동한다
    #[prost(int32, tag="2")]
    pub trigger_multiple: i32,
    /// 단계당 가격 중심 이동 틱 수
    #[prost(int32, tag="3")]
    pub price_skew_ticks: i32,
    /// 단계당 같은 방향 수량 축소 비율 (0.0 ~ 1.0)
    #[prost(double, tag="4")]
    pub same_side_reduction: f64,
    /// 같은 방향 수량의 최소 비율
    #[prost(double, tag="5")]
    pub min_same_side_scale: f64,
}
// ============================================================================
// Request/Response Messages
// ============================================================================

/// ListMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListMarketMakingRequest {
    /// 페이지 크기 (optional)
    #[prost(uint32, optional, tag="1")]
    pub page_size: ::core::option::Option<u32>,
    /// 페이지 토큰 (optional)
    #[prost(string, optional, tag="2")]
    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListMarketMakingResponse {
    /// 등록된 MM 목록
    #[prost(message, repeated, tag="1")]
    pub entries: ::prost::alloc::vec::Vec<MarketMaking>,
    /// 다음 페이지 토큰
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// GetMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMarketMakingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// GetMarketMakingStatus
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMarketMakingStatusRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// StartMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StartMarketMakingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// MM 설정 오버라이드 (optional, 없으면 기본 설정 사용)
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StartMarketMakingResponse {
    /// 시작된 MM 상태
    #[prost(message, optional, tag="1")]
    pub status: ::core::option::Option<MarketMakingStatus>,
    /// 메시지
    #[prost(string, tag="2")]
    pub message: ::prost::alloc::string::String,
}
/// StopMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StopMarketMakingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StopMarketMakingResponse {
    /// 메시지
    #[prost(string, tag="1")]
    pub message: ::prost::alloc::string::String,
}
/// ResetMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ResetMarketMakingRequest {
    /// ISIN 심볼 (빈 문자열이면 전체 리셋)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ResetMarketMakingResponse {
    /// 리셋된 심볼 수
    #[prost(int32, tag="1")]
    pub reset_count: i32,
    /// 메시지
    #[prost(string, tag="2")]
    pub message: ::prost::alloc::string::String,
}
/// UpdateMarketMakingConfig
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateMarketMakingConfigRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 업데이트할 설정 (전체 교체)
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
}
/// StreamMarketMakingStatus
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamMarketMakingStatusRequest {
    /// ISIN 심볼 (빈 문자열이면 전체 스트리밍)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// CreateMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateMarketMakingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// MM 설정
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
}
/// UpdateMarketMaking
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateMarketMakingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 업데이트할 MM 설정
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketMakingConfiguration>,
}
/// GetMarketMakingOrderbook / StreamMarketMakingOrderbook
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMarketMakingOrderbookRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// MM 전용 주문장 데이터
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMakingOrderbookData {
    /// 매수 호가 목록 (string 표현)
    #[prost(string, repeated, tag="1")]
    pub bid_prices: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// 매도 호가 목록 (string 표현)
    #[prost(string, repeated, tag="2")]
    pub ask_prices: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// 매수 수량 목록
    #[prost(int64, repeated, tag="3")]
    pub bid_quantities: ::prost::alloc::vec::Vec<i64>,
    /// 매도 수량 목록
    #[prost(int64, repeated, tag="4")]
    pub ask_quantities: ::prost::alloc::vec::Vec<i64>,
}
// ============================================================================
// MM 엔진 런타임 상태
// ============================================================================

/// Momentum 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MomentumState {
    /// 현재 모멘텀 방향 ("up", "down", "neutral")
    #[prost(string, tag="1")]
    pub direction: ::prost::alloc::string::String,
    /// 현재 bid 가격 조정값 (Price internal representation)
    #[prost(int64, tag="2")]
    pub bid_adjustment: i64,
    /// 현재 ask 가격 조정값 (Price internal representation)
    #[prost(int64, tag="3")]
    pub ask_adjustment: i64,
}
/// Skew 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct SkewState {
    /// 현재 누적 순매매 수량
    #[prost(int64, tag="1")]
    pub net_traded: i64,
}
/// Trade Analyzer 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct TradeAnalyzerState {
    /// 현재 decoration 틱 수
    #[prost(int32, tag="1")]
    pub deco_tick: i32,
    /// 현재 윈도우 내 체결 횟수
    #[prost(int32, tag="2")]
    pub fill_count: i32,
}
/// 순노출 guard 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct ExposureGuardState {
    /// 현재 순노출 수량
    #[prost(int64, tag="1")]
    pub net_exposure: i64,
    /// 현재 bid 수량 스케일 (0.0 ~ 1.0)
    #[prost(double, tag="2")]
    pub bid_scale: f64,
    /// 현재 ask 수량 스케일 (0.0 ~ 1.0)
    #[prost(double, tag="3")]
    pub ask_scale: f64,
}
/// InventoryBalancer 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct InventoryBalancerState {
    /// 현재 누적 순매매 흐름
    #[prost(int64, tag="1")]
    pub net_flow: i64,
    /// 현재 가격 중심 이동 틱 수
    #[prost(int32, tag="2")]
    pub price_shift_ticks: i32,
    /// 현재 bid 수량 스케일 (0.0 ~ 1.0)
    #[prost(double, tag="3")]
    pub bid_scale: f64,
    /// 현재 ask 수량 스케일 (0.0 ~ 1.0)
    #[prost(double, tag="4")]
    pub ask_scale: f64,
}
/// MM 엔진 전체 런타임 상태 스냅샷
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MmEngineRuntimeState {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 상태 스냅샷 타임스탬프 (Unix nanoseconds)
    #[prost(int64, tag="2")]
    pub timestamp: i64,
    /// Momentum 상태
    #[prost(message, optional, tag="3")]
    pub momentum: ::core::option::Option<MomentumState>,
    /// Skew 상태
    #[prost(message, optional, tag="4")]
    pub skew: ::core::option::Option<SkewState>,
    /// Trade Analyzer 상태
    #[prost(message, optional, tag="5")]
    pub trade_analyzer: ::core::option::Option<TradeAnalyzerState>,
    /// 순노출 guard 상태
    #[prost(message, optional, tag="6")]
    pub exposure_guard: ::core::option::Option<ExposureGuardState>,
    /// InventoryBalancer 상태
    #[prost(message, optional, tag="7")]
    pub inventory_balancer: ::core::option::Option<InventoryBalancerState>,
}
// ============================================================================
// MM 엔진 상태 Request Messages
// ============================================================================

/// StreamMmEngineState
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamMmEngineStateRequest {
    /// ISIN 심볼 (빈 문자열이면 전체 스트리밍)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
// ============================================================================
// Enums
// ============================================================================

/// MM 상태
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum MarketMakingState {
    Unspecified = 0,
    /// 대기
    Idle = 1,
    /// 활성
    Running = 2,
}
impl MarketMakingState {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            MarketMakingState::Unspecified => "MARKET_MAKING_STATE_UNSPECIFIED",
            MarketMakingState::Idle => "MARKET_MAKING_STATE_IDLE",
            MarketMakingState::Running => "MARKET_MAKING_STATE_RUNNING",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "MARKET_MAKING_STATE_UNSPECIFIED" => Some(Self::Unspecified),
            "MARKET_MAKING_STATE_IDLE" => Some(Self::Idle),
            "MARKET_MAKING_STATE_RUNNING" => Some(Self::Running),
            _ => None,
        }
    }
}
include!("kdo.v1.mm.tonic.rs");
include!("kdo.v1.mm.serde.rs");
// @@protoc_insertion_point(module)