|
|
@@ -18,7 +18,7 @@ pub struct DepthParam {
|
|
|
pub depth_asks: Vec<MarketOrder>,
|
|
|
pub depth_bids: Vec<MarketOrder>,
|
|
|
pub t: Decimal,
|
|
|
- pub create_at: i64
|
|
|
+ pub create_at: i64,
|
|
|
}
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
@@ -47,7 +47,7 @@ impl HandleSwapInfo {
|
|
|
// },
|
|
|
ExchangeEnum::BitgetSwap => {
|
|
|
bitget_swap_handle::handle_account_info(res_data, symbol)
|
|
|
- },
|
|
|
+ }
|
|
|
ExchangeEnum::BybitSwap => {
|
|
|
bybit_swap_handle::handle_account_info(res_data, symbol)
|
|
|
}
|
|
|
@@ -64,19 +64,19 @@ impl HandleSwapInfo {
|
|
|
}
|
|
|
}
|
|
|
// 处理特殊Ticket信息
|
|
|
- pub fn handle_book_ticker(exchange: ExchangeEnum, res_data: &ResponseData) -> SpecialDepth {
|
|
|
+ pub fn handle_book_ticker(exchange: ExchangeEnum, res_data: &ResponseData, symbol_multiplier: Decimal) -> SpecialDepth {
|
|
|
match exchange {
|
|
|
// ExchangeEnum::BinanceSpot => {
|
|
|
// binance_spot_handle::handle_special_ticker(res_data)
|
|
|
// }
|
|
|
ExchangeEnum::BinanceSwap => {
|
|
|
- binance_swap_handle::handle_book_ticker(res_data)
|
|
|
+ binance_swap_handle::handle_book_ticker(res_data, symbol_multiplier)
|
|
|
}
|
|
|
ExchangeEnum::GateSwap => {
|
|
|
- gate_swap_handle::handle_book_ticker(res_data)
|
|
|
+ gate_swap_handle::handle_book_ticker(res_data, symbol_multiplier)
|
|
|
}
|
|
|
ExchangeEnum::KucoinSwap => {
|
|
|
- kucoin_handle::handle_book_ticker(res_data)
|
|
|
+ kucoin_handle::handle_book_ticker(res_data, symbol_multiplier)
|
|
|
}
|
|
|
// ExchangeEnum::KucoinSpot => {
|
|
|
// kucoin_spot_handle::handle_special_ticker(res_data)
|
|
|
@@ -94,12 +94,12 @@ impl HandleSwapInfo {
|
|
|
info!(?res_data);
|
|
|
panic!("BitgetSwap 85 未实现格式化");
|
|
|
// bitget_swap_handle::handle_special_ticker(res_data)
|
|
|
- },
|
|
|
+ }
|
|
|
ExchangeEnum::BybitSwap => {
|
|
|
- bybit_swap_handle::handle_ticker(res_data)
|
|
|
+ bybit_swap_handle::handle_ticker(res_data, symbol_multiplier)
|
|
|
}
|
|
|
ExchangeEnum::CoinexSwap => {
|
|
|
- coinex_swap_handle::handle_ticker(res_data)
|
|
|
+ coinex_swap_handle::handle_ticker(res_data, symbol_multiplier)
|
|
|
}
|
|
|
ExchangeEnum::HtxSwap => {
|
|
|
SpecialDepth::new()
|
|
|
@@ -133,7 +133,7 @@ impl HandleSwapInfo {
|
|
|
// },
|
|
|
ExchangeEnum::BitgetSwap => {
|
|
|
bitget_swap_handle::handle_position(res_data, ct_val)
|
|
|
- },
|
|
|
+ }
|
|
|
ExchangeEnum::BybitSwap => {
|
|
|
bybit_swap_handle::handle_position(res_data, ct_val)
|
|
|
}
|
|
|
@@ -169,7 +169,7 @@ impl HandleSwapInfo {
|
|
|
// },
|
|
|
ExchangeEnum::BitgetSwap => {
|
|
|
bitget_swap_handle::handle_order(res_data, ct_val)
|
|
|
- },
|
|
|
+ }
|
|
|
ExchangeEnum::BybitSwap => {
|
|
|
bybit_swap_handle::handle_order(res_data, ct_val)
|
|
|
}
|
|
|
@@ -183,17 +183,17 @@ impl HandleSwapInfo {
|
|
|
}
|
|
|
|
|
|
// 处理深度信息
|
|
|
- pub fn handle_special_depth(exchange: ExchangeEnum, res_data: &ResponseData) -> SpecialDepth {
|
|
|
+ pub fn handle_special_depth(exchange: ExchangeEnum, res_data: &ResponseData, symbol_multiplier: Decimal) -> SpecialDepth {
|
|
|
let label = res_data.label.clone();
|
|
|
// 格式化
|
|
|
- let mut format_depth = format_depth(exchange, res_data);
|
|
|
+ let mut format_depth = format_depth(exchange, res_data, symbol_multiplier);
|
|
|
// 运算、组装
|
|
|
- make_special_depth(label, &mut format_depth.depth_asks, &mut format_depth.depth_bids, format_depth.t, format_depth.create_at)
|
|
|
+ make_special_depth(label, &mut format_depth.depth_asks, &mut format_depth.depth_bids, format_depth.t, format_depth.create_at, symbol_multiplier)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
-pub fn make_special_depth(label: String, depth_asks: &mut Vec<MarketOrder>, depth_bids: &mut Vec<MarketOrder>, t: Decimal, create_at: i64) -> SpecialDepth {
|
|
|
+pub fn make_special_depth(label: String, depth_asks: &mut Vec<MarketOrder>, depth_bids: &mut Vec<MarketOrder>, t: Decimal, create_at: i64, symbol_multiplier: Decimal) -> SpecialDepth {
|
|
|
depth_asks.sort_by(|a, b| a.price.partial_cmp(&b.price).unwrap_or(Ordering::Equal));
|
|
|
depth_bids.sort_by(|a, b| b.price.partial_cmp(&a.price).unwrap_or(Ordering::Equal));
|
|
|
// TODO 不排序的话,有4us可以省下来。
|
|
|
@@ -205,11 +205,11 @@ pub fn make_special_depth(label: String, depth_asks: &mut Vec<MarketOrder>, dept
|
|
|
let mut bv: Vec<Decimal> = Vec::new();
|
|
|
for i in 0..public_params::LEVEL {
|
|
|
let price = (depth_asks[0].price + step * Decimal::from_f64(i as f64).unwrap()).round_dp(depth_asks[0].price.scale());
|
|
|
- ap.push(price);
|
|
|
+ ap.push(price / symbol_multiplier);
|
|
|
}
|
|
|
for i in 0..public_params::LEVEL {
|
|
|
let price = (depth_bids[0].price - step * Decimal::from_f64(i as f64).unwrap()).round_dp(depth_bids[0].price.scale());
|
|
|
- bp.push(price);
|
|
|
+ bp.push(price / symbol_multiplier);
|
|
|
}
|
|
|
let mut ap_price_tag = depth_asks[0].price + step;
|
|
|
let mut ap_index = 0;
|
|
|
@@ -247,7 +247,7 @@ pub fn make_special_depth(label: String, depth_asks: &mut Vec<MarketOrder>, dept
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- let ticker_info = SpecialTicker { sell: depth_asks[0].price, buy: depth_bids[0].price, mid_price: mp, t, create_at };
|
|
|
+ let ticker_info = SpecialTicker { sell: depth_asks[0].price / symbol_multiplier, buy: depth_bids[0].price / symbol_multiplier, mid_price: mp / symbol_multiplier, t, create_at };
|
|
|
let depth_info = bp.iter().cloned().chain(bv.iter().cloned()).chain(ap.iter().cloned()).chain(av.iter().cloned()).collect();
|
|
|
SpecialDepth {
|
|
|
name: label,
|
|
|
@@ -258,7 +258,7 @@ pub fn make_special_depth(label: String, depth_asks: &mut Vec<MarketOrder>, dept
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-pub fn format_depth(exchange: ExchangeEnum, res_data: &ResponseData) -> DepthParam {
|
|
|
+pub fn format_depth(exchange: ExchangeEnum, res_data: &ResponseData, symbol_multiplier: Decimal) -> DepthParam {
|
|
|
let depth_asks: Vec<MarketOrder>;
|
|
|
let depth_bids: Vec<MarketOrder>;
|
|
|
let t: Decimal;
|
|
|
@@ -271,21 +271,21 @@ pub fn format_depth(exchange: ExchangeEnum, res_data: &ResponseData) -> DepthPar
|
|
|
// create_at = 0;
|
|
|
// }
|
|
|
ExchangeEnum::BinanceSwap => {
|
|
|
- depth_asks = binance_swap_handle::format_depth_items(res_data.data["a"].clone());
|
|
|
- depth_bids = binance_swap_handle::format_depth_items(res_data.data["b"].clone());
|
|
|
+ depth_asks = binance_swap_handle::format_depth_items(res_data.data["a"].clone(), symbol_multiplier);
|
|
|
+ depth_bids = binance_swap_handle::format_depth_items(res_data.data["b"].clone(), symbol_multiplier);
|
|
|
t = Decimal::from_str(&res_data.data["u"].to_string()).unwrap();
|
|
|
create_at = res_data.data["E"].as_i64().unwrap() * 1000;
|
|
|
}
|
|
|
ExchangeEnum::GateSwap => {
|
|
|
- depth_asks = gate_swap_handle::format_depth_items(&res_data.data["asks"]);
|
|
|
- depth_bids = gate_swap_handle::format_depth_items(&res_data.data["bids"]);
|
|
|
+ depth_asks = gate_swap_handle::format_depth_items(&res_data.data["asks"], symbol_multiplier);
|
|
|
+ depth_bids = gate_swap_handle::format_depth_items(&res_data.data["bids"], symbol_multiplier);
|
|
|
// todo! 有id可以取 保证与py一致
|
|
|
t = Decimal::from_str(&res_data.data["t"].to_string()).unwrap();
|
|
|
create_at = res_data.data["t"].as_i64().unwrap() * 1000;
|
|
|
}
|
|
|
ExchangeEnum::KucoinSwap => {
|
|
|
- depth_asks = kucoin_handle::format_depth_items(res_data.data["asks"].clone());
|
|
|
- depth_bids = kucoin_handle::format_depth_items(res_data.data["bids"].clone());
|
|
|
+ depth_asks = kucoin_handle::format_depth_items(res_data.data["asks"].clone(), symbol_multiplier);
|
|
|
+ depth_bids = kucoin_handle::format_depth_items(res_data.data["bids"].clone(), symbol_multiplier);
|
|
|
t = Decimal::from_str(&res_data.data["sequence"].to_string()).unwrap();
|
|
|
create_at = res_data.data["ts"].as_i64().unwrap() * 1000;
|
|
|
}
|
|
|
@@ -308,29 +308,29 @@ pub fn format_depth(exchange: ExchangeEnum, res_data: &ResponseData) -> DepthPar
|
|
|
// create_at = res_data_json[0]["ts"].as_str().unwrap().parse::<i64>().unwrap() * 1000;
|
|
|
// }
|
|
|
ExchangeEnum::BitgetSwap => {
|
|
|
- depth_asks = bitget_swap_handle::format_depth_items(res_data.data[0]["asks"].clone());
|
|
|
- depth_bids = bitget_swap_handle::format_depth_items(res_data.data[0]["bids"].clone());
|
|
|
+ depth_asks = bitget_swap_handle::format_depth_items(res_data.data[0]["asks"].clone(), symbol_multiplier);
|
|
|
+ depth_bids = bitget_swap_handle::format_depth_items(res_data.data[0]["bids"].clone(), symbol_multiplier);
|
|
|
t = Decimal::from_str(res_data.data[0]["ts"].as_str().unwrap()).unwrap();
|
|
|
create_at = res_data.data[0]["ts"].as_str().unwrap().parse::<i64>().unwrap() * 1000;
|
|
|
}
|
|
|
ExchangeEnum::BybitSwap => {
|
|
|
- depth_asks = bybit_swap_handle::format_depth_items(res_data.data["a"].clone());
|
|
|
- depth_bids = bybit_swap_handle::format_depth_items(res_data.data["b"].clone());
|
|
|
+ depth_asks = bybit_swap_handle::format_depth_items(res_data.data["a"].clone(), symbol_multiplier);
|
|
|
+ depth_bids = bybit_swap_handle::format_depth_items(res_data.data["b"].clone(), symbol_multiplier);
|
|
|
t = Decimal::from_i64(res_data.reach_time).unwrap();
|
|
|
create_at = res_data.reach_time * 1000;
|
|
|
- },
|
|
|
+ }
|
|
|
ExchangeEnum::CoinexSwap => {
|
|
|
let depth = &res_data.data["depth"];
|
|
|
- depth_asks = coinex_swap_handle::format_depth_items(&depth["asks"].clone());
|
|
|
- depth_bids = coinex_swap_handle::format_depth_items(&depth["bids"].clone());
|
|
|
+ depth_asks = coinex_swap_handle::format_depth_items(&depth["asks"].clone(), symbol_multiplier);
|
|
|
+ depth_bids = coinex_swap_handle::format_depth_items(&depth["bids"].clone(), symbol_multiplier);
|
|
|
let time = depth.get("updated_at").unwrap().as_i64().unwrap_or(0i64);
|
|
|
t = Decimal::from_i64(time).unwrap();
|
|
|
create_at = time * 1000;
|
|
|
}
|
|
|
ExchangeEnum::HtxSwap => {
|
|
|
let depth = &res_data.data;
|
|
|
- depth_asks = htx_swap_handle::format_depth_items(depth["asks"].clone());
|
|
|
- depth_bids = htx_swap_handle::format_depth_items(depth["bids"].clone());
|
|
|
+ depth_asks = htx_swap_handle::format_depth_items(depth["asks"].clone(), symbol_multiplier);
|
|
|
+ depth_bids = htx_swap_handle::format_depth_items(depth["bids"].clone(), symbol_multiplier);
|
|
|
let time = depth["ts"].to_string().parse::<i64>().unwrap();
|
|
|
t = Decimal::from_i64(time).unwrap();
|
|
|
create_at = time * 1000;
|
|
|
@@ -341,7 +341,7 @@ pub fn format_depth(exchange: ExchangeEnum, res_data: &ResponseData) -> DepthPar
|
|
|
depth_asks,
|
|
|
depth_bids,
|
|
|
t,
|
|
|
- create_at
|
|
|
+ create_at,
|
|
|
}
|
|
|
}
|
|
|
|