1use super::{CreateOrderType, CreateSide, CreateTimeInForce, FeeAsset};
4use crate::types::{Price, Quantity};
5use buffa_types::google::protobuf::Timestamp;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum CreateTriggerType {
9 StopLoss,
10 TakeProfit,
11 TrailingStop,
12 Twap,
13 Ladder,
14}
15
16#[derive(Debug, Clone)]
18pub struct CreateTriggerParams {
19 pub symbol: String,
20 pub trigger_type: CreateTriggerType,
21 pub side: CreateSide,
22 pub order_type: CreateOrderType,
23 pub qty: Quantity,
24 pub trigger_price: Option<Price>,
25 pub limit_price: Option<Price>,
26 pub trigger_price_source: Option<String>,
27 pub time_in_force: Option<CreateTimeInForce>,
28 pub subaccount_id: Option<u64>,
29 pub client_trigger_id: String,
31 pub post_only: bool,
32 pub activation_price: Option<Price>,
33 pub trailing_distance_ticks: Option<i64>,
34 pub trailing_distance_bps: Option<i32>,
35 pub max_slippage_ticks: Option<i32>,
36 pub max_slippage_bps: Option<i32>,
37 pub twap_duration_ms: Option<i64>,
38 pub twap_slice_interval_ms: Option<i64>,
39 pub ladder_price_min: Option<Price>,
40 pub ladder_price_max: Option<Price>,
41 pub ladder_levels: Option<i32>,
42 pub ladder_distribution: Option<String>,
43 pub fee_asset: Option<FeeAsset>,
45 pub self_trade_prevention_mode: Option<String>,
46}
47
48#[derive(Debug, Clone)]
50pub struct ModifyTriggerParams {
51 pub trigger_id: String,
52 pub subaccount_id: Option<u64>,
53 pub trigger_price: Option<Price>,
54 pub limit_price: Option<Price>,
55 pub activation_price: Option<Price>,
56 pub trailing_distance_ticks: Option<i64>,
57 pub trailing_distance_bps: Option<i32>,
58 pub max_slippage_ticks: Option<i32>,
59 pub max_slippage_bps: Option<i32>,
60}
61
62pub const TRIGGER_STATUS_VALUES: &[&str] = &[
64 "created",
65 "armed",
66 "running",
67 "completed",
68 "cancelled",
69 "failed",
70 "paused",
71];
72
73#[derive(Debug, Clone, Default)]
75pub struct ListTriggersOpts {
76 pub symbol: Option<String>,
77 pub status: Vec<String>,
79 pub limit: u32,
80 pub page_token: Option<String>,
81 pub subaccount_id: Option<u64>,
82}
83
84#[derive(Debug, Clone, PartialEq, Eq)]
85pub struct TriggerStopDetails {
86 pub trigger_price: Option<Price>,
87 pub trigger_price_source: String,
88 pub trigger_direction: String,
89}
90
91#[derive(Debug, Clone, PartialEq, Eq)]
92pub struct TriggerTrailingDetails {
93 pub trailing_distance: Option<Price>,
94 pub trailing_distance_bps: i32,
95 pub activation_price: Option<Price>,
96 pub peak_price: Option<Price>,
97 pub trough_price: Option<Price>,
98 pub max_slippage: Option<Price>,
99 pub max_slippage_bps: i32,
100 pub trigger_price_source: String,
101 pub trigger_direction: String,
102}
103
104#[derive(Debug, Clone, PartialEq, Eq)]
105pub struct TriggerTwapDetails {
106 pub twap_duration_ms: i64,
107 pub twap_slice_interval_ms: i64,
108 pub slice_idx: i32,
109 pub slice_count: i32,
110 pub executed_qty: Option<Quantity>,
111}
112
113#[derive(Debug, Clone, PartialEq, Eq)]
114pub struct TriggerLadderDetails {
115 pub ladder_price_min: Option<Price>,
116 pub ladder_price_max: Option<Price>,
117 pub ladder_levels: i32,
118 pub ladder_distribution: String,
119}
120
121#[derive(Debug, Clone, PartialEq, Eq)]
122pub enum TriggerDetails {
123 Stop(TriggerStopDetails),
124 Trailing(TriggerTrailingDetails),
125 Twap(TriggerTwapDetails),
126 Ladder(TriggerLadderDetails),
127}
128
129#[derive(Debug, Clone, PartialEq)]
130pub struct Trigger {
131 pub trigger_id: String,
132 pub subaccount_id: String,
133 pub symbol_id: u32,
134 pub symbol: String,
135 pub trigger_type: String,
136 pub status: String,
137 pub parent_order_id: Option<String>,
138 pub side: String,
139 pub order_type: String,
140 pub time_in_force: String,
141 pub qty: Option<Quantity>,
142 pub limit_price: Option<Price>,
143 pub fee_asset: String,
144 pub self_trade_prevention_mode: String,
145 pub post_only: bool,
146 pub trigger_price: Option<Price>,
148 pub client_trigger_id: String,
149 pub created_at: Option<Timestamp>,
150 pub updated_at: Option<Timestamp>,
151 pub armed_at: Option<Timestamp>,
152 pub completed_at: Option<Timestamp>,
153 pub details: Option<TriggerDetails>,
154}
155
156#[derive(Debug, Clone, PartialEq)]
157pub struct TriggersList {
158 pub triggers: Vec<Trigger>,
159 pub total: usize,
160 pub next_page_token: String,
161}
162
163#[derive(Debug, Clone, PartialEq, Eq)]
164pub struct TriggerMutationResult {
165 pub trigger_id: String,
166 pub client_trigger_id: String,
167 pub status: String,
168}
169
170#[derive(Debug, Clone, PartialEq, Eq)]
171pub struct TriggerEvent {
172 pub trigger_id: String,
173 pub subaccount_id: String,
174 pub symbol_id: u32,
175 pub trigger_type: String,
176 pub event_type: String,
177 pub ts_ns: String,
178 pub child_seq: i32,
179 pub child_order_id: String,
180 pub fire_price: Option<Price>,
181 pub reason: String,
182}
183
184#[derive(Debug, Clone, PartialEq, Eq)]
185pub struct TriggerEventsList {
186 pub events: Vec<TriggerEvent>,
187 pub next_page_token: String,
188}