|
@@ -0,0 +1,55 @@
|
|
|
|
|
+use serde::{Deserialize, Serialize};
|
|
|
|
|
+use rust_decimal::Decimal;
|
|
|
|
|
+use rust_decimal_macros::dec;
|
|
|
|
|
+use tracing::error;
|
|
|
|
|
+use crate::{Account, Market, Order, Position, PositionModeEnum, Ticker, utils};
|
|
|
|
|
+
|
|
|
|
|
+/// Binance交易所账户信息请求数据结构
|
|
|
|
|
+/// - 接口`"/fapi/v2/balance"`
|
|
|
|
|
+///
|
|
|
|
|
+/// struct SwapAccount
|
|
|
|
|
+/// - `account_alias`: String, 账户唯一识别码
|
|
|
|
|
+/// - `asset`: String, 资产
|
|
|
|
|
+/// - `balance`: Decimal, 总余额
|
|
|
|
|
+/// - `cross_wallet_balance`: Decimal, 全仓余额
|
|
|
|
|
+/// - `cross_un_pnl`: Decimal, 全仓持仓未实现盈亏
|
|
|
|
|
+/// - `available_balance`: Decimal, 下单可用余额
|
|
|
|
|
+/// - `max_withdraw_amount`: Decimal, 最大可转出余额
|
|
|
|
|
+/// - `margin_available`: bool, 是否可用作联合保证金
|
|
|
|
|
+/// - `update_time`: i64,时间戳
|
|
|
|
|
+#[derive(Debug, Deserialize, Serialize)]
|
|
|
|
|
+#[serde(rename_all = "camelCase")]
|
|
|
|
|
+struct SpotAccount {
|
|
|
|
|
+ coin: String,
|
|
|
|
|
+ available: String,
|
|
|
|
|
+ frozen: Decimal,
|
|
|
|
|
+ locked: Decimal,
|
|
|
|
|
+ limit_available: Decimal,
|
|
|
|
|
+ u_time: String,
|
|
|
|
|
+}
|
|
|
|
|
+/// 处理合约本位货币账户信息
|
|
|
|
|
+///
|
|
|
|
|
+/// pub(crate) fn handle_swap_account(data: String, symbol: String) -> Account;
|
|
|
|
|
+///
|
|
|
|
|
+/// - `data`:String, 交易所返回账户信息,JsonString
|
|
|
|
|
+/// - `symbol`:String, 交易币对
|
|
|
|
|
+pub(crate) fn handle_swap_account(data: String, symbol: String) -> Account {
|
|
|
|
|
+ let symbol_array: Vec<&str> = symbol.split("_").collect();
|
|
|
|
|
+ let balance_info_list: Vec<SwapAccount> = serde_json::from_str(&data).unwrap();
|
|
|
|
|
+ let balance_info = balance_info_list.iter().find(|item| item.asset == symbol_array[1]);
|
|
|
|
|
+ match balance_info {
|
|
|
|
|
+ None => {
|
|
|
|
|
+ panic!("格式化Binance账号信息错误,未找到该本位货币!\nhandle_account: balance_info={:?}", balance_info)
|
|
|
|
|
+ }
|
|
|
|
|
+ Some(value) => {
|
|
|
|
|
+ Account {
|
|
|
|
|
+ balance: value.balance,
|
|
|
|
|
+ available_balance: value.available_balance,
|
|
|
|
|
+ frozen_balance: value.balance - value.available_balance,
|
|
|
|
|
+ stocks: dec!(0),
|
|
|
|
|
+ available_stocks: dec!(0),
|
|
|
|
|
+ frozen_stocks: dec!(0),
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|