ids-apis 1.0.245

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
// @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 엔진 설정 (MmConfig 대응)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMakingConfiguration {
    /// MM 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// NAV pricing 상세 설정 (pricing = "nav" 일 때 사용)
    #[prost(message, optional, tag="2")]
    pub pricing: ::core::option::Option<MarketMakingPricing>,
    /// Trade Analyzer 설정
    #[prost(message, optional, tag="3")]
    pub trade_analyzer: ::core::option::Option<MarketMakingTradeAnalyzer>,
    /// Momentum 설정 (최근 가격 흐름 → bid/ask 조정)
    #[prost(message, optional, tag="5")]
    pub momentum: ::core::option::Option<MarketMakingMomentum>,
    /// 통합 포지션 관리 설정
    #[prost(message, optional, tag="6")]
    pub exposure_balancer: ::core::option::Option<MarketMakingExposureBalancer>,
    /// 기준가격 대비 bid 조정값 (Price internal representation)
    #[prost(int64, tag="10")]
    pub bid_adjustment: i64,
    /// 기준가격 대비 ask 조정값 (Price internal representation)
    #[prost(int64, tag="11")]
    pub ask_adjustment: i64,
    /// 레벨당 매수 수량
    #[prost(int64, tag="12")]
    pub bid_quantity: i64,
    /// 레벨당 매도 수량
    #[prost(int64, tag="13")]
    pub ask_quantity: i64,
    /// NAV 계산용 bid basis (Price internal representation)
    #[prost(int64, tag="14")]
    pub bid_basis: i64,
    /// NAV 계산용 ask basis (Price internal representation)
    #[prost(int64, tag="15")]
    pub ask_basis: i64,
    /// NAV+adj 기준가 대비 bid 추가 gap (Price internal representation)
    #[prost(int64, tag="16")]
    pub bid_offset: i64,
    /// NAV+adj 기준가 대비 ask 추가 gap (Price internal representation)
    #[prost(int64, tag="17")]
    pub ask_offset: i64,
}
/// NAV pricing 상세 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketMakingPricing {
    /// EtfPricing 전략 (oneof)
    #[prost(oneof="market_making_pricing::Pricing", tags="1, 2, 3, 4")]
    pub pricing: ::core::option::Option<market_making_pricing::Pricing>,
}
/// Nested message and enum types in `MarketMakingPricing`.
pub mod market_making_pricing {
    /// EtfPricing 전략 (oneof)
    #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Pricing {
        /// PDF 기반 nav 계산 및 헷지 프라이싱
        #[prost(message, tag="1")]
        PlainFollow(super::PlainFollow),
        /// 지수 추종 헷지 프라이싱
        #[prost(message, tag="2")]
        MeanBidAsk(super::MeanBidAsk),
        /// 선물 베이시스 기반 프라이싱
        #[prost(message, tag="3")]
        Nav(super::Nav),
        /// 레버리지 선물 기반 프라이싱
        #[prost(message, tag="4")]
        KrxNav(super::KrxNav),
    }
}
/// EtfPricing::PdfNavHedge
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct PlainFollow {
}
/// EtfPricing::IndexTrackingHedge
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MeanBidAsk {
}
/// EtfPricing::FutureBasis { prev_index }
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Nav {
    /// 이전 지수 (Price internal representation)
    #[prost(message, optional, tag="1")]
    pub etf_pricing: ::core::option::Option<super::common::EtfPricing>,
}
/// EtfPricing::LeverageFuture { prev_index, prev_future }
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct KrxNav {
    /// 이전 지수 (Price internal representation)
    #[prost(int64, tag="1")]
    pub prev_index: i64,
    /// 이전 선물 (Price internal representation)
    #[prost(int64, tag="2")]
    pub prev_future: i64,
}
/// 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,
}
/// 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,
}
/// 통합 포지션 관리 설정 (soft rebalance + hard limit)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketMakingExposureBalancer {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// soft zone: 이 배수부터 soft rebalance 발동
    #[prost(int32, tag="2")]
    pub trigger_multiple: i32,
    /// 단계당 가격 중심 이동 틱 수
    #[prost(int32, tag="3")]
    pub price_skew_ticks: i32,
    /// hard zone: 이 배수에서 같은 방향 수량 0 (구 hard_limit_max 대체)
    #[prost(int32, tag="4")]
    pub limit_multiple: i32,
}
// ============================================================================
// 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(enumeration="MarketMakingState", tag="1")]
    pub state: i32,
    /// 메시지
    #[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
/// NOTE: config 내 pricing, fund_code, tick_size, depth 필드는 이 요청으로 변경할 수 없습니다.
/// 해당 필드들은 서버에서 무시됩니다.
#[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,
    /// 업데이트할 설정 (전체 교체)
    /// pricing, fund_code, tick_size, depth 필드는 read-only이며 무시됩니다.
    #[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,
}
/// 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,
    /// 원시 틱 변화량 (부호 포함)
    #[prost(double, tag="4")]
    pub raw_ticks: f64,
    /// 정규화 강도 (raw_ticks / trigger_ticks)
    #[prost(double, tag="5")]
    pub normalized_strength: f64,
    /// 실제 적용된 follow 틱
    #[prost(int32, tag="6")]
    pub follow_ticks: i32,
    /// 실제 적용된 escape 틱
    #[prost(int32, tag="7")]
    pub escape_ticks: i32,
    /// 윈도우 내 샘플 수
    #[prost(int32, tag="8")]
    pub sample_count: i32,
}
/// 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,
}
/// 순노출 및 재고 균형 런타임 상태 (ExposureGuard + InventoryBalancer 통합)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct ExposureBalancerState {
    /// 현재 순노출 수량
    #[prost(int64, tag="1")]
    pub net_exposure: 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 엔진 런타임 상태 델타 메시지.
/// 스트리밍 시 set된 필드만 변경분을 의미하며, 변경이 없는 필드는 생략된다.
/// symbol은 항상 포함된다.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MmStateUpdate {
    /// ISIN 심볼 (항상 포함)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// MM 상태 (변경 시에만 포함)
    #[prost(enumeration="MarketMakingState", optional, tag="3")]
    pub state: ::core::option::Option<i32>,
    /// Momentum 상태 (변경 시에만 포함)
    #[prost(message, optional, tag="4")]
    pub momentum: ::core::option::Option<MomentumState>,
    /// Trade Analyzer 상태 (변경 시에만 포함)
    #[prost(message, optional, tag="5")]
    pub trade_analyzer: ::core::option::Option<TradeAnalyzerState>,
    /// 순노출 및 재고 균형 상태 (변경 시에만 포함)
    #[prost(message, optional, tag="6")]
    pub exposure_balancer: ::core::option::Option<ExposureBalancerState>,
    /// 현재 MM 매도 호가 (변경 시에만 포함, None이면 생략)
    #[prost(string, optional, tag="7")]
    pub ask_quote: ::core::option::Option<::prost::alloc::string::String>,
    /// 현재 MM 매수 호가 (변경 시에만 포함, None이면 생략)
    #[prost(string, optional, tag="8")]
    pub bid_quote: ::core::option::Option<::prost::alloc::string::String>,
    /// 현재 적용 중인 bid offset (변경 시에만 포함, None이면 생략)
    #[prost(string, optional, tag="9")]
    pub bid_offset: ::core::option::Option<::prost::alloc::string::String>,
    /// 현재 적용 중인 ask offset (변경 시에만 포함, None이면 생략)
    #[prost(string, optional, tag="10")]
    pub ask_offset: ::core::option::Option<::prost::alloc::string::String>,
}
// ============================================================================
// MM 엔진 상태 Request Messages
// ============================================================================

/// StreamMmStateUpdate
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamMmStateUpdateRequest {
    /// 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)