// use std::any::TypeId; // use std::collections::BTreeMap; // use std::sync::Arc; // use std::sync::atomic::AtomicBool; // use chrono::Utc; // use tokio::sync::mpsc::{channel, Sender}; // use tokio::try_join; // use tracing::trace; // use exchanges::binance_swap_rest::BinanceSwapRest; // use exchanges::binance_swap_ws::{BinanceSubscribeType, BinanceSwapWs, BinanceWsType}; // use exchanges::kucoin_swap_rest::KucoinSwapRest; // use exchanges::kucoin_swap_ws::{KucoinSubscribeType, KucoinSwapWs, KucoinWsType}; // use exchanges::okx_swap_rest::OkxSwapRest; // use exchanges::okx_swap_ws::{OkxSubscribeType, OkxSwapWs, OkxWsType}; // use exchanges::proxy; // use exchanges::response_base::ResponseData; // // const ACCESS_KEY: &str = ""; // const SECRET_KEY: &str = ""; // const PASS_KEY: &str = ""; // // // //ws-订阅公共频道信息 // #[tokio::test(flavor = "multi_thread", worker_threads = 5)] // async fn ws_custom_subscribe_pu() { // global::log_utils::init_log_with_trace(); // // let mut bool_v1 = Arc::new(AtomicBool::new(true)); // let mut btree_map: BTreeMap = BTreeMap::new(); // // btree_map.insert("access_key".to_string(), ACCESS_KEY.to_string()); // // btree_map.insert("secret_key".to_string(), SECRET_KEY.to_string()); // // btree_map.insert("pass_key".to_string(), PASS_KEY.to_string()); // let (tx, mut rx) = channel(1024); // let mut ws = get_ws(btree_map, OkxWsType::Public, tx).await; // ws.set_subscribe(vec![ // // OkxSubscribeType::PuIndexTickers, // OkxSubscribeType::PuBooks5, // // OkxSubscribeType::Putrades, // // OkxSubscribeType::PuBooks50L2tbt, // ]); // // let t1 = tokio::spawn(async move { // ws.custom_subscribe(bool_v1, vec!["BTC-USDT".to_string()]).await; // }); // // // let t2 = tokio::spawn(async move { // loop { // if let Ok(received) = rx.try_recv() { // // trace!( "age: {:?}", received.reach_time); // let now = Utc::now(); // let total_micros = now.timestamp_micros(); // // trace!( "age: ts-{:?}------time:{:?}---管道耗时时间:{:?}", received.reach_time,received.time,(total_micros - received.time)); // } // } // }); // try_join!(t1,t2).unwrap(); // } // // //ws-订阅私有频道信息 // #[tokio::test(flavor = "multi_thread", worker_threads = 2)] // async fn ws_custom_subscribe_bu() { // global::log_utils::init_log_with_trace(); // } // // //ws-订阅私有频道信息 // #[tokio::test(flavor = "multi_thread", worker_threads = 2)] // async fn ws_custom_subscribe_pr() { // global::log_utils::init_log_with_trace(); // // let mut bool_v1 = Arc::new(AtomicBool::new(true)); // let mut btree_map: BTreeMap = BTreeMap::new(); // // btree_map.insert("access_key".to_string(), ACCESS_KEY.to_string()); // btree_map.insert("secret_key".to_string(), SECRET_KEY.to_string()); // btree_map.insert("pass_key".to_string(), PASS_KEY.to_string()); // // let (tx, mut rx) = channel(1024); // let mut ws = get_ws(btree_map, OkxWsType::Private, tx).await; // ws.set_subscribe(vec![ // OkxSubscribeType::PrBalanceAndPosition, // // OkxSubscribeType::PrAccount("USDT".to_string()), // OkxSubscribeType::PrOrders, // OkxSubscribeType::PrPositions, // ]); // // let t1 = tokio::spawn(async move { // ws.custom_subscribe(bool_v1, vec!["BTC-USDT".to_string()]).await; // }); // // let t2 = tokio::spawn(async move { // loop { // if let Ok(received) = rx.try_recv() { // trace!( "age: {:?}", received); // } // } // }); // try_join!(t1,t2).unwrap(); // } // // // //rest-订单查询 // #[tokio::test] // async fn rest_get_order_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_order("BTC-USDT".to_string(), "3333".to_string(), "".to_string()).await; // println!("okx--订单查询--{:?}", req_data); // } // // // //rest-未完成的订单 // #[tokio::test] // async fn rest_get_incomplete_order_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_incomplete_order("BTC-USDT".to_string()).await; // println!("okx--未完成的订单--{:?}", req_data); // } // // //rest-获取系统时间 // #[tokio::test] // async fn rest_get_server_time_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_server_time().await; // println!("okx--获取系统时间--{:?}", req_data); // } // // //rest-查看持仓信息 // #[tokio::test] // async fn rest_get_positions_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_positions("SWA1P".to_string()).await; // println!("okx--查看持仓信息--{:?}", req_data); // } // // //rest-获取单个产品行情信息 // #[tokio::test] // async fn rest_get_ticker_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_ticker("BTC-USD".to_string()).await; // println!("okx--获取单个产品行情信息--{:?}", req_data); // } // // //rest-查看账户余额 // #[tokio::test] // async fn rest_get_balance_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_balance("BTC,ETH".to_string()).await; // println!("okx--查看账户余额--{:?}", req_data); // } // // //rest-获取交易产品基础信息 // #[tokio::test] // async fn rest_get_instruments_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_instruments().await; // println!("okx--获取交易产品基础信息--{:?}", req_data); // } // // //rest-获取成交明细(近三天) // #[tokio::test] // async fn rest_get_trade_fills_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_trade_fills("".to_string()).await; // println!("okx--获取成交明细(近三天)--{:?}", req_data); // } // // //rest-撤单 // #[tokio::test] // async fn rest_cancel_order_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.cancel_order("BTC-USD".to_string(), "1111".to_string(), "".to_string()).await; // println!("okx--撤单--{:?}", req_data); // } // // //rest-设置杠杆倍数 // #[tokio::test] // async fn rest_set_leverage_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.set_leverage("BTC-USDT".to_string(), "5".to_string()).await; // println!("okx--设置杠杆倍数--{:?}", req_data); // } // // //rest-设置持仓模式 // #[tokio::test] // async fn rest_set_position_mode_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.set_position_mode().await; // println!("okx--设置持仓模式--{:?}", req_data); // } // // //rest-获取历史订单记录(近七天) // #[tokio::test] // async fn rest_get_orders_history_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_orders_history("".to_string(), // "".to_string(), // "filled".to_string(), // "".to_string(), // "".to_string(), // "".to_string(), // ).await; // println!("okx--获取历史订单记录--{:?}", req_data); // } // // //rest-获取历史成交数据(近七天) // #[tokio::test] // async fn rest_get_trades_test() { // global::log_utils::init_log_with_trace(); // // let mut ret = get_rest(); // let req_data = ret.get_trades("".to_string(), // "".to_string(), // "".to_string(), // "".to_string(), // "".to_string(), // "100".to_string(), // ).await; // println!("okx--获取历史成交数据--{:?}", req_data); // } // // // // async fn get_ws(btree_map: BTreeMap, type_v: OkxWsType, tx: Sender) -> OkxSwapWs { // let mut ku_ws = OkxSwapWs::new(false, btree_map.clone(), type_v, tx); // ku_ws // } // // fn get_rest() -> OkxSwapRest { // let mut btree_map: BTreeMap = BTreeMap::new(); // btree_map.insert("access_key".to_string(), ACCESS_KEY.to_string()); // btree_map.insert("secret_key".to_string(), SECRET_KEY.to_string()); // btree_map.insert("pass_key".to_string(), PASS_KEY.to_string()); // // let mut okx_exc = OkxSwapRest::new(false, btree_map.clone()); // okx_exc // }