order_command_test.rs 4.4 KB

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