binance_spot_handle.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. use std::str::FromStr;
  2. use rust_decimal::Decimal;
  3. use rust_decimal_macros::dec;
  4. use exchanges::response_base::ResponseData;
  5. use crate::{MarketOrder, SpecialDepth, SpecialTicker};
  6. use crate::exchange::ExchangeEnum;
  7. use crate::handle_info::HandleSwapInfo;
  8. // 处理特殊Ticker信息
  9. pub fn handle_special_ticker(res_data: ResponseData) -> SpecialDepth {
  10. let res_data_str = res_data.data;
  11. let res_data_json: serde_json::Value = serde_json::from_str(&*res_data_str).unwrap();
  12. format_special_ticker(res_data_json, res_data.label)
  13. }
  14. pub fn format_special_ticker(data: serde_json::Value, label: String) -> SpecialDepth {
  15. let bp = Decimal::from_str(data["b"].as_str().unwrap()).unwrap();
  16. let bq = Decimal::from_str(data["B"].as_str().unwrap()).unwrap();
  17. let ap = Decimal::from_str(data["a"].as_str().unwrap()).unwrap();
  18. let aq = Decimal::from_str(data["A"].as_str().unwrap()).unwrap();
  19. let mp = (bp + ap) * dec!(0.5);
  20. let t = Decimal::from_str(&data["u"].to_string()).unwrap();
  21. let ticker_info = SpecialTicker { sell: ap, buy: bp, mid_price: mp, t };
  22. let depth_info = vec![bp, bq, ap, aq];
  23. SpecialDepth {
  24. name: label,
  25. depth: depth_info,
  26. ticker: ticker_info,
  27. t,
  28. }
  29. }
  30. // 处理特殊深度数据
  31. pub fn handle_special_depth(res_data: ResponseData) -> SpecialDepth {
  32. HandleSwapInfo::handle_special_depth(ExchangeEnum::BinanceSpot, res_data)
  33. }
  34. // 格式化深度信息
  35. pub fn format_depth_items(value: serde_json::Value) -> Vec<MarketOrder> {
  36. let mut depth_items: Vec<MarketOrder> = vec![];
  37. for value in value.as_array().unwrap() {
  38. depth_items.push(MarketOrder {
  39. price: Decimal::from_str(value[0].as_str().unwrap()).unwrap(),
  40. amount: Decimal::from_str(value[1].as_str().unwrap()).unwrap(),
  41. })
  42. }
  43. return depth_items;
  44. }