|
|
@@ -27,9 +27,9 @@ pub fn format_account_info(accounts: &Vec<Value>, symbol: &String) -> Account {
|
|
|
}
|
|
|
Some(value) => {
|
|
|
let coin = value["currency"].as_str().unwrap().to_string();
|
|
|
- let available_balance = Decimal::from_str(value["accountBalanceRv"].as_str().unwrap()).unwrap();
|
|
|
+ let balance = Decimal::from_str(value["accountBalanceRv"].as_str().unwrap()).unwrap();
|
|
|
let frozen_balance = Decimal::from_str(value["totalUsedBalanceRv"].as_str().unwrap()).unwrap();
|
|
|
- let balance = available_balance + frozen_balance;
|
|
|
+ let available_balance = balance - frozen_balance;
|
|
|
Account {
|
|
|
coin,
|
|
|
balance,
|
|
|
@@ -46,7 +46,14 @@ pub fn format_account_info(accounts: &Vec<Value>, symbol: &String) -> Account {
|
|
|
// 处理position信息
|
|
|
pub fn handle_position(res_data: &ResponseData, ct_val: &Decimal) -> Vec<Position> {
|
|
|
let res_data_json = res_data.data.as_array().unwrap();
|
|
|
- res_data_json.iter().map(|item| { format_position_item(item, ct_val) }).collect()
|
|
|
+ return res_data_json.iter().filter_map(|item| {
|
|
|
+ let position = format_position_item(item, ct_val);
|
|
|
+ if position.amount == Decimal::ZERO {
|
|
|
+ None
|
|
|
+ } else {
|
|
|
+ Some(position)
|
|
|
+ }
|
|
|
+ }).collect();
|
|
|
}
|
|
|
|
|
|
pub fn format_position_item(position: &Value, ct_val: &Decimal) -> Position {
|
|
|
@@ -97,9 +104,7 @@ pub fn format_order_item(order: &Value, ct_val: Decimal) -> Order {
|
|
|
|
|
|
let status = order["ordStatus"].as_str().unwrap();
|
|
|
let custom_status;
|
|
|
- if vec!["Rejected"].contains(&status) {
|
|
|
- custom_status = "NULL".to_string()
|
|
|
- } else if vec!["Filled", "Canceled"].contains(&status) {
|
|
|
+ if vec!["Rejected", "Filled", "Canceled"].contains(&status) {
|
|
|
custom_status = "REMOVE".to_string()
|
|
|
} else if vec!["New", "Init", "Created"].contains(&status) {
|
|
|
custom_status = "NEW".to_string()
|