1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4pub type Order = Value;
5pub type OrderRequest = Value;
6pub type PreviewOrder = Value;
7
8#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
9#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
10pub enum OrderInstruction {
11 Buy,
12 Sell,
13 BuyToOpen,
14 SellToClose,
15 SellToOpen,
16 BuyToClose,
17 SellShort,
18 BuyToCover,
19}
20
21#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
22#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
23pub enum OrderType {
24 Market,
25 Limit,
26 Stop,
27 StopLimit,
28 TrailingStop,
29}
30
31#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
33#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
34pub enum OrderTypeRequest {
35 Market,
36 Limit,
37 Stop,
38 StopLimit,
39 TrailingStop,
40 Cabinet,
41 NonMarketable,
42 MarketOnClose,
43 Exercise,
44 TrailingStopLimit,
45 NetDebit,
46 NetCredit,
47 NetZero,
48 LimitOnClose,
49}
50
51#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
52#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
53pub enum OrderDuration {
54 Day,
55 GoodTillCancel,
56 FillOrKill,
57}
58
59#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
60#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
61pub enum OrderSession {
62 Normal,
63 Am,
64 Pm,
65 Seamless,
66}
67
68#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
69#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
70pub enum OrderStrategyType {
71 Single,
72 Cancel,
73 Recall,
74 Pair,
75 Flatten,
76 TwoDaySwap,
77 BlastAll,
78 Oco,
79 Trigger,
80}
81
82#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
83#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
84pub enum ComplexOrderStrategyType {
85 None,
86 Covered,
87 Vertical,
88 BackRatio,
89 Calendar,
90 Diagonal,
91 Straddle,
92 Strangle,
93 CollarSynthetic,
94 Butterfly,
95 Condor,
96 IronCondor,
97 VerticalRoll,
98 CollarWithStock,
99 DoubleDiagonal,
100 UnbalancedButterfly,
101 UnbalancedCondor,
102 UnbalancedIronCondor,
103 UnbalancedVerticalRoll,
104 MutualFundSwap,
105 Custom,
106}
107
108#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
109#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
110pub enum OrderLegType {
111 Equity,
112 Option,
113 Index,
114 MutualFund,
115 CashEquivalent,
116 FixedIncome,
117 Currency,
118 CollectiveInvestment,
119}
120
121#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
122#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
123pub enum AssetType {
124 Equity,
125 Option,
126 Index,
127 MutualFund,
128 CashEquivalent,
129 FixedIncome,
130 Currency,
131 CollectiveInvestment,
132}
133
134#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
135#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
136pub enum TaxLotMethod {
137 Fifo,
138 Lifo,
139 HighCost,
140 LowCost,
141 AverageCost,
142 SpecificLot,
143 LossHarvester,
144}
145
146#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
147#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
148pub enum SpecialInstruction {
149 AllOrNone,
150 DoNotReduce,
151 AllOrNoneDoNotReduce,
152}
153
154impl ComplexOrderStrategyType {
155 pub fn as_str(self) -> &'static str {
156 match self {
157 Self::None => "NONE",
158 Self::Covered => "COVERED",
159 Self::Vertical => "VERTICAL",
160 Self::BackRatio => "BACK_RATIO",
161 Self::Calendar => "CALENDAR",
162 Self::Diagonal => "DIAGONAL",
163 Self::Straddle => "STRADDLE",
164 Self::Strangle => "STRANGLE",
165 Self::CollarSynthetic => "COLLAR_SYNTHETIC",
166 Self::Butterfly => "BUTTERFLY",
167 Self::Condor => "CONDOR",
168 Self::IronCondor => "IRON_CONDOR",
169 Self::VerticalRoll => "VERTICAL_ROLL",
170 Self::CollarWithStock => "COLLAR_WITH_STOCK",
171 Self::DoubleDiagonal => "DOUBLE_DIAGONAL",
172 Self::UnbalancedButterfly => "UNBALANCED_BUTTERFLY",
173 Self::UnbalancedCondor => "UNBALANCED_CONDOR",
174 Self::UnbalancedIronCondor => "UNBALANCED_IRON_CONDOR",
175 Self::UnbalancedVerticalRoll => "UNBALANCED_VERTICAL_ROLL",
176 Self::MutualFundSwap => "MUTUAL_FUND_SWAP",
177 Self::Custom => "CUSTOM",
178 }
179 }
180
181 pub fn all_values() -> &'static [Self] {
182 &[
183 Self::None,
184 Self::Covered,
185 Self::Vertical,
186 Self::BackRatio,
187 Self::Calendar,
188 Self::Diagonal,
189 Self::Straddle,
190 Self::Strangle,
191 Self::CollarSynthetic,
192 Self::Butterfly,
193 Self::Condor,
194 Self::IronCondor,
195 Self::VerticalRoll,
196 Self::CollarWithStock,
197 Self::DoubleDiagonal,
198 Self::UnbalancedButterfly,
199 Self::UnbalancedCondor,
200 Self::UnbalancedIronCondor,
201 Self::UnbalancedVerticalRoll,
202 Self::MutualFundSwap,
203 Self::Custom,
204 ]
205 }
206}
207
208impl OrderTypeRequest {
209 pub fn as_str(self) -> &'static str {
210 match self {
211 Self::Market => "MARKET",
212 Self::Limit => "LIMIT",
213 Self::Stop => "STOP",
214 Self::StopLimit => "STOP_LIMIT",
215 Self::TrailingStop => "TRAILING_STOP",
216 Self::Cabinet => "CABINET",
217 Self::NonMarketable => "NON_MARKETABLE",
218 Self::MarketOnClose => "MARKET_ON_CLOSE",
219 Self::Exercise => "EXERCISE",
220 Self::TrailingStopLimit => "TRAILING_STOP_LIMIT",
221 Self::NetDebit => "NET_DEBIT",
222 Self::NetCredit => "NET_CREDIT",
223 Self::NetZero => "NET_ZERO",
224 Self::LimitOnClose => "LIMIT_ON_CLOSE",
225 }
226 }
227}