|
|
@@ -9,6 +9,9 @@ use exchanges::response_base::ResponseData;
|
|
|
use global::trace_stack::{TraceStack};
|
|
|
use crate::core::Core;
|
|
|
use exchanges::binance_swap_ws::{BinanceSwapSubscribeType, BinanceSwapWs, BinanceSwapWsType};
|
|
|
+use standard::exchange::ExchangeEnum;
|
|
|
+use standard::exchange_struct_handler::ExchangeStructHandler;
|
|
|
+use crate::exchange_disguise::{on_depth, on_trade};
|
|
|
|
|
|
// 参考 币安 合约 启动
|
|
|
pub(crate) async fn reference_binance_swap_run(is_shutdown_arc: Arc<AtomicBool>,
|
|
|
@@ -21,71 +24,59 @@ pub(crate) async fn reference_binance_swap_run(is_shutdown_arc: Arc<AtomicBool>,
|
|
|
//创建读写通道
|
|
|
let (write_tx, write_rx) = futures_channel::mpsc::unbounded::<Message>();
|
|
|
let mut ws = BinanceSwapWs::new_label(name, is_colo, None, BinanceSwapWsType::Public).await;
|
|
|
- ws.set_symbols(symbols);
|
|
|
ws.set_subscribe(vec![
|
|
|
- // BinanceSwapSubscribeType::PuDepth20levels100ms,
|
|
|
BinanceSwapSubscribeType::PuBookTicker,
|
|
|
- // BinanceSwapSubscribeType::PuAggTrade
|
|
|
+ BinanceSwapSubscribeType::PuAggTrade
|
|
|
]);
|
|
|
|
|
|
// 读取数据
|
|
|
- let mut update_flag_u = Decimal::ZERO;
|
|
|
let core_arc_clone = Arc::clone(&core_arc);
|
|
|
+ let multiplier = core_arc_clone.lock().await.platform_rest.get_self_market().multiplier;
|
|
|
+ let run_symbol = symbols.clone()[0].clone();
|
|
|
+
|
|
|
let fun = move |data: ResponseData| {
|
|
|
// 在 async 块之前克隆 Arc
|
|
|
let core_arc_cc = core_arc_clone.clone();
|
|
|
+ let mul = multiplier.clone();
|
|
|
+ let rs = run_symbol.clone();
|
|
|
+
|
|
|
async move {
|
|
|
// 使用克隆后的 Arc,避免 move 语义
|
|
|
- on_data(core_arc_cc,
|
|
|
- &mut update_flag_u,
|
|
|
- data).await
|
|
|
+ on_public_data(core_arc_cc, &mul, &rs, &data).await
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 链接
|
|
|
let write_tx_am = Arc::new(Mutex::new(write_tx));
|
|
|
+ ws.set_symbols(symbols);
|
|
|
ws.ws_connect_async(is_shutdown_arc, fun, &write_tx_am, write_rx).await.expect("链接失败");
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-async fn on_data(_core_arc_clone: Arc<Mutex<Core>>,
|
|
|
- _update_flag_u: &mut Decimal,
|
|
|
- response: ResponseData) {
|
|
|
+async fn on_public_data(core_arc: Arc<Mutex<Core>>, multiplier: &Decimal, _run_symbol: &String, response: &ResponseData) {
|
|
|
let mut trace_stack = TraceStack::new(response.time, response.ins);
|
|
|
trace_stack.on_after_span_line();
|
|
|
|
|
|
match response.channel.as_str() {
|
|
|
- // "aggTrade" => {
|
|
|
- // // let trade: OriginalTradeBa = serde_json::from_str(data.data.as_str()).unwrap();
|
|
|
- // // let name = data.label.clone();
|
|
|
- //
|
|
|
- // // 订单流逻辑
|
|
|
- // // on_trade(trade.clone(), core_arc_clone.clone()).await;
|
|
|
- //
|
|
|
- // // 原本的逻辑
|
|
|
- // // let mut core = core_arc_clone.lock().await;
|
|
|
- // // let str = data.label.clone();
|
|
|
- // // if core.is_update.contains_key(&data.label) && *core.is_update.get(str.as_str()).unwrap() {
|
|
|
- // // *_max_buy = Decimal::ZERO;
|
|
|
- // // *_min_sell = Decimal::ZERO;
|
|
|
- // // core.is_update.remove(str.as_str());
|
|
|
- // // }
|
|
|
- // // if trade.p > *_max_buy || *_max_buy == Decimal::ZERO {
|
|
|
- // // *_max_buy = trade.p
|
|
|
- // // }
|
|
|
- // // if trade.p < *_min_sell || *_min_sell == Decimal::ZERO {
|
|
|
- // // *_min_sell = trade.p
|
|
|
- // // }
|
|
|
- // // core.max_buy_min_sell_cache.insert(data.label, vec![*_max_buy, *_min_sell]);
|
|
|
- // }
|
|
|
- // "bookTicker" => {
|
|
|
- // trace_stack.set_source("binance_usdt_swap.bookTicker".to_string());
|
|
|
- // // 将ticker数据转换为模拟深度
|
|
|
- // let special_depth = standard::handle_info::HandleSwapInfo::handle_book_ticker(BinanceSwap, &response);
|
|
|
- // trace_stack.on_after_format();
|
|
|
- //
|
|
|
- // on_special_depth(core_arc_clone, update_flag_u, &response.label, &mut trace_stack, &special_depth).await;
|
|
|
- // }
|
|
|
+ "aggTrade" => {
|
|
|
+ trace_stack.set_source("binance_usdt_swap.aggTrade".to_string());
|
|
|
+ let mut trades = ExchangeStructHandler::trades_handle(ExchangeEnum::BinanceSwap, response, multiplier);
|
|
|
+ trace_stack.on_after_format();
|
|
|
+
|
|
|
+ for trade in trades.iter_mut() {
|
|
|
+ let core_arc_clone = core_arc.clone();
|
|
|
+
|
|
|
+ on_trade(core_arc_clone, &response.label, &mut trace_stack, &trade).await;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ "bookTicker" => {
|
|
|
+ trace_stack.set_source("binance_usdt_swap.bookTicker".to_string());
|
|
|
+ // 将ticker数据转换为模拟深度
|
|
|
+ let depth = ExchangeStructHandler::book_ticker_handle(ExchangeEnum::BinanceSwap, response, multiplier);
|
|
|
+ trace_stack.on_after_format();
|
|
|
+
|
|
|
+ on_depth(core_arc, &response.label, &mut trace_stack, &depth).await;
|
|
|
+ }
|
|
|
// "depth" => {
|
|
|
// trace_stack.set_source("binance_usdt_swap.depth".to_string());
|
|
|
// // 将depth数据转换为模拟深度
|