|
@@ -79,7 +79,7 @@ impl BybitSwap {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// 获取市场信息
|
|
// 获取市场信息
|
|
|
- bybit_swap.market = BybitSwap::get_market(&mut bybit_swap).await.unwrap_or(bybit_swap.market);
|
|
|
|
|
|
|
+ bybit_swap.market = BybitSwap::get_market(&mut bybit_swap).await.unwrap();
|
|
|
bybit_swap
|
|
bybit_swap
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -764,13 +764,10 @@ pub fn format_order_item(order: Value, ct_val: Decimal) -> Order {
|
|
|
let mut deal_amount = Decimal::ZERO;
|
|
let mut deal_amount = Decimal::ZERO;
|
|
|
let mut avg_price = Decimal::ZERO;
|
|
let mut avg_price = Decimal::ZERO;
|
|
|
|
|
|
|
|
- let right_str = order["cumExecQty"].to_string();
|
|
|
|
|
- let size_str = order["qty"].to_string();
|
|
|
|
|
-
|
|
|
|
|
- if !order.get("qty").is_some() {
|
|
|
|
|
- size = Decimal::from_str(size_str.as_str()).unwrap();
|
|
|
|
|
|
|
+ if order.get("qty").is_some() {
|
|
|
|
|
+ size = Decimal::from_str(order["qty"].as_str().unwrap()).unwrap();
|
|
|
let right_val = Decimal::from_str(order["cumExecValue"].as_str().unwrap()).unwrap();
|
|
let right_val = Decimal::from_str(order["cumExecValue"].as_str().unwrap()).unwrap();
|
|
|
- let right = Decimal::from_str(right_str.as_str()).unwrap();
|
|
|
|
|
|
|
+ let right = Decimal::from_str(order["cumExecQty"].as_str().unwrap()).unwrap();
|
|
|
if right != Decimal::ZERO {
|
|
if right != Decimal::ZERO {
|
|
|
avg_price = right_val / right;
|
|
avg_price = right_val / right;
|
|
|
}
|
|
}
|
|
@@ -778,7 +775,11 @@ pub fn format_order_item(order: Value, ct_val: Decimal) -> Order {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let amount = size * ct_val;
|
|
let amount = size * ct_val;
|
|
|
- let custom_status = if status == "Filled" || status == "Cancelled" { "REMOVE".to_string() } else if status == "New" { "NEW".to_string() } else {
|
|
|
|
|
|
|
+ let custom_status = if status == "Filled" || status == "Cancelled" {
|
|
|
|
|
+ "REMOVE".to_string()
|
|
|
|
|
+ } else if status == "New" {
|
|
|
|
|
+ "NEW".to_string()
|
|
|
|
|
+ } else {
|
|
|
"NULL".to_string()
|
|
"NULL".to_string()
|
|
|
};
|
|
};
|
|
|
let rst_order = Order {
|
|
let rst_order = Order {
|
|
@@ -793,4 +794,73 @@ pub fn format_order_item(order: Value, ct_val: Decimal) -> Order {
|
|
|
trace_stack: TraceStack::new(0, Instant::now()).on_special("688 trace_stack".to_string()),
|
|
trace_stack: TraceStack::new(0, Instant::now()).on_special("688 trace_stack".to_string()),
|
|
|
};
|
|
};
|
|
|
return rst_order;
|
|
return rst_order;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#[cfg(test)]
|
|
|
|
|
+mod tests {
|
|
|
|
|
+ use global::log_utils::init_log_with_info;
|
|
|
|
|
+ use super::*;
|
|
|
|
|
+
|
|
|
|
|
+ #[test]
|
|
|
|
|
+ fn test_format_order_item() {
|
|
|
|
|
+ let _g = init_log_with_info();
|
|
|
|
|
+
|
|
|
|
|
+ // 准备测试数据
|
|
|
|
|
+ let json_str = r#"{
|
|
|
|
|
+ "avgPrice": "2.0575",
|
|
|
|
|
+ "blockTradeId": "",
|
|
|
|
|
+ "cancelType": "UNKNOWN",
|
|
|
|
|
+ "closeOnTrigger": false,
|
|
|
|
|
+ "createType": "CreateByUser",
|
|
|
|
|
+ "createdTime": "1743419403716",
|
|
|
|
|
+ "cumExecFee": "0.004115",
|
|
|
|
|
+ "cumExecQty": "10",
|
|
|
|
|
+ "cumExecValue": "20.575",
|
|
|
|
|
+ "isLeverage": "",
|
|
|
|
|
+ "lastPriceOnCreated": "2.0573",
|
|
|
|
|
+ "leavesQty": "0",
|
|
|
|
|
+ "leavesValue": "0",
|
|
|
|
|
+ "marketUnit": "",
|
|
|
|
|
+ "orderId": "ed33e19d-5346-4690-954f-f6bec6c24ffb",
|
|
|
|
|
+ "orderIv": "",
|
|
|
|
|
+ "orderLinkId": "t-1652550550bybit",
|
|
|
|
|
+ "orderStatus": "Filled",
|
|
|
|
|
+ "orderType": "Limit",
|
|
|
|
|
+ "placeType": "",
|
|
|
|
|
+ "positionIdx": 0,
|
|
|
|
|
+ "price": "2.0575",
|
|
|
|
|
+ "qty": "10",
|
|
|
|
|
+ "reduceOnly": true,
|
|
|
|
|
+ "rejectReason": "EC_NoError",
|
|
|
|
|
+ "side": "Sell",
|
|
|
|
|
+ "slLimitPrice": "0",
|
|
|
|
|
+ "slTriggerBy": "",
|
|
|
|
|
+ "smpGroup": 0,
|
|
|
|
|
+ "smpOrderId": "",
|
|
|
|
|
+ "smpType": "None",
|
|
|
|
|
+ "stopLoss": "",
|
|
|
|
|
+ "stopOrderType": "",
|
|
|
|
|
+ "symbol": "XRPUSDT",
|
|
|
|
|
+ "takeProfit": "",
|
|
|
|
|
+ "timeInForce": "GTC",
|
|
|
|
|
+ "tpLimitPrice": "0",
|
|
|
|
|
+ "tpTriggerBy": "",
|
|
|
|
|
+ "tpslMode": "",
|
|
|
|
|
+ "triggerBy": "",
|
|
|
|
|
+ "triggerDirection": 0,
|
|
|
|
|
+ "triggerPrice": "",
|
|
|
|
|
+ "updatedTime": "1743419403736"
|
|
|
|
|
+ }"#;
|
|
|
|
|
+
|
|
|
|
|
+ // 解析JSON字符串为Value对象
|
|
|
|
|
+ let order_value: Value = serde_json::from_str(json_str).unwrap();
|
|
|
|
|
+
|
|
|
|
|
+ // 创建一个Decimal值作为测试参数
|
|
|
|
|
+ let ct_val = Decimal::from_str("1").unwrap();
|
|
|
|
|
+
|
|
|
|
|
+ // 调用被测试的函数
|
|
|
|
|
+ let order = format_order_item(order_value, ct_val);
|
|
|
|
|
+
|
|
|
|
|
+ println!("{:#?}", order);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|