order_command_test.rs 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. use std::collections::{BTreeMap};
  2. use std::{env};
  3. use tokio::sync::mpsc;
  4. use std::io::Error;
  5. use std::time::Duration;
  6. use tracing::{error, info};
  7. use exchanges::proxy;
  8. use standard::exchange::{Exchange, ExchangeEnum};
  9. use standard::{Order, OrderCommand};
  10. #[tokio::test]
  11. async fn main() {
  12. if proxy::ParsingDetail::http_enable_proxy() {
  13. println!("检测有代理配置,配置走代理")
  14. }
  15. let mut params: BTreeMap<String, String> = BTreeMap::new();
  16. let access_key = env::var("gate_access_key").unwrap_or("".to_string());
  17. let secret_key = env::var("gate_secret_key").unwrap_or("".to_string());
  18. params.insert("access_key".to_string(), access_key);
  19. params.insert("secret_key".to_string(), secret_key);
  20. let (order_sender, mut order_receiver) = mpsc::channel::<Order>(100);
  21. let (error_sender, mut error_receiver) = mpsc::channel::<Error>(100);
  22. global::log_utils::init_log_with_info();
  23. let exchange = Exchange::new(ExchangeEnum::GateSwap, "BTC_USDT".to_string(), false,
  24. params, order_sender.clone(), error_sender.clone()).await;
  25. let main_thread = tokio::spawn(async move {
  26. let client_id_0 = "123425678".to_string();
  27. let client_id_1 = "123452679".to_string();
  28. loop {
  29. // 下单
  30. info!("下单");
  31. let mut command = OrderCommand::new();
  32. command.limits_open.insert("BTC_USDT1".to_string(), vec!["0.0001".to_string(), "kd".to_string(), "24000".to_string(), client_id_0.clone()]);
  33. command.limits_open.insert("BTC_USDT2".to_string(), vec!["0.0001".to_string(), "kk".to_string(), "28000".to_string(), client_id_1.clone()]);
  34. exchange.command_order(command.clone()).await;
  35. tokio::time::sleep(Duration::from_secs(5)).await;
  36. // 查单
  37. info!("查单");
  38. let mut command = OrderCommand::new();
  39. command.check.insert("BTC_USDT1".to_string(), vec![client_id_0.clone(), "".to_string()]);
  40. command.check.insert("BTC_USDT2".to_string(), vec![client_id_1.clone(), "".to_string()]);
  41. exchange.command_order(command.clone()).await;
  42. tokio::time::sleep(Duration::from_secs(5)).await;
  43. // 撤单
  44. info!("撤单");
  45. let mut command = OrderCommand::new();
  46. command.cancel.insert("BTC_USDT1".to_string(), vec![client_id_0.clone(), "".to_string()]);
  47. command.cancel.insert("BTC_USDT2".to_string(), vec![client_id_1.clone(), "".to_string()]);
  48. exchange.command_order(command.clone()).await;
  49. tokio::time::sleep(Duration::from_secs(10)).await;
  50. }
  51. });
  52. let handler_thread = tokio::spawn(async move {
  53. info!("handler_thread被创建");
  54. loop {
  55. match order_receiver.recv().await {
  56. Some(order) => {
  57. info!(?order)
  58. },
  59. None => {
  60. error!("Channel has been closed!");
  61. break;
  62. }
  63. }
  64. }
  65. });
  66. let error_handler_thread = tokio::spawn(async move {
  67. info!("error_handler_thread被创建");
  68. loop {
  69. match error_receiver.recv().await {
  70. Some(error) => error!(?error),
  71. None => {
  72. error!("Channel has been closed!");
  73. break;
  74. }
  75. }
  76. }
  77. });
  78. tokio::try_join!(main_thread, handler_thread, error_handler_thread).unwrap();
  79. }