Skip to main content

ids_apis/
kdo.v1.vi_arbitrage.rs

1// @generated
2// This file is @generated by prost-build.
3// ============================================================================
4// Service Status
5// ============================================================================
6
7/// VI Arbitrage 서비스 상태
8#[allow(clippy::derive_partial_eq_without_eq)]
9#[derive(Clone, Copy, PartialEq, ::prost::Message)]
10pub struct ViArbitrageStatus {
11    /// 서비스 활성화 여부
12    #[prost(bool, tag="1")]
13    pub enabled: bool,
14    /// Basis 임계값 (bp 단위)
15    #[prost(int64, tag="2")]
16    pub basis_threshold_bp: i64,
17    /// 현재 VI 종목 수
18    #[prost(int32, tag="3")]
19    pub vi_stock_count: i32,
20    /// 금일 트리거 횟수
21    #[prost(int32, tag="4")]
22    pub trigger_count_today: i32,
23    /// 서비스 시작 시간
24    #[prost(message, optional, tag="5")]
25    pub start_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
26}
27// ============================================================================
28// VI Stock
29// ============================================================================
30
31/// 현재 VI 상태인 종목 정보
32#[allow(clippy::derive_partial_eq_without_eq)]
33#[derive(Clone, PartialEq, ::prost::Message)]
34pub struct ViStock {
35    /// 주식 심볼 (예: "A005930")
36    #[prost(string, tag="1")]
37    pub symbol: ::prost::alloc::string::String,
38    /// VI 세션 종류 ("vi_static", "vi_dynamic")
39    #[prost(string, tag="2")]
40    pub vi_session: ::prost::alloc::string::String,
41    /// VI 진입 시간
42    #[prost(message, optional, tag="3")]
43    pub vi_start_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
44    /// VI 예체가
45    #[prost(int64, tag="4")]
46    pub krx_estimated_price: i64,
47    /// 대응 주식선물 심볼 (없으면 빈 문자열)
48    #[prost(string, tag="5")]
49    pub futures_symbol: ::prost::alloc::string::String,
50    /// 현재 NXT 가격 (있으면)
51    #[prost(int64, optional, tag="6")]
52    pub nxt_price: ::core::option::Option<i64>,
53    /// 현재 선물 가격 (있으면)
54    #[prost(int64, optional, tag="7")]
55    pub futures_price: ::core::option::Option<i64>,
56    /// 현재 Basis (bp)
57    #[prost(int64, optional, tag="8")]
58    pub current_basis_bp: ::core::option::Option<i64>,
59    /// VI 경과 시간 (ms)
60    #[prost(int64, tag="9")]
61    pub elapsed_ms: i64,
62}
63// ============================================================================
64// Trigger History
65// ============================================================================
66
67/// VI Arbitrage 트리거 이력
68#[allow(clippy::derive_partial_eq_without_eq)]
69#[derive(Clone, PartialEq, ::prost::Message)]
70pub struct TriggerRecord {
71    /// 트리거 ID (auto-increment)
72    #[prost(int64, tag="1")]
73    pub id: i64,
74    /// 주식 심볼
75    #[prost(string, tag="2")]
76    pub symbol: ::prost::alloc::string::String,
77    /// 주식선물 심볼
78    #[prost(string, tag="3")]
79    pub futures_symbol: ::prost::alloc::string::String,
80    /// 트리거 시점 NXT 가격
81    #[prost(int64, tag="4")]
82    pub nxt_price: i64,
83    /// 트리거 시점 선물 가격
84    #[prost(int64, tag="5")]
85    pub futures_price: i64,
86    /// 트리거 시점 Basis (bp)
87    #[prost(int64, tag="6")]
88    pub basis_bp: i64,
89    /// 트리거 방향 (LONG: NXT 매수/선물 매도, SHORT: NXT 매도/선물 매수)
90    #[prost(enumeration="TriggerDirection", tag="7")]
91    pub direction: i32,
92    /// 트리거 시간
93    #[prost(message, optional, tag="8")]
94    pub trigger_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
95    /// 트리거 결과 (주문 성공 여부)
96    #[prost(enumeration="TriggerResult", tag="9")]
97    pub result: i32,
98    /// 에러 메시지 (실패 시)
99    #[prost(string, tag="10")]
100    pub error_message: ::prost::alloc::string::String,
101}
102// ============================================================================
103// Events (Streaming)
104// ============================================================================
105
106/// VI 이벤트 (스트리밍용)
107#[allow(clippy::derive_partial_eq_without_eq)]
108#[derive(Clone, PartialEq, ::prost::Message)]
109pub struct ViEvent {
110    /// 이벤트 발생 시간
111    #[prost(message, optional, tag="1")]
112    pub event_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
113    /// 이벤트 타입
114    #[prost(oneof="vi_event::Event", tags="2, 3, 4, 5")]
115    pub event: ::core::option::Option<vi_event::Event>,
116}
117/// Nested message and enum types in `ViEvent`.
118pub mod vi_event {
119    /// 이벤트 타입
120    #[allow(clippy::derive_partial_eq_without_eq)]
121#[derive(Clone, PartialEq, ::prost::Oneof)]
122    pub enum Event {
123        /// VI 진입 이벤트
124        #[prost(message, tag="2")]
125        ViEntered(super::ViEnteredEvent),
126        /// VI 해제 이벤트
127        #[prost(message, tag="3")]
128        ViExited(super::ViExitedEvent),
129        /// 트리거 이벤트
130        #[prost(message, tag="4")]
131        Triggered(super::TriggeredEvent),
132        /// Basis 임계값 근접 이벤트 (경고)
133        #[prost(message, tag="5")]
134        BasisWarning(super::BasisWarningEvent),
135    }
136}
137/// VI 진입 이벤트
138#[allow(clippy::derive_partial_eq_without_eq)]
139#[derive(Clone, PartialEq, ::prost::Message)]
140pub struct ViEnteredEvent {
141    /// 주식 심볼
142    #[prost(string, tag="1")]
143    pub symbol: ::prost::alloc::string::String,
144    /// VI 세션 종류
145    #[prost(string, tag="2")]
146    pub vi_session: ::prost::alloc::string::String,
147    /// VI 진입 전 KRX 가격
148    #[prost(int64, tag="3")]
149    pub krx_last_price: i64,
150    /// 대응 주식선물 심볼
151    #[prost(string, tag="4")]
152    pub futures_symbol: ::prost::alloc::string::String,
153}
154/// VI 해제 이벤트
155#[allow(clippy::derive_partial_eq_without_eq)]
156#[derive(Clone, PartialEq, ::prost::Message)]
157pub struct ViExitedEvent {
158    /// 주식 심볼
159    #[prost(string, tag="1")]
160    pub symbol: ::prost::alloc::string::String,
161    /// VI 지속 시간 (ms)
162    #[prost(int64, tag="2")]
163    pub duration_ms: i64,
164}
165/// 트리거 발동 이벤트
166#[allow(clippy::derive_partial_eq_without_eq)]
167#[derive(Clone, PartialEq, ::prost::Message)]
168pub struct TriggeredEvent {
169    /// 트리거 정보
170    #[prost(message, optional, tag="1")]
171    pub trigger: ::core::option::Option<TriggerRecord>,
172}
173/// Basis 경고 이벤트 (임계값의 80% 이상일 때)
174#[allow(clippy::derive_partial_eq_without_eq)]
175#[derive(Clone, PartialEq, ::prost::Message)]
176pub struct BasisWarningEvent {
177    /// 주식 심볼
178    #[prost(string, tag="1")]
179    pub symbol: ::prost::alloc::string::String,
180    /// 현재 Basis (bp)
181    #[prost(int64, tag="2")]
182    pub current_basis_bp: i64,
183    /// 임계값 (bp)
184    #[prost(int64, tag="3")]
185    pub threshold_bp: i64,
186    /// 임계값 대비 비율 (%)
187    #[prost(double, tag="4")]
188    pub threshold_ratio: f64,
189}
190/// Basis 업데이트 (스트리밍용)
191#[allow(clippy::derive_partial_eq_without_eq)]
192#[derive(Clone, PartialEq, ::prost::Message)]
193pub struct BasisUpdate {
194    /// 업데이트 시간
195    #[prost(message, optional, tag="1")]
196    pub update_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
197    /// 주식 심볼
198    #[prost(string, tag="2")]
199    pub symbol: ::prost::alloc::string::String,
200    /// NXT 가격
201    #[prost(int64, tag="3")]
202    pub nxt_price: i64,
203    /// 선물 가격
204    #[prost(int64, tag="4")]
205    pub futures_price: i64,
206    /// Basis (bp)
207    #[prost(int64, tag="5")]
208    pub basis_bp: i64,
209    /// 임계값 대비 비율 (%)
210    #[prost(double, tag="6")]
211    pub threshold_ratio: f64,
212}
213// ============================================================================
214// Request/Response Messages
215// ============================================================================
216
217#[allow(clippy::derive_partial_eq_without_eq)]
218#[derive(Clone, Copy, PartialEq, ::prost::Message)]
219pub struct GetStatusRequest {
220}
221#[allow(clippy::derive_partial_eq_without_eq)]
222#[derive(Clone, PartialEq, ::prost::Message)]
223pub struct ListViStocksRequest {
224    /// 페이지 크기 (optional, default: 100)
225    #[prost(int32, optional, tag="1")]
226    pub page_size: ::core::option::Option<i32>,
227    /// 페이지 토큰
228    #[prost(string, optional, tag="2")]
229    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
230}
231#[allow(clippy::derive_partial_eq_without_eq)]
232#[derive(Clone, PartialEq, ::prost::Message)]
233pub struct ListViStocksResponse {
234    /// VI 종목 목록
235    #[prost(message, repeated, tag="1")]
236    pub vi_stocks: ::prost::alloc::vec::Vec<ViStock>,
237    /// 다음 페이지 토큰
238    #[prost(string, tag="2")]
239    pub next_page_token: ::prost::alloc::string::String,
240}
241#[allow(clippy::derive_partial_eq_without_eq)]
242#[derive(Clone, PartialEq, ::prost::Message)]
243pub struct ListTriggerHistoryRequest {
244    /// 페이지 크기 (optional, default: 50)
245    #[prost(int32, optional, tag="1")]
246    pub page_size: ::core::option::Option<i32>,
247    /// 페이지 토큰
248    #[prost(string, optional, tag="2")]
249    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
250    /// 시작 시간 필터 (이후)
251    #[prost(message, optional, tag="3")]
252    pub start_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
253    /// 종료 시간 필터 (이전)
254    #[prost(message, optional, tag="4")]
255    pub end_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
256    /// 심볼 필터 (특정 종목만)
257    #[prost(string, optional, tag="5")]
258    pub symbol: ::core::option::Option<::prost::alloc::string::String>,
259}
260#[allow(clippy::derive_partial_eq_without_eq)]
261#[derive(Clone, PartialEq, ::prost::Message)]
262pub struct ListTriggerHistoryResponse {
263    /// 트리거 이력
264    #[prost(message, repeated, tag="1")]
265    pub triggers: ::prost::alloc::vec::Vec<TriggerRecord>,
266    /// 다음 페이지 토큰
267    #[prost(string, tag="2")]
268    pub next_page_token: ::prost::alloc::string::String,
269    /// 총 건수
270    #[prost(int32, tag="3")]
271    pub total_count: i32,
272}
273#[allow(clippy::derive_partial_eq_without_eq)]
274#[derive(Clone, PartialEq, ::prost::Message)]
275pub struct StreamViEventsRequest {
276    /// 특정 심볼만 구독 (없으면 전체)
277    #[prost(string, repeated, tag="1")]
278    pub symbols: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
279    /// Basis 경고 이벤트 포함 여부 (기본: true)
280    #[prost(bool, optional, tag="2")]
281    pub include_basis_warning: ::core::option::Option<bool>,
282}
283#[allow(clippy::derive_partial_eq_without_eq)]
284#[derive(Clone, PartialEq, ::prost::Message)]
285pub struct StreamBasisRequest {
286    /// 특정 심볼만 구독 (없으면 현재 VI 종목 전체)
287    #[prost(string, repeated, tag="1")]
288    pub symbols: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
289    /// 업데이트 최소 간격 (ms, 기본: 100)
290    #[prost(int32, optional, tag="2")]
291    pub min_interval_ms: ::core::option::Option<i32>,
292}
293/// 트리거 방향
294#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
295#[repr(i32)]
296pub enum TriggerDirection {
297    Unspecified = 0,
298    /// NXT 매수, 선물 매도 (NXT < 선물)
299    Long = 1,
300    /// NXT 매도, 선물 매수 (NXT > 선물)
301    Short = 2,
302}
303impl TriggerDirection {
304    /// String value of the enum field names used in the ProtoBuf definition.
305    ///
306    /// The values are not transformed in any way and thus are considered stable
307    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
308    pub fn as_str_name(&self) -> &'static str {
309        match self {
310            TriggerDirection::Unspecified => "TRIGGER_DIRECTION_UNSPECIFIED",
311            TriggerDirection::Long => "TRIGGER_DIRECTION_LONG",
312            TriggerDirection::Short => "TRIGGER_DIRECTION_SHORT",
313        }
314    }
315    /// Creates an enum from field names used in the ProtoBuf definition.
316    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
317        match value {
318            "TRIGGER_DIRECTION_UNSPECIFIED" => Some(Self::Unspecified),
319            "TRIGGER_DIRECTION_LONG" => Some(Self::Long),
320            "TRIGGER_DIRECTION_SHORT" => Some(Self::Short),
321            _ => None,
322        }
323    }
324}
325/// 트리거 결과
326#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
327#[repr(i32)]
328pub enum TriggerResult {
329    Unspecified = 0,
330    /// 주문 성공
331    Success = 1,
332    /// 주문 실패
333    Failed = 2,
334    /// 스킵됨 (쿨다운 등)
335    Skipped = 3,
336}
337impl TriggerResult {
338    /// String value of the enum field names used in the ProtoBuf definition.
339    ///
340    /// The values are not transformed in any way and thus are considered stable
341    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
342    pub fn as_str_name(&self) -> &'static str {
343        match self {
344            TriggerResult::Unspecified => "TRIGGER_RESULT_UNSPECIFIED",
345            TriggerResult::Success => "TRIGGER_RESULT_SUCCESS",
346            TriggerResult::Failed => "TRIGGER_RESULT_FAILED",
347            TriggerResult::Skipped => "TRIGGER_RESULT_SKIPPED",
348        }
349    }
350    /// Creates an enum from field names used in the ProtoBuf definition.
351    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
352        match value {
353            "TRIGGER_RESULT_UNSPECIFIED" => Some(Self::Unspecified),
354            "TRIGGER_RESULT_SUCCESS" => Some(Self::Success),
355            "TRIGGER_RESULT_FAILED" => Some(Self::Failed),
356            "TRIGGER_RESULT_SKIPPED" => Some(Self::Skipped),
357            _ => None,
358        }
359    }
360}
361include!("kdo.v1.vi_arbitrage.tonic.rs");
362include!("kdo.v1.vi_arbitrage.serde.rs");
363// @@protoc_insertion_point(module)