handle_ticker.rs 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. use std::str::FromStr;
  2. use rust_decimal::Decimal;
  3. use rust_decimal_macros::dec;
  4. use tracing::{error, info};
  5. use crate::binance_swap::binance_swap_standard;
  6. use crate::gate_swap::gate_swap_standard;
  7. use crate::struct_standard::{AggTrades, Trades};
  8. pub async fn get_gate_ticker_info(symbol: &str, start_at: &str, end_at: &str) -> Vec<Trades> {
  9. let market_info = gate_swap_standard::standard_market(symbol).await;
  10. let ct_val = market_info.unwrap().ct_val;
  11. let mut end_time = end_at.to_string();
  12. let mut ticker_info_list: Vec<Trades> = vec![];
  13. loop {
  14. info!("正在查询 Gate 信息,请稍后!");
  15. let ticker_info = gate_swap_standard::standard_trades(symbol, start_at, &end_time, Option::from(ct_val)).await;
  16. match ticker_info {
  17. Ok(value) => {
  18. ticker_info_list.extend(value.clone());
  19. if value.len() >= 1000 {
  20. end_time = (Decimal::from_str(&value[0].create_time).unwrap() / dec!(1000)).ceil().to_string();
  21. } else {
  22. break;
  23. }
  24. }
  25. Err(err) => {
  26. error!("{}", err.to_string());
  27. }
  28. };
  29. };
  30. let mut set = std::collections::HashSet::new();
  31. ticker_info_list.clone().into_iter().filter(|e| set.insert(e.clone())).collect()
  32. }
  33. pub async fn get_binance_ticker_info(symbol: &str, start_at: &str, end_at: &str) -> Vec<Trades> {
  34. let mut agg_ticker_info_list: Vec<AggTrades> = vec![];
  35. let start_at_d = Decimal::from_str(start_at).unwrap();
  36. let end_at_d = Decimal::from_str(end_at).unwrap();
  37. let end_time = if end_at_d - start_at_d > dec!(3600) { (start_at_d + dec!(3600)).to_string() } else { end_at_d.to_string() };
  38. info!("正在查询 Binance 信息,请稍后!");
  39. let agg_trades_first = binance_swap_standard::standard_agg_trades(symbol, start_at, &end_time, "").await.unwrap();
  40. agg_ticker_info_list.extend(agg_trades_first.clone());
  41. if agg_trades_first.len() >= 1000 {
  42. let mut trade_id = (Decimal::from_str(&agg_trades_first[agg_trades_first.len() - 1].id.clone()).unwrap() + Decimal::ONE).to_string();
  43. loop {
  44. info!("正在查询 Binance 信息,请稍后!");
  45. let agg_trades_info = binance_swap_standard::standard_agg_trades(symbol, "", "", &trade_id).await;
  46. match agg_trades_info {
  47. Ok(value) => {
  48. agg_ticker_info_list.extend(value.clone());
  49. if value.len() >= 1000 && value[value.len() - 1].create_time <= end_at.to_string() {
  50. trade_id = (Decimal::from_str(&value[value.len() - 1].id.clone()).unwrap() + Decimal::ONE).to_string();
  51. } else {
  52. break;
  53. }
  54. }
  55. Err(err) => {
  56. error!("{}", err.to_string());
  57. }
  58. }
  59. }
  60. }
  61. agg_ticker_info_list = agg_ticker_info_list.iter().filter(|item| item.create_time <= end_at.to_string()).cloned().collect();
  62. let mut ticker_info_list: Vec<Trades> = vec![];
  63. for agg_trades in agg_ticker_info_list.clone() {
  64. ticker_info_list.push(Trades {
  65. id: agg_trades.start_id,
  66. symbol: agg_trades.symbol,
  67. create_time: agg_trades.create_time,
  68. size: agg_trades.size,
  69. price: agg_trades.price,
  70. })
  71. // let id_diff = Decimal::from_str(&agg_trades.end_id).unwrap() - Decimal::from_str(&agg_trades.start_id).unwrap();
  72. // if id_diff > Decimal::ONE {
  73. // println!("{},{},{},{}", agg_ticker_info_list[agg_ticker_info_list.len() - 1].id, agg_trades.id, agg_trades.start_id, agg_trades.end_id);
  74. // let trades_info = binance_swap_standard::standard_trades(symbol, &(id_diff + dec!(1)).to_string(), &agg_trades.start_id).await;
  75. // ticker_info_list.extend(trades_info.unwrap());
  76. // } else {
  77. // ticker_info_list.push(Trades {
  78. // id: agg_trades.start_id,
  79. // symbol: agg_trades.symbol,
  80. // create_time: agg_trades.create_time,
  81. // size: agg_trades.size,
  82. // price: agg_trades.price,
  83. // })
  84. // }
  85. }
  86. ticker_info_list
  87. }