Skip to content

Commit

Permalink
Add change_position_margin api of future
Browse files Browse the repository at this point in the history
  • Loading branch information
liumiao committed Feb 26, 2024
1 parent ebd6bb4 commit 9af4e07
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ pub enum Futures {
IndexInfo,
ChangeInitialLeverage,
ChangeMarginType,
ChangePositionMargin,
Account,
OpenOrders,
UserDataStream,
Expand Down Expand Up @@ -163,6 +164,7 @@ impl From<API> for String {
Futures::IndexInfo => "/fapi/v1/indexInfo",
Futures::ChangeInitialLeverage => "/fapi/v1/leverage",
Futures::ChangeMarginType => "/fapi/v1/marginType",
Futures::ChangePositionMargin => "/fapi/v1/positionMargin",
Futures::Account => "/fapi/v2/account",
Futures::OpenOrders => "/fapi/v1/openOrders",
Futures::UserDataStream => "/fapi/v1/listenKey",
Expand Down
16 changes: 16 additions & 0 deletions src/futures/account.rs
Original file line number Diff line number Diff line change
Expand Up @@ -612,6 +612,22 @@ impl FuturesAccount {
.map(|_| ())
}

pub fn change_position_margin<S>(&self, symbol: S, amount: f64, is_adding_margin: bool) -> Result<()>
where
S: Into<String>,
{
let mut parameters: BTreeMap<String, String> = BTreeMap::new();
let margin = if is_adding_margin { "1" } else { "2" };
parameters.insert("symbol".into(), symbol.into());
parameters.insert("amount".into(), amount.to_string());
parameters.insert("type".into(), margin.into());

let request = build_signed_request(parameters, self.recv_window)?;
self.client
.post_signed::<Empty>(API::Futures(Futures::ChangePositionMargin), request)
.map(|_| ())
}

pub fn change_position_mode(&self, dual_side_position: bool) -> Result<()> {
let mut parameters: BTreeMap<String, String> = BTreeMap::new();
let dual_side = if dual_side_position { "true" } else { "false" };
Expand Down
21 changes: 21 additions & 0 deletions tests/futures_account_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,27 @@ mod tests {
mock.assert();
}

#[test]
fn change_position_margin() {
let mut server = Server::new();
let mock = server.mock("POST", "/fapi/v1/positionMargin")
.with_header("content-type", "application/json;charset=UTF-8")
.match_query(Matcher::Regex(
"amount=100&recvWindow=1234&symbol=BTCUSDT&timestamp=\\d+&type=1&signature=.*".into(),
))
.with_body_from_file("tests/mocks/futures/account/change_position_margin.json")
.create();

let config = Config::default()
.set_futures_rest_api_endpoint(server.url())
.set_recv_window(1234);
let account: FuturesAccount = Binance::new_with_config(None, None, &config);
let _ = env_logger::try_init();
account.change_position_margin("BTCUSDT", 100., true).unwrap();

mock.assert();
}

#[test]
fn cancel_all_open_orders() {
let mut server = Server::new();
Expand Down
6 changes: 6 additions & 0 deletions tests/mocks/futures/account/change_position_margin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"amount": 100.0,
"code": 200,
"msg": "Successfully modify position margin.",
"type": 1
}

0 comments on commit 9af4e07

Please sign in to comment.