// @generated
// This file is @generated by prost-build.
// ============================================================================
// Config Messages
// ============================================================================

/// Momentum Signal 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketSnipingMomentumSignal {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 모멘텀 샘플 유지 시간 창 (ms)
    #[prost(uint64, tag="2")]
    pub window_ms: u64,
    /// 연속 모멘텀 정규화 기준 틱 수
    #[prost(int32, tag="3")]
    pub trigger_ticks: i32,
    /// 최대 신호 틱 수
    #[prost(int32, tag="4")]
    pub max_signal_ticks: i32,
    /// 신호 민감도
    #[prost(double, tag="5")]
    pub sensitivity: f64,
    /// 인버스 방향 해석 여부
    #[prost(bool, tag="6")]
    pub is_opposite: bool,
}
/// 진입 정책
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketSnipingEntryPolicy {
    /// 최소 신호 강도
    #[prost(double, tag="1")]
    pub min_signal_strength: f64,
    /// 재진입 쿨다운 (ms)
    #[prost(uint64, tag="2")]
    pub cooldown_ms: u64,
    /// 최대 진입 수량 (0 = 제한 없음)
    #[prost(int64, tag="3")]
    pub max_entry_quantity: i64,
}
/// 조건부 청산 정책 (ConditionalExitPolicy)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketSnipingConditionalExitPolicy {
    /// 신호 종료 시 청산
    #[prost(bool, tag="1")]
    pub exit_on_signal_end: bool,
    /// 역방향 신호 시 청산
    #[prost(bool, tag="2")]
    pub exit_on_reverse_signal: bool,
    /// 최대 보유 시간 (ms, 0 = 제한 없음)
    #[prost(uint64, tag="3")]
    pub max_holding_ms: u64,
    /// 최소 수익 틱 (0 = 제한 없음)
    #[prost(int32, tag="4")]
    pub min_profit_ticks: i32,
    /// 최대 손실 틱 (0 = 제한 없음)
    #[prost(int32, tag="5")]
    pub max_loss_ticks: i32,
}
/// 청산 정책 (oneof: 항상 청산 | 조건부 청산)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketSnipingExitPolicy {
    #[prost(oneof="market_sniping_exit_policy::Policy", tags="1, 2")]
    pub policy: ::core::option::Option<market_sniping_exit_policy::Policy>,
}
/// Nested message and enum types in `MarketSnipingExitPolicy`.
pub mod market_sniping_exit_policy {
    #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
    pub enum Policy {
        /// 항상 전량 청산
        #[prost(bool, tag="1")]
        AlwaysExit(bool),
        /// 조건부 청산 정책
        #[prost(message, tag="2")]
        Conditional(super::MarketSnipingConditionalExitPolicy),
    }
}
/// 노출 균형 관리 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketSnipingExposureBalancer {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 부분 청산 최소 수량
    #[prost(int64, tag="2")]
    pub min_exit_quantity: i64,
    /// 부분 청산 비율 (0.0 ~ 1.0)
    #[prost(double, tag="3")]
    pub partial_exit_ratio: f64,
    /// 신호 종료 시 전량 강제 청산
    #[prost(bool, tag="4")]
    pub force_full_exit_on_signal_end: bool,
}
/// 사전 스크리닝 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct MarketSnipingScreening {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 최소 가격 (0 = 비활성)
    #[prost(int64, tag="2")]
    pub min_price: i64,
    /// 최대 가격 (0 = 비활성)
    #[prost(int64, tag="3")]
    pub max_price: i64,
}
/// Market Sniping 메인 설정
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketSnipingConfig {
    /// 활성화 여부
    #[prost(bool, tag="1")]
    pub enabled: bool,
    /// 펀드 코드
    #[prost(string, tag="2")]
    pub fund_code: ::prost::alloc::string::String,
    /// Tick size (Price internal representation)
    #[prost(int64, tag="3")]
    pub tick_size: i64,
    /// Pricing 전략
    #[prost(enumeration="SnipingPricing", tag="4")]
    pub pricing: i32,
    /// bid 가격 조정값 (Price internal representation)
    #[prost(int64, tag="5")]
    pub bid_adjustment: i64,
    /// ask 가격 조정값 (Price internal representation)
    #[prost(int64, tag="6")]
    pub ask_adjustment: i64,
    /// 기본 주문 수량
    #[prost(int64, tag="7")]
    pub base_quantity: i64,
    /// Momentum Signal 설정
    #[prost(message, optional, tag="8")]
    pub momentum: ::core::option::Option<MarketSnipingMomentumSignal>,
    /// 진입 정책
    #[prost(message, optional, tag="9")]
    pub entry_policy: ::core::option::Option<MarketSnipingEntryPolicy>,
    /// 청산 정책
    #[prost(message, optional, tag="10")]
    pub exit_policy: ::core::option::Option<MarketSnipingExitPolicy>,
    /// 노출 균형 관리 설정
    #[prost(message, optional, tag="11")]
    pub exposure_balancer: ::core::option::Option<MarketSnipingExposureBalancer>,
    /// 스크리닝 설정
    #[prost(message, optional, tag="12")]
    pub screening: ::core::option::Option<MarketSnipingScreening>,
    /// 주문 실행 방식
    #[prost(enumeration="ExecutionPolicy", tag="13")]
    pub execution_policy: i32,
    /// 전략 종류
    #[prost(enumeration="StrategyKind", tag="14")]
    pub strategy: i32,
    /// 청산 주문 자동정정 방식
    #[prost(enumeration="super::common::AmendMethodType", tag="15")]
    pub exit_amend_method: i32,
}
/// NAV 설정 (ETF 기준가 계산용)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketSnipingNavConfig {
    /// ETF Pricing 방식 (EtfPricing enum name: "KrxPrevNav", "Intraday", etc.)
    #[prost(string, tag="1")]
    pub pricing: ::prost::alloc::string::String,
    /// ask 기준 조정값 (Price internal representation)
    #[prost(int64, tag="2")]
    pub ask_basis: i64,
    /// bid 기준 조정값 (Price internal representation)
    #[prost(int64, tag="3")]
    pub bid_basis: i64,
}
// ============================================================================
// Entry Messages
// ============================================================================

/// Market Sniping 항목 (config + nav_config)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketSnipingEntry {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// Market Sniping 설정
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketSnipingConfig>,
    /// NAV 설정
    #[prost(message, optional, tag="3")]
    pub nav_config: ::core::option::Option<MarketSnipingNavConfig>,
}
// ============================================================================
// Runtime State Messages
// ============================================================================

/// Market Sniping 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MarketSnipingStatusMessage {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 펀드 코드
    #[prost(string, tag="2")]
    pub fund_code: ::prost::alloc::string::String,
    /// 현재 상태
    #[prost(enumeration="MarketSnipingStatus", tag="3")]
    pub status: i32,
    /// 마지막 신호 시점 bid 가격
    #[prost(int64, tag="4")]
    pub last_signal_bid_price: i64,
    /// 마지막 신호 시점 ask 가격
    #[prost(int64, tag="5")]
    pub last_signal_ask_price: i64,
    /// 현재 오픈 수량
    #[prost(int64, tag="6")]
    pub open_quantity: i64,
    /// 상태 변경 사유 (optional)
    #[prost(string, tag="7")]
    pub reason: ::prost::alloc::string::String,
}
// ============================================================================
// Request/Response Messages
// ============================================================================

/// ListMarketSniping
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListMarketSnipingRequest {
    /// 페이지 크기 (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 ListMarketSnipingResponse {
    /// 등록된 Market Sniping 목록
    #[prost(message, repeated, tag="1")]
    pub entries: ::prost::alloc::vec::Vec<MarketSnipingEntry>,
    /// 다음 페이지 토큰
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// GetMarketSniping
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMarketSnipingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// CreateMarketSniping
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateMarketSnipingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// Market Sniping 설정
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketSnipingConfig>,
    /// NAV 설정
    #[prost(message, optional, tag="3")]
    pub nav_config: ::core::option::Option<MarketSnipingNavConfig>,
}
/// UpdateMarketSniping
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateMarketSnipingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 업데이트할 Market Sniping 설정
    #[prost(message, optional, tag="2")]
    pub config: ::core::option::Option<MarketSnipingConfig>,
    /// 업데이트할 NAV 설정
    #[prost(message, optional, tag="3")]
    pub nav_config: ::core::option::Option<MarketSnipingNavConfig>,
}
/// DeleteMarketSniping
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteMarketSnipingRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// StartMarketSniping
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StartMarketSnipingRequest {
    /// 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 StartMarketSnipingResponse {
    /// 시작 메시지
    #[prost(string, tag="1")]
    pub message: ::prost::alloc::string::String,
}
/// StopMarketSniping
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StopMarketSnipingRequest {
    /// 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 StopMarketSnipingResponse {
    /// 중지 메시지
    #[prost(string, tag="1")]
    pub message: ::prost::alloc::string::String,
}
/// GetMarketSnipingStatus
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMarketSnipingStatusRequest {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// StreamMarketSnipingStatus
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamMarketSnipingStatusRequest {
    /// ISIN 심볼 (빈 문자열이면 전체 스트리밍)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// StreamSnipingEngineState
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamSnipingEngineStateRequest {
    /// ISIN 심볼 (빈 문자열이면 전체)
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
}
/// Sniping 엔진 전체 런타임 상태 스냅샷
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SnipingEngineRuntimeState {
    /// ISIN 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// Unix timestamp (KST HHMMSSuuuuuu)
    #[prost(int64, tag="2")]
    pub timestamp: i64,
    /// Episode 상태 ("idle", "active", "unwinding", "cooldown")
    #[prost(string, tag="3")]
    pub episode: ::prost::alloc::string::String,
    /// 전략 종류 ("momentum_accumulator", "rotation")
    #[prost(string, tag="4")]
    pub strategy: ::prost::alloc::string::String,
    /// Momentum 상태
    #[prost(message, optional, tag="5")]
    pub momentum: ::core::option::Option<SnipingMomentumState>,
    /// Position 상태
    #[prost(message, optional, tag="6")]
    pub position: ::core::option::Option<SnipingPositionState>,
    /// Working Orders 상태
    #[prost(message, optional, tag="7")]
    pub working_orders: ::core::option::Option<SnipingWorkingOrdersState>,
    /// Pricing 상태
    #[prost(message, optional, tag="8")]
    pub pricing: ::core::option::Option<SnipingPricingState>,
}
/// Momentum 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SnipingMomentumState {
    /// 방향 ("none", "up", "down")
    #[prost(string, tag="1")]
    pub direction: ::prost::alloc::string::String,
    /// 원시 틱 수
    #[prost(double, tag="2")]
    pub raw_ticks: f64,
    /// 신호 틱 수
    #[prost(int32, tag="3")]
    pub signal_ticks: i32,
    /// 신호 강도
    #[prost(double, tag="4")]
    pub strength: f64,
    /// 샘플 수
    #[prost(int32, tag="5")]
    pub sample_count: i32,
}
/// Position 런타임 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct SnipingPositionState {
    /// 순 수량
    #[prost(int64, tag="1")]
    pub net_qty: i64,
    /// 총 매수 수량
    #[prost(int64, tag="2")]
    pub gross_buy_qty: i64,
    /// 총 매도 수량
    #[prost(int64, tag="3")]
    pub gross_sell_qty: i64,
    /// 평균 진입 가격 (Price internal representation)
    #[prost(int64, tag="4")]
    pub avg_entry_price: i64,
}
/// Working Orders 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct SnipingWorkingOrdersState {
    /// 미체결 주문 수
    #[prost(int32, tag="1")]
    pub count: i32,
    /// 진입 bid 미체결 수량
    #[prost(int64, tag="2")]
    pub entry_bid_working_qty: i64,
    /// 진입 ask 미체결 수량
    #[prost(int64, tag="3")]
    pub entry_ask_working_qty: i64,
    /// 청산 bid 미체결 수량
    #[prost(int64, tag="4")]
    pub exit_bid_working_qty: i64,
    /// 청산 ask 미체결 수량
    #[prost(int64, tag="5")]
    pub exit_ask_working_qty: i64,
}
/// Pricing 상태
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct SnipingPricingState {
    /// NAV bid 가격
    #[prost(int64, tag="1")]
    pub nav_bid: i64,
    /// NAV ask 가격
    #[prost(int64, tag="2")]
    pub nav_ask: i64,
    /// Signal bid 가격 (last)
    #[prost(int64, tag="3")]
    pub signal_bid: i64,
    /// Signal ask 가격 (last)
    #[prost(int64, tag="4")]
    pub signal_ask: i64,
}
// ============================================================================
// Enums
// ============================================================================

/// Market Sniping 런타임 상태
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum MarketSnipingStatus {
    Unspecified = 0,
    /// 대기 (에피소드 없음)
    Idle = 1,
    /// 진입 주문 중
    Entering = 2,
    /// 포지션 보유 중
    Open = 3,
    /// 청산 중
    Exiting = 4,
    /// 쿨다운 대기 중
    Cooldown = 5,
}
impl MarketSnipingStatus {
    /// 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 {
            MarketSnipingStatus::Unspecified => "MARKET_SNIPING_STATUS_UNSPECIFIED",
            MarketSnipingStatus::Idle => "MARKET_SNIPING_STATUS_IDLE",
            MarketSnipingStatus::Entering => "MARKET_SNIPING_STATUS_ENTERING",
            MarketSnipingStatus::Open => "MARKET_SNIPING_STATUS_OPEN",
            MarketSnipingStatus::Exiting => "MARKET_SNIPING_STATUS_EXITING",
            MarketSnipingStatus::Cooldown => "MARKET_SNIPING_STATUS_COOLDOWN",
        }
    }
    /// 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_SNIPING_STATUS_UNSPECIFIED" => Some(Self::Unspecified),
            "MARKET_SNIPING_STATUS_IDLE" => Some(Self::Idle),
            "MARKET_SNIPING_STATUS_ENTERING" => Some(Self::Entering),
            "MARKET_SNIPING_STATUS_OPEN" => Some(Self::Open),
            "MARKET_SNIPING_STATUS_EXITING" => Some(Self::Exiting),
            "MARKET_SNIPING_STATUS_COOLDOWN" => Some(Self::Cooldown),
            _ => None,
        }
    }
}
/// Pricing 전략
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum SnipingPricing {
    Unspecified = 0,
    /// 멀티 호가 NAV 기반
    MultiQuoteNav = 1,
}
impl SnipingPricing {
    /// 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 {
            SnipingPricing::Unspecified => "SNIPING_PRICING_UNSPECIFIED",
            SnipingPricing::MultiQuoteNav => "SNIPING_PRICING_MULTI_QUOTE_NAV",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "SNIPING_PRICING_UNSPECIFIED" => Some(Self::Unspecified),
            "SNIPING_PRICING_MULTI_QUOTE_NAV" => Some(Self::MultiQuoteNav),
            _ => None,
        }
    }
}
/// 진입/청산 주문 방식
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum ExecutionPolicy {
    Unspecified = 0,
    /// 수동 지정가
    PassiveLimit = 1,
    /// IOC
    ImmediateOrCancel = 2,
}
impl ExecutionPolicy {
    /// 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 {
            ExecutionPolicy::Unspecified => "EXECUTION_POLICY_UNSPECIFIED",
            ExecutionPolicy::PassiveLimit => "EXECUTION_POLICY_PASSIVE_LIMIT",
            ExecutionPolicy::ImmediateOrCancel => "EXECUTION_POLICY_IMMEDIATE_OR_CANCEL",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "EXECUTION_POLICY_UNSPECIFIED" => Some(Self::Unspecified),
            "EXECUTION_POLICY_PASSIVE_LIMIT" => Some(Self::PassiveLimit),
            "EXECUTION_POLICY_IMMEDIATE_OR_CANCEL" => Some(Self::ImmediateOrCancel),
            _ => None,
        }
    }
}
/// 전략 종류
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum StrategyKind {
    Unspecified = 0,
    /// 모멘텀 누적
    MomentumAccumulator = 1,
    /// 로테이션
    Rotation = 2,
}
impl StrategyKind {
    /// 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 {
            StrategyKind::Unspecified => "STRATEGY_KIND_UNSPECIFIED",
            StrategyKind::MomentumAccumulator => "STRATEGY_KIND_MOMENTUM_ACCUMULATOR",
            StrategyKind::Rotation => "STRATEGY_KIND_ROTATION",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "STRATEGY_KIND_UNSPECIFIED" => Some(Self::Unspecified),
            "STRATEGY_KIND_MOMENTUM_ACCUMULATOR" => Some(Self::MomentumAccumulator),
            "STRATEGY_KIND_ROTATION" => Some(Self::Rotation),
            _ => None,
        }
    }
}
include!("kdo.v1.market_sniping.tonic.rs");
include!("kdo.v1.market_sniping.serde.rs");
// @@protoc_insertion_point(module)