|
|
@@ -146,7 +146,6 @@ impl Platform for BitgetSwap {
|
|
|
"marginCoin": "USDT",
|
|
|
"symbol": symbol_format
|
|
|
});
|
|
|
- let multiplier = self.market.multiplier;
|
|
|
let response = self.request.get_single_position(params).await;
|
|
|
if response.code != 200 {
|
|
|
return Err(Error::new(ErrorKind::NotFound, format!("bitget_swap 获取仓位异常{:?}", response).to_string()));
|
|
|
@@ -162,7 +161,7 @@ impl Platform for BitgetSwap {
|
|
|
for position_json in positions_json {
|
|
|
let symbol = position_json["symbol"].as_str().unwrap().to_string();
|
|
|
let margin_level = Decimal::from_str(position_json["leverage"].as_str().unwrap()).unwrap();
|
|
|
- let amount = Decimal::from_str(position_json["total"].as_str().unwrap()).unwrap() * multiplier;
|
|
|
+ let amount = Decimal::from_str(position_json["total"].as_str().unwrap()).unwrap();
|
|
|
let frozen_amount = Decimal::from_str(position_json["locked"].as_str().unwrap()).unwrap();
|
|
|
let price = Decimal::from_str(position_json["openPriceAvg"].as_str().unwrap()).unwrap();
|
|
|
let profit = Decimal::from_str(position_json["unrealizedPL"].as_str().unwrap()).unwrap();
|
|
|
@@ -327,7 +326,6 @@ impl Platform for BitgetSwap {
|
|
|
} else {
|
|
|
Err(Error::new(ErrorKind::Other, res_data.to_string()))
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
async fn get_ticker_symbol(&mut self, symbol: String) -> Result<Ticker, Error> {
|
|
|
@@ -379,8 +377,8 @@ impl Platform for BitgetSwap {
|
|
|
let max_qty = Decimal::NEGATIVE_ONE;
|
|
|
let min_notional = Decimal::from_str(market_info["minTradeUSDT"].as_str().unwrap()).unwrap();
|
|
|
let max_notional = Decimal::NEGATIVE_ONE;
|
|
|
- // let multiplier = Decimal::from_str(&market_info["sizeMultiplier"].as_str().unwrap()).unwrap();
|
|
|
- let multiplier = Decimal::ONE;
|
|
|
+ let multiplier = Decimal::from_str(&market_info["sizeMultiplier"].as_str().unwrap()).unwrap();
|
|
|
+ // let multiplier = Decimal::ONE;
|
|
|
|
|
|
let result = Market {
|
|
|
symbol: format!("{}_{}", base_asset, quote_asset),
|
|
|
@@ -444,14 +442,13 @@ impl Platform for BitgetSwap {
|
|
|
|
|
|
async fn take_order_symbol(&mut self, symbol: String, multiplier: Decimal, custom_id: &str, origin_side: &str, price: Decimal, amount: Decimal) -> Result<Order, Error> {
|
|
|
let symbol_format = utils::format_symbol(symbol, "");
|
|
|
- let final_size = amount / multiplier;
|
|
|
let mut params = json!({
|
|
|
"symbol": symbol_format,
|
|
|
"clientOid": custom_id,
|
|
|
"productType": "USDT-FUTURES",
|
|
|
"marginMode": "crossed",
|
|
|
"marginCoin": "USDT",
|
|
|
- "size": final_size.to_string()
|
|
|
+ "size": amount.to_string()
|
|
|
});
|
|
|
if price.eq(&Decimal::ZERO) {
|
|
|
params["orderType"] = json!("market");
|
|
|
@@ -460,6 +457,9 @@ impl Platform for BitgetSwap {
|
|
|
params["price"] = json!(price.to_string());
|
|
|
params["orderType"] = json!("limit");
|
|
|
params["force"] = json!("gtc");
|
|
|
+ if amount % multiplier != dec!(0) {
|
|
|
+ params["size"] = json!(((amount / multiplier).ceil() * multiplier).to_string());
|
|
|
+ }
|
|
|
};
|
|
|
match origin_side {
|
|
|
"kd" => {
|
|
|
@@ -481,7 +481,6 @@ impl Platform for BitgetSwap {
|
|
|
_ => { panic!("bitget_usdt_swap 下单参数错误"); }
|
|
|
};
|
|
|
|
|
|
- info!(?params);
|
|
|
let res_data = self.request.swap_order(params).await;
|
|
|
if res_data.code != 200 {
|
|
|
return Err(Error::new(ErrorKind::Other, res_data.to_string()));
|
|
|
@@ -758,7 +757,7 @@ impl Platform for BitgetSwap {
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
-pub fn format_order_item(order: Value, multiplier: Decimal) -> Order {
|
|
|
+pub fn format_order_item(order: Value, _multiplier: Decimal) -> Order {
|
|
|
let price = Decimal::from_str(order["price"].as_str().unwrap_or(order["priceAvg"].as_str().unwrap())).unwrap();
|
|
|
let size = Decimal::from_str(order["size"].as_str().unwrap()).unwrap();
|
|
|
let status = order["state"].as_str().unwrap();
|
|
|
@@ -769,8 +768,8 @@ pub fn format_order_item(order: Value, multiplier: Decimal) -> Order {
|
|
|
Decimal::from_str(order["priceAvg"].as_str().unwrap().to_string().as_str()).unwrap()
|
|
|
};
|
|
|
|
|
|
- let amount = size * multiplier;
|
|
|
- let deal_amount = base_volume * multiplier;
|
|
|
+ let amount = size;
|
|
|
+ let deal_amount = base_volume;
|
|
|
let custom_status = if ["filled", "canceled"].contains(&status) {
|
|
|
"REMOVE".to_string()
|
|
|
} else if ["init", "live", "new", "partially_filled"].contains(&status) {
|