From 594fe4bab38e372320af24eab35b1f251874ca9f Mon Sep 17 00:00:00 2001 From: stefaj Date: Sat, 22 Jun 2024 12:09:02 +0200 Subject: [PATCH 1/7] Use futures Trade --- src/futures/websockets.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/futures/websockets.rs b/src/futures/websockets.rs index 323f0455..08670829 100755 --- a/src/futures/websockets.rs +++ b/src/futures/websockets.rs @@ -3,7 +3,7 @@ use crate::config::Config; use crate::model::{ AccountUpdateEvent, AggrTradesEvent, BookTickerEvent, ContinuousKlineEvent, DayTickerEvent, DepthOrderBookEvent, IndexKlineEvent, IndexPriceEvent, KlineEvent, LiquidationEvent, - MarkPriceEvent, MiniTickerEvent, OrderBook, TradeEvent, UserDataStreamExpiredEvent, + MarkPriceEvent, MiniTickerEvent, OrderBook, UserDataStreamExpiredEvent, }; use crate::futures::model; use error_chain::bail; @@ -16,6 +16,8 @@ use tungstenite::protocol::WebSocket; use tungstenite::stream::MaybeTlsStream; use tungstenite::handshake::client::Response; +use super::model::Trade; + #[allow(clippy::all)] enum FuturesWebsocketAPI { Default, @@ -55,7 +57,7 @@ pub enum FuturesWebsocketEvent { AccountUpdate(AccountUpdateEvent), OrderTrade(model::OrderTradeEvent), AggrTrades(AggrTradesEvent), - Trade(TradeEvent), + Trade(Trade), OrderBook(OrderBook), DayTicker(DayTickerEvent), MiniTicker(MiniTickerEvent), @@ -92,7 +94,7 @@ enum FuturesEvents { IndexPriceEvent(IndexPriceEvent), MarkPriceEvent(MarkPriceEvent), VecMarkPriceEvent(Vec), - TradeEvent(TradeEvent), + TradeEvent(Trade), KlineEvent(KlineEvent), ContinuousKlineEvent(ContinuousKlineEvent), IndexKlineEvent(IndexKlineEvent), From dbbd77d36a95f4cf4fa544eaef2875636634ee37 Mon Sep 17 00:00:00 2001 From: stefaj Date: Sat, 22 Jun 2024 12:31:30 +0200 Subject: [PATCH 2/7] Update Trade Event to match futures json --- src/futures/model.rs | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/futures/model.rs b/src/futures/model.rs index e6debac4..ae7e53b7 100644 --- a/src/futures/model.rs +++ b/src/futures/model.rs @@ -107,20 +107,40 @@ pub enum Trades { AllTrades(Vec), } + +// {'stream': 'wifusdc@trade', 'data': {'e': 'trade', 'E': 1719051857284, 'T': 1719051857284, 's': 'WIFUSDC', 't': 18074627, 'p': '1.7728000', 'q': '34.8', 'X': 'MARKET', 'm': True}} #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct Trade { - pub id: u64, - pub is_buyer_maker: bool, - #[serde(with = "string_or_float")] + #[serde(rename = "e")] + pub event_type: String, + + #[serde(rename = "E")] + pub event_time: u64, + + #[serde(rename = "T")] + pub transaction_time: u64, + + #[serde(rename = "s")] + pub symbol: String, + + #[serde(rename = "t")] + pub transaction_id: i64, + + #[serde(rename = "p")] pub price: f64, - #[serde(with = "string_or_float")] - pub qty: f64, - #[serde(with = "string_or_float")] - pub quote_qty: f64, - pub time: u64, + + #[serde(rename = "q")] + pub quantity: f64, + + #[serde(rename = "X")] + pub order_type: String, + + #[serde(rename = "m")] + pub is_buyer_maker: bool, } + #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(untagged)] pub enum AggTrades { @@ -612,6 +632,8 @@ pub struct OrderTradeEvent { pub order: OrderUpdate, } + + #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct Income { From 36ed9976f05cbe5500cc29ca0491d7aa04e98bd5 Mon Sep 17 00:00:00 2001 From: stefaj Date: Sat, 22 Jun 2024 12:39:52 +0200 Subject: [PATCH 3/7] Adjust Trade slightly to mirror aggTrade --- src/futures/model.rs | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/futures/model.rs b/src/futures/model.rs index ae7e53b7..c8a4f5b1 100644 --- a/src/futures/model.rs +++ b/src/futures/model.rs @@ -112,14 +112,8 @@ pub enum Trades { #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct Trade { - #[serde(rename = "e")] - pub event_type: String, - - #[serde(rename = "E")] - pub event_time: u64, - #[serde(rename = "T")] - pub transaction_time: u64, + pub time: u64, #[serde(rename = "s")] pub symbol: String, @@ -127,10 +121,10 @@ pub struct Trade { #[serde(rename = "t")] pub transaction_id: i64, - #[serde(rename = "p")] + #[serde(rename = "p", with = "string_or_float")] pub price: f64, - #[serde(rename = "q")] + #[serde(rename = "q", with = "string_or_float")] pub quantity: f64, #[serde(rename = "X")] From e1f341178a88f81e504cff78ed0bddd755f5fa40 Mon Sep 17 00:00:00 2001 From: stefaj Date: Sat, 22 Jun 2024 12:48:58 +0200 Subject: [PATCH 4/7] Remove comment showing JSON --- src/futures/model.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/futures/model.rs b/src/futures/model.rs index c8a4f5b1..dfbf18d9 100644 --- a/src/futures/model.rs +++ b/src/futures/model.rs @@ -107,8 +107,6 @@ pub enum Trades { AllTrades(Vec), } - -// {'stream': 'wifusdc@trade', 'data': {'e': 'trade', 'E': 1719051857284, 'T': 1719051857284, 's': 'WIFUSDC', 't': 18074627, 'p': '1.7728000', 'q': '34.8', 'X': 'MARKET', 'm': True}} #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct Trade { From 1f42dfd5e2fb0f961f165a9b5f03b14939919041 Mon Sep 17 00:00:00 2001 From: Stefan Jacholke Date: Fri, 31 Jan 2025 19:26:34 +0100 Subject: [PATCH 5/7] Update model.rs Get spot permissions --- src/model.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/model.rs b/src/model.rs index baedc33f..c172f7f7 100644 --- a/src/model.rs +++ b/src/model.rs @@ -137,6 +137,7 @@ pub struct AccountInformation { pub can_withdraw: bool, pub can_deposit: bool, pub balances: Vec, + pub permissions: Vec, } #[derive(Debug, Serialize, Deserialize, Clone)] From 6bbeed382936dd36cc5fc39f895ac20a48ce3b58 Mon Sep 17 00:00:00 2001 From: Stefan Jacholke Date: Fri, 31 Jan 2025 19:36:48 +0100 Subject: [PATCH 6/7] Update general.rs Get exchange info with permissions --- src/general.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/general.rs b/src/general.rs index 357356b2..f5fb08e0 100644 --- a/src/general.rs +++ b/src/general.rs @@ -1,10 +1,11 @@ use error_chain::bail; - +use crate::util::build_request; use crate::model::{Empty, ExchangeInformation, ServerTime, Symbol}; use crate::client::Client; use crate::errors::Result; use crate::api::API; use crate::api::Spot; +use std::collections::BTreeMap; #[derive(Clone)] pub struct General { @@ -29,6 +30,20 @@ impl General { self.client.get(API::Spot(Spot::ExchangeInfo), None) } + + + // Obtain exchange information with permissions + // - Current exchange trading rules and symbol information + pub fn exchange_info_permission(&self, permission : S) -> Result + where + S: Into, + { + let mut parameters: BTreeMap = BTreeMap::new(); + parameters.insert("permissions".into(), permission.into()); + let request = build_request(parameters); + self.client.get(API::Spot(Spot::ExchangeInfo), Some(request)) + } + // Get Symbol information pub fn get_symbol_info(&self, symbol: S) -> Result where From 8c28f02525e148260f59a12429334a03c918877f Mon Sep 17 00:00:00 2001 From: Stefan Jacholke Date: Sat, 5 Apr 2025 09:23:26 +0200 Subject: [PATCH 7/7] Update model.rs Add position risk control --- src/model.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/model.rs b/src/model.rs index c172f7f7..6f2f3a6e 100644 --- a/src/model.rs +++ b/src/model.rs @@ -55,6 +55,11 @@ pub enum Filters { max_price: String, tick_size: String, }, + #[serde(rename = "POSITION_RISK_CONTROL")] + #[serde(rename_all = "camelCase")] + PositionRiskControl { + }, + #[serde(rename = "PERCENT_PRICE")] #[serde(rename_all = "camelCase")] PercentPrice {