Skip to main content

ids_apis/
kdo.v1.mm.rs

1// @generated
2// This file is @generated by prost-build.
3// ============================================================================
4// Messages
5// ============================================================================
6
7/// MM 심볼 정보
8#[allow(clippy::derive_partial_eq_without_eq)]
9#[derive(Clone, PartialEq, ::prost::Message)]
10pub struct MarketMaking {
11    /// ISIN 심볼
12    #[prost(string, tag="1")]
13    pub symbol: ::prost::alloc::string::String,
14    /// 현재 상태
15    #[prost(enumeration="MarketMakingState", tag="2")]
16    pub state: i32,
17    /// MM 설정
18    #[prost(message, optional, tag="3")]
19    pub config: ::core::option::Option<MarketMakingConfiguration>,
20    /// 펀드 코드
21    #[prost(string, tag="4")]
22    pub fund_code: ::prost::alloc::string::String,
23    /// ETF tick size (Price internal representation)
24    #[prost(int64, tag="5")]
25    pub tick_size: i64,
26}
27/// MM 엔진 설정 (MmConfig 대응)
28#[allow(clippy::derive_partial_eq_without_eq)]
29#[derive(Clone, PartialEq, ::prost::Message)]
30pub struct MarketMakingConfiguration {
31    /// MM 활성화 여부
32    #[prost(bool, tag="1")]
33    pub enabled: bool,
34    /// NAV pricing 상세 설정 (pricing = "nav" 일 때 사용)
35    #[prost(message, optional, tag="2")]
36    pub pricing: ::core::option::Option<MarketMakingPricing>,
37    /// Trade Analyzer 설정
38    #[prost(message, optional, tag="3")]
39    pub trade_analyzer: ::core::option::Option<MarketMakingTradeAnalyzer>,
40    /// MarketBias 설정 (장기 시장 체결 누적 → 영구 skew)
41    #[prost(message, optional, tag="4")]
42    pub market_bias: ::core::option::Option<MarketMakingMarketBias>,
43    /// Momentum 설정 (단기 시장 체결 비율/강도 → 즉각 bid/ask 동일 shift)
44    #[prost(message, optional, tag="5")]
45    pub momentum: ::core::option::Option<MarketMakingMomentum>,
46    /// 통합 포지션 관리 설정
47    #[prost(message, optional, tag="6")]
48    pub exposure_balancer: ::core::option::Option<MarketMakingExposureBalancer>,
49    /// 레벨당 매수 수량
50    #[prost(int64, tag="9")]
51    pub bid_quantity: i64,
52    /// 레벨당 매도 수량
53    #[prost(int64, tag="10")]
54    pub ask_quantity: i64,
55    /// NAV+adj 기준가 대비 bid 추가 gap (Price internal representation)
56    #[prost(int64, tag="13")]
57    pub bid_offset: i64,
58    /// NAV+adj 기준가 대비 ask 추가 gap (Price internal representation)
59    #[prost(int64, tag="14")]
60    pub ask_offset: i64,
61    /// 단일 basis (bid_basis/ask_basis 통합 후속, Price internal representation)
62    #[prost(int64, optional, tag="15")]
63    pub basis: ::core::option::Option<i64>,
64    /// 호가 반폭 (틱 수). bid = mid - half, ask = mid + half
65    #[prost(int32, tag="16")]
66    pub base_half_ticks: i32,
67    /// 순포지션 수량 한도 (방향별 호가 차단)
68    #[prost(message, optional, tag="17")]
69    pub quantity_limit: ::core::option::Option<MarketMakingQuantityLimit>,
70}
71/// NAV pricing 상세 설정
72#[allow(clippy::derive_partial_eq_without_eq)]
73#[derive(Clone, PartialEq, ::prost::Message)]
74pub struct MarketMakingPricing {
75    /// EtfPricing 전략 (oneof)
76    #[prost(oneof="market_making_pricing::Pricing", tags="1, 2, 3, 4")]
77    pub pricing: ::core::option::Option<market_making_pricing::Pricing>,
78}
79/// Nested message and enum types in `MarketMakingPricing`.
80pub mod market_making_pricing {
81    /// EtfPricing 전략 (oneof)
82    #[allow(clippy::derive_partial_eq_without_eq)]
83#[derive(Clone, PartialEq, ::prost::Oneof)]
84    pub enum Pricing {
85        /// PDF 기반 nav 계산 및 헷지 프라이싱
86        #[prost(message, tag="1")]
87        PlainFollow(super::PlainFollow),
88        /// 지수 추종 헷지 프라이싱
89        #[prost(message, tag="2")]
90        MeanBidAsk(super::MeanBidAsk),
91        /// 선물 베이시스 기반 프라이싱
92        #[prost(message, tag="3")]
93        Nav(super::Nav),
94        /// 레버리지 선물 기반 프라이싱
95        #[prost(message, tag="4")]
96        KrxNav(super::KrxNav),
97    }
98}
99/// EtfPricing::PdfNavHedge
100#[allow(clippy::derive_partial_eq_without_eq)]
101#[derive(Clone, Copy, PartialEq, ::prost::Message)]
102pub struct PlainFollow {
103}
104/// EtfPricing::IndexTrackingHedge
105#[allow(clippy::derive_partial_eq_without_eq)]
106#[derive(Clone, Copy, PartialEq, ::prost::Message)]
107pub struct MeanBidAsk {
108}
109/// EtfPricing::FutureBasis { prev_index }
110#[allow(clippy::derive_partial_eq_without_eq)]
111#[derive(Clone, PartialEq, ::prost::Message)]
112pub struct Nav {
113    /// 이전 지수 (Price internal representation)
114    #[prost(message, optional, tag="1")]
115    pub etf_pricing: ::core::option::Option<super::common::EtfPricing>,
116}
117/// EtfPricing::LeverageFuture { prev_index, prev_future }
118#[allow(clippy::derive_partial_eq_without_eq)]
119#[derive(Clone, Copy, PartialEq, ::prost::Message)]
120pub struct KrxNav {
121    /// 이전 지수 (Price internal representation)
122    #[prost(int64, tag="1")]
123    pub prev_index: i64,
124    /// 이전 선물 (Price internal representation)
125    #[prost(int64, tag="2")]
126    pub prev_future: i64,
127}
128/// Trade Analyzer 설정 (갤럭티코 SingleTradeAnalyzer 포팅 — 시장 체결 추종)
129#[allow(clippy::derive_partial_eq_without_eq)]
130#[derive(Clone, Copy, PartialEq, ::prost::Message)]
131pub struct MarketMakingTradeAnalyzer {
132    /// 활성화 여부
133    #[prost(bool, tag="1")]
134    pub enabled: bool,
135    /// 매 체결마다 net/total 에 곱하는 감쇠 비율 (갤럭티코 기본 0.98)
136    #[prost(double, tag="2")]
137    pub count_decay_ratio: f64,
138    /// 시간 감쇠 주기 (초). 0 = 비활성 (갤럭티코 기본 10)
139    #[prost(uint64, tag="3")]
140    pub decay_interval_secs: u64,
141    /// 시간 주기마다 total 에 곱하는 비율 (갤럭티코 기본 0.95)
142    #[prost(double, tag="4")]
143    pub total_decay_ratio: f64,
144    /// 시간 주기마다 net 에 곱하는 비율 (갤럭티코 기본 0.9). total_decay_ratio 보다 작아야 방향성이 먼저 사라짐.
145    #[prost(double, tag="5")]
146    pub net_decay_ratio: f64,
147    /// strength 분모 최소치 (기본 100)
148    #[prost(int64, tag="6")]
149    pub min_book_qty: i64,
150}
151/// Momentum 설정 (갤럭티코 DecoByTrade 포팅 — ratio/strength 기반 양쪽 동일 shift)
152#[allow(clippy::derive_partial_eq_without_eq)]
153#[derive(Clone, Copy, PartialEq, ::prost::Message)]
154pub struct MarketMakingMomentum {
155    /// 활성화 여부
156    #[prost(bool, tag="1")]
157    pub enabled: bool,
158    /// 인버스 ETF: ratio 부호 반전
159    #[prost(bool, tag="2")]
160    pub is_opposite: bool,
161    /// 최대 shift (tick 단위, 갤럭티코 pInfo.p1/100 등가)
162    #[prost(double, tag="3")]
163    pub max_tick: f64,
164    /// ratio 발동 임계 ∈ [0, 1) (갤럭티코 pInfo.p2/100)
165    #[prost(double, tag="4")]
166    pub ratio_threshold: f64,
167    /// strength 발동 임계 ∈ [0, 1) (갤럭티코 pInfo.p3/100)
168    #[prost(double, tag="5")]
169    pub strength_threshold: f64,
170}
171/// MarketBias 설정 (갤럭티코 DecoByTradeAcc 포팅 — 장기 누적 영구 skew)
172#[allow(clippy::derive_partial_eq_without_eq)]
173#[derive(Clone, Copy, PartialEq, ::prost::Message)]
174pub struct MarketMakingMarketBias {
175    /// 활성화 여부
176    #[prost(bool, tag="1")]
177    pub enabled: bool,
178    /// 주기 평가 간격 (초, 갤럭티코 accNextUpdateSec 기본 60)
179    #[prost(uint64, tag="2")]
180    pub eval_interval_secs: u64,
181    /// ratio 발동 임계 (기본 0.6)
182    #[prost(double, tag="3")]
183    pub ratio_threshold: f64,
184    /// strength 발동 임계 (기본 0.5)
185    #[prost(double, tag="4")]
186    pub strength_threshold: f64,
187    /// 점수 임계 0~100 (기본 5). 이 위를 통과해야 한 단계 가산.
188    #[prost(int32, tag="5")]
189    pub bias_huddle: i32,
190    /// 1 단계 가산량 (가격 단위, Price internal representation)
191    #[prost(int64, tag="6")]
192    pub bias_unit: i64,
193    /// 누적 상한 절댓값 (가격 단위, Price internal representation)
194    #[prost(int64, tag="7")]
195    pub max_bias: i64,
196}
197/// 통합 포지션 관리 설정 (soft rebalance + hard limit)
198#[allow(clippy::derive_partial_eq_without_eq)]
199#[derive(Clone, Copy, PartialEq, ::prost::Message)]
200pub struct MarketMakingExposureBalancer {
201    /// 활성화 여부
202    #[prost(bool, tag="1")]
203    pub enabled: bool,
204    /// soft zone: 이 배수부터 soft rebalance 발동
205    #[prost(int32, tag="2")]
206    pub trigger_multiple: i32,
207    /// 단계당 가격 중심 이동 틱 수
208    #[prost(int32, tag="3")]
209    pub price_skew_ticks: i32,
210    /// hard zone: 이 배수에서 같은 방향 수량 0 (구 hard_limit_max 대체)
211    #[prost(int32, tag="4")]
212    pub limit_multiple: i32,
213    /// opportunistic close 기능 활성화 여부
214    #[prost(bool, tag="5")]
215    pub opportunistic_enabled: bool,
216}
217/// 순포지션 수량 한도 설정 (방향별 호가 차단)
218#[allow(clippy::derive_partial_eq_without_eq)]
219#[derive(Clone, Copy, PartialEq, ::prost::Message)]
220pub struct MarketMakingQuantityLimit {
221    /// 순매수(롱) 상한. net(매수체결-매도체결) >= 이 값이면 매수 호가 차단. 0=비활성
222    #[prost(int64, tag="1")]
223    pub max_bid_quantity: i64,
224    /// 순매도(숏) 상한. net <= -이 값이면 매도 호가 차단. 0=비활성
225    #[prost(int64, tag="2")]
226    pub max_ask_quantity: i64,
227}
228// ============================================================================
229// Request/Response Messages
230// ============================================================================
231
232/// ListMarketMaking
233#[allow(clippy::derive_partial_eq_without_eq)]
234#[derive(Clone, PartialEq, ::prost::Message)]
235pub struct ListMarketMakingRequest {
236    /// 페이지 크기 (optional)
237    #[prost(uint32, optional, tag="1")]
238    pub page_size: ::core::option::Option<u32>,
239    /// 페이지 토큰 (optional)
240    #[prost(string, optional, tag="2")]
241    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
242}
243#[allow(clippy::derive_partial_eq_without_eq)]
244#[derive(Clone, PartialEq, ::prost::Message)]
245pub struct ListMarketMakingResponse {
246    /// 등록된 MM 목록
247    #[prost(message, repeated, tag="1")]
248    pub entries: ::prost::alloc::vec::Vec<MarketMaking>,
249    /// 다음 페이지 토큰
250    #[prost(string, tag="2")]
251    pub next_page_token: ::prost::alloc::string::String,
252}
253/// GetMarketMaking
254#[allow(clippy::derive_partial_eq_without_eq)]
255#[derive(Clone, PartialEq, ::prost::Message)]
256pub struct GetMarketMakingRequest {
257    /// ISIN 심볼
258    #[prost(string, tag="1")]
259    pub symbol: ::prost::alloc::string::String,
260}
261/// GetMarketMakingStatus
262#[allow(clippy::derive_partial_eq_without_eq)]
263#[derive(Clone, PartialEq, ::prost::Message)]
264pub struct GetMarketMakingStatusRequest {
265    /// ISIN 심볼
266    #[prost(string, tag="1")]
267    pub symbol: ::prost::alloc::string::String,
268}
269/// StartMarketMaking
270#[allow(clippy::derive_partial_eq_without_eq)]
271#[derive(Clone, PartialEq, ::prost::Message)]
272pub struct StartMarketMakingRequest {
273    /// ISIN 심볼
274    #[prost(string, tag="1")]
275    pub symbol: ::prost::alloc::string::String,
276    /// MM 설정 오버라이드 (optional, 없으면 기본 설정 사용)
277    #[prost(message, optional, tag="2")]
278    pub config: ::core::option::Option<MarketMakingConfiguration>,
279}
280#[allow(clippy::derive_partial_eq_without_eq)]
281#[derive(Clone, PartialEq, ::prost::Message)]
282pub struct StartMarketMakingResponse {
283    /// 시작된 MM 상태
284    #[prost(enumeration="MarketMakingState", tag="1")]
285    pub state: i32,
286    /// 메시지
287    #[prost(string, tag="2")]
288    pub message: ::prost::alloc::string::String,
289}
290/// StopMarketMaking
291#[allow(clippy::derive_partial_eq_without_eq)]
292#[derive(Clone, PartialEq, ::prost::Message)]
293pub struct StopMarketMakingRequest {
294    /// ISIN 심볼
295    #[prost(string, tag="1")]
296    pub symbol: ::prost::alloc::string::String,
297}
298#[allow(clippy::derive_partial_eq_without_eq)]
299#[derive(Clone, PartialEq, ::prost::Message)]
300pub struct StopMarketMakingResponse {
301    /// 메시지
302    #[prost(string, tag="1")]
303    pub message: ::prost::alloc::string::String,
304}
305/// ResetMarketMaking
306#[allow(clippy::derive_partial_eq_without_eq)]
307#[derive(Clone, PartialEq, ::prost::Message)]
308pub struct ResetMarketMakingRequest {
309    /// ISIN 심볼 (빈 문자열이면 전체 리셋)
310    #[prost(string, tag="1")]
311    pub symbol: ::prost::alloc::string::String,
312}
313#[allow(clippy::derive_partial_eq_without_eq)]
314#[derive(Clone, PartialEq, ::prost::Message)]
315pub struct ResetMarketMakingResponse {
316    /// 리셋된 심볼 수
317    #[prost(int32, tag="1")]
318    pub reset_count: i32,
319    /// 메시지
320    #[prost(string, tag="2")]
321    pub message: ::prost::alloc::string::String,
322}
323/// UpdateMarketMakingConfig
324/// NOTE: config 내 pricing, fund_code, tick_size, depth 필드는 이 요청으로 변경할 수 없습니다.
325/// 해당 필드들은 서버에서 무시됩니다.
326#[allow(clippy::derive_partial_eq_without_eq)]
327#[derive(Clone, PartialEq, ::prost::Message)]
328pub struct UpdateMarketMakingConfigRequest {
329    /// ISIN 심볼
330    #[prost(string, tag="1")]
331    pub symbol: ::prost::alloc::string::String,
332    /// 업데이트할 설정 (전체 교체)
333    /// pricing, fund_code, tick_size, depth 필드는 read-only이며 무시됩니다.
334    #[prost(message, optional, tag="2")]
335    pub config: ::core::option::Option<MarketMakingConfiguration>,
336}
337/// StreamMarketMakingStatus
338#[allow(clippy::derive_partial_eq_without_eq)]
339#[derive(Clone, PartialEq, ::prost::Message)]
340pub struct StreamMarketMakingStatusRequest {
341    /// ISIN 심볼 (빈 문자열이면 전체 스트리밍)
342    #[prost(string, tag="1")]
343    pub symbol: ::prost::alloc::string::String,
344}
345/// UpdateMarketMaking
346#[allow(clippy::derive_partial_eq_without_eq)]
347#[derive(Clone, PartialEq, ::prost::Message)]
348pub struct UpdateMarketMakingRequest {
349    /// ISIN 심볼
350    #[prost(string, tag="1")]
351    pub symbol: ::prost::alloc::string::String,
352    /// 업데이트할 MM 설정
353    #[prost(message, optional, tag="2")]
354    pub config: ::core::option::Option<MarketMakingConfiguration>,
355}
356/// GetMarketMakingOrderbook / StreamMarketMakingOrderbook
357#[allow(clippy::derive_partial_eq_without_eq)]
358#[derive(Clone, PartialEq, ::prost::Message)]
359pub struct GetMarketMakingOrderbookRequest {
360    /// ISIN 심볼
361    #[prost(string, tag="1")]
362    pub symbol: ::prost::alloc::string::String,
363}
364/// MM 전용 주문장 데이터
365#[allow(clippy::derive_partial_eq_without_eq)]
366#[derive(Clone, PartialEq, ::prost::Message)]
367pub struct MarketMakingOrderbookData {
368    /// 매수 호가 목록 (string 표현)
369    #[prost(string, repeated, tag="1")]
370    pub bid_prices: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
371    /// 매도 호가 목록 (string 표현)
372    #[prost(string, repeated, tag="2")]
373    pub ask_prices: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
374    /// 매수 수량 목록
375    #[prost(int64, repeated, tag="3")]
376    pub bid_quantities: ::prost::alloc::vec::Vec<i64>,
377    /// 매도 수량 목록
378    #[prost(int64, repeated, tag="4")]
379    pub ask_quantities: ::prost::alloc::vec::Vec<i64>,
380}
381// ============================================================================
382// MM 엔진 런타임 상태
383// ============================================================================
384
385/// Momentum 런타임 상태
386#[allow(clippy::derive_partial_eq_without_eq)]
387#[derive(Clone, PartialEq, ::prost::Message)]
388pub struct MomentumState {
389    /// 현재 모멘텀 방향 ("none" / "up" / "down")
390    #[prost(string, tag="1")]
391    pub direction: ::prost::alloc::string::String,
392    /// 현재 bid 가격 조정값 (Price internal representation)
393    #[prost(int64, tag="2")]
394    pub bid_adjustment: i64,
395    /// 현재 ask 가격 조정값 (Price internal representation)
396    #[prost(int64, tag="3")]
397    pub ask_adjustment: i64,
398    /// 원시 틱 변화량 (부호 포함, 모니터링용)
399    #[prost(double, tag="4")]
400    pub raw_ticks: f64,
401}
402/// Trade Analyzer 런타임 상태 (갤럭티코 SingleTradeAnalyzer 포팅)
403#[allow(clippy::derive_partial_eq_without_eq)]
404#[derive(Clone, Copy, PartialEq, ::prost::Message)]
405pub struct TradeAnalyzerState {
406    /// 매수/매도 누적 비율 ∈ \[-1, +1\]. 매수 우세 +.
407    #[prost(double, tag="1")]
408    pub ratio: f64,
409    /// 체결 강도 ∈ \[0, 1\]. ratio 방향 가중 호가창 잔량 대비 누적 체결량.
410    #[prost(double, tag="2")]
411    pub strength: f64,
412    /// 부호 있는 누적 체결량 (매수 우세 +)
413    #[prost(int64, tag="3")]
414    pub net_amount: i64,
415    /// 절댓값 누적 체결량
416    #[prost(int64, tag="4")]
417    pub total_amount: i64,
418    /// 5단 호가 평균 매수 잔량
419    #[prost(double, tag="5")]
420    pub avg_bid_qty: f64,
421    /// 5단 호가 평균 매도 잔량
422    #[prost(double, tag="6")]
423    pub avg_ask_qty: f64,
424    /// 마지막 시장 체결 시각 (일중 마이크로초). 체결 없으면 absent.
425    #[prost(int64, optional, tag="7")]
426    pub last_trade_at_us: ::core::option::Option<i64>,
427    /// 누적 시장 체결 건수
428    #[prost(int64, tag="8")]
429    pub trade_count: i64,
430}
431/// MarketBias 런타임 상태 (갤럭티코 DecoByTradeAcc 포팅)
432#[allow(clippy::derive_partial_eq_without_eq)]
433#[derive(Clone, Copy, PartialEq, ::prost::Message)]
434pub struct MarketBiasState {
435    /// 누적 영구 편향 (가격 단위, Price internal representation)
436    #[prost(int64, tag="1")]
437    pub accumulated_bias: i64,
438    /// 마지막 평가 점수 (0~100)
439    #[prost(int32, tag="2")]
440    pub last_score: i32,
441    /// 누적 평가 횟수
442    #[prost(int64, tag="3")]
443    pub eval_count: i64,
444}
445/// 순노출 및 재고 균형 런타임 상태 (ExposureGuard + InventoryBalancer 통합)
446#[allow(clippy::derive_partial_eq_without_eq)]
447#[derive(Clone, Copy, PartialEq, ::prost::Message)]
448pub struct ExposureBalancerState {
449    /// 현재 순노출 수량
450    #[prost(int64, tag="1")]
451    pub net_exposure: i64,
452    /// 현재 가격 중심 이동 틱 수
453    #[prost(int32, tag="2")]
454    pub price_shift_ticks: i32,
455    /// 현재 bid 수량 스케일 (0.0 ~ 1.0)
456    #[prost(double, tag="3")]
457    pub bid_scale: f64,
458    /// 현재 ask 수량 스케일 (0.0 ~ 1.0)
459    #[prost(double, tag="4")]
460    pub ask_scale: f64,
461}
462/// MM 엔진 런타임 상태 델타 메시지.
463/// 스트리밍 시 set된 필드만 변경분을 의미하며, 변경이 없는 필드는 생략된다.
464/// symbol은 항상 포함된다.
465#[allow(clippy::derive_partial_eq_without_eq)]
466#[derive(Clone, PartialEq, ::prost::Message)]
467pub struct MmStateUpdate {
468    /// ISIN 심볼 (항상 포함)
469    #[prost(string, tag="1")]
470    pub symbol: ::prost::alloc::string::String,
471    /// MM 상태 (변경 시에만 포함)
472    #[prost(enumeration="MarketMakingState", optional, tag="2")]
473    pub state: ::core::option::Option<i32>,
474    /// Momentum 상태 (변경 시에만 포함)
475    #[prost(message, optional, tag="3")]
476    pub momentum: ::core::option::Option<MomentumState>,
477    /// Trade Analyzer 상태 (변경 시에만 포함)
478    #[prost(message, optional, tag="4")]
479    pub trade_analyzer: ::core::option::Option<TradeAnalyzerState>,
480    /// 순노출 및 재고 균형 상태 (변경 시에만 포함)
481    #[prost(message, optional, tag="5")]
482    pub exposure_balancer: ::core::option::Option<ExposureBalancerState>,
483    /// MarketBias 상태 (변경 시에만 포함)
484    #[prost(message, optional, tag="6")]
485    pub market_bias: ::core::option::Option<MarketBiasState>,
486    /// 현재 MM 매도 호가 (변경 시에만 포함, None이면 생략)
487    #[prost(string, optional, tag="7")]
488    pub ask_quote: ::core::option::Option<::prost::alloc::string::String>,
489    /// 현재 MM 매수 호가 (변경 시에만 포함, None이면 생략)
490    #[prost(string, optional, tag="8")]
491    pub bid_quote: ::core::option::Option<::prost::alloc::string::String>,
492    /// 현재 적용 중인 bid offset (변경 시에만 포함, None이면 생략)
493    #[prost(string, optional, tag="9")]
494    pub bid_offset: ::core::option::Option<::prost::alloc::string::String>,
495    /// 현재 적용 중인 ask offset (변경 시에만 포함, None이면 생략)
496    #[prost(string, optional, tag="10")]
497    pub ask_offset: ::core::option::Option<::prost::alloc::string::String>,
498    /// 호가 산출 단계별 분해 (변경 시에만 포함, 디버깅/튜닝용)
499    #[prost(message, optional, tag="11")]
500    pub decomposition: ::core::option::Option<SpreadDecomposition>,
501    /// 현재 적용 중인 F2M(Fit to Market) 평행 skew, Price 내부표현값(string). 변경 시에만 포함, None이면 생략. 0 = 미적용/해제
502    #[prost(string, optional, tag="12")]
503    pub f2m_shift: ::core::option::Option<::prost::alloc::string::String>,
504}
505/// 호가 산출 단계별 contribution. 최종 호가 = base + momentum + exposure_shift + market_bias.
506#[allow(clippy::derive_partial_eq_without_eq)]
507#[derive(Clone, Copy, PartialEq, ::prost::Message)]
508pub struct SpreadDecomposition {
509    /// Pricing 직후 bid (NAV + bid_adjustment, Price internal representation)
510    #[prost(int64, tag="1")]
511    pub base_bid: i64,
512    /// Pricing 직후 ask (NAV + ask_adjustment, Price internal representation)
513    #[prost(int64, tag="2")]
514    pub base_ask: i64,
515    /// Momentum 가산량 (부호 포함, bid·ask 동일, Price internal representation)
516    #[prost(int64, tag="3")]
517    pub momentum_shift: i64,
518    /// ExposureSkew 가산량 (부호 포함, bid·ask 동일, Price internal representation)
519    #[prost(int64, tag="4")]
520    pub exposure_shift: i64,
521    /// MarketBias 영구 편향 (부호 포함, bid·ask 동일, Price internal representation)
522    #[prost(int64, tag="5")]
523    pub market_bias_shift: i64,
524    /// 정렬 후 최종 bid (Price internal representation)
525    #[prost(int64, tag="6")]
526    pub final_bid: i64,
527    /// 정렬 후 최종 ask (Price internal representation)
528    #[prost(int64, tag="7")]
529    pub final_ask: i64,
530}
531// ============================================================================
532// MM 엔진 상태 Request Messages
533// ============================================================================
534
535/// StreamMmStateUpdate
536#[allow(clippy::derive_partial_eq_without_eq)]
537#[derive(Clone, PartialEq, ::prost::Message)]
538pub struct StreamMmStateUpdateRequest {
539    /// ISIN 심볼 (빈 문자열이면 전체 스트리밍)
540    #[prost(string, tag="1")]
541    pub symbol: ::prost::alloc::string::String,
542}
543/// FitToMarket
544#[allow(clippy::derive_partial_eq_without_eq)]
545#[derive(Clone, PartialEq, ::prost::Message)]
546pub struct FitToMarketRequest {
547    /// ISIN 심볼
548    #[prost(string, tag="1")]
549    pub symbol: ::prost::alloc::string::String,
550}
551#[allow(clippy::derive_partial_eq_without_eq)]
552#[derive(Clone, PartialEq, ::prost::Message)]
553pub struct FitToMarketResponse {
554    /// 메시지
555    #[prost(string, tag="1")]
556    pub message: ::prost::alloc::string::String,
557}
558/// ClearFitToMarket
559#[allow(clippy::derive_partial_eq_without_eq)]
560#[derive(Clone, PartialEq, ::prost::Message)]
561pub struct ClearFitToMarketRequest {
562    /// ISIN 심볼
563    #[prost(string, tag="1")]
564    pub symbol: ::prost::alloc::string::String,
565}
566#[allow(clippy::derive_partial_eq_without_eq)]
567#[derive(Clone, PartialEq, ::prost::Message)]
568pub struct ClearFitToMarketResponse {
569    /// 메시지
570    #[prost(string, tag="1")]
571    pub message: ::prost::alloc::string::String,
572}
573// ============================================================================
574// Enums
575// ============================================================================
576
577/// MM 상태
578#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
579#[repr(i32)]
580pub enum MarketMakingState {
581    Unspecified = 0,
582    /// 대기
583    Idle = 1,
584    /// 활성
585    Running = 2,
586}
587impl MarketMakingState {
588    /// String value of the enum field names used in the ProtoBuf definition.
589    ///
590    /// The values are not transformed in any way and thus are considered stable
591    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
592    pub fn as_str_name(&self) -> &'static str {
593        match self {
594            MarketMakingState::Unspecified => "MARKET_MAKING_STATE_UNSPECIFIED",
595            MarketMakingState::Idle => "MARKET_MAKING_STATE_IDLE",
596            MarketMakingState::Running => "MARKET_MAKING_STATE_RUNNING",
597        }
598    }
599    /// Creates an enum from field names used in the ProtoBuf definition.
600    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
601        match value {
602            "MARKET_MAKING_STATE_UNSPECIFIED" => Some(Self::Unspecified),
603            "MARKET_MAKING_STATE_IDLE" => Some(Self::Idle),
604            "MARKET_MAKING_STATE_RUNNING" => Some(Self::Running),
605            _ => None,
606        }
607    }
608}
609include!("kdo.v1.mm.tonic.rs");
610include!("kdo.v1.mm.serde.rs");
611// @@protoc_insertion_point(module)