order_command_test.rs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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, subscriber, trace};
  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 exchange = Exchange::new(ExchangeEnum::GateSwap, "BTC_USDT".to_string(), false, params);
  21. global::log_utils::init_log_with_info();
  22. let (order_sender, mut order_receiver) = mpsc::channel::<Order>(100);
  23. let (error_sender, mut error_receiver) = mpsc::channel::<Error>(100);
  24. let main_thread = tokio::spawn(async move {
  25. let client_id_0 = "123425678".to_string();
  26. let client_id_1 = "123452679".to_string();
  27. loop {
  28. // 下单
  29. info!("下单");
  30. let mut command = OrderCommand::new();
  31. command.limits_open.insert("BTC_USDT1".to_string(), vec!["0.0001".to_string(), "pd".to_string(), "28000".to_string(), client_id_0.clone()]);
  32. command.limits_open.insert("BTC_USDT2".to_string(), vec!["0.0001".to_string(), "pk".to_string(), "25000".to_string(), client_id_1.clone()]);
  33. exchange.command_order(command.clone(), order_sender.clone(), error_sender.clone()).await;
  34. tokio::time::sleep(Duration::from_secs(5)).await;
  35. // 查单
  36. info!("查单");
  37. let mut command = OrderCommand::new();
  38. command.check.insert("BTC_USDT1".to_string(), vec![client_id_0.clone(), "".to_string()]);
  39. command.check.insert("BTC_USDT2".to_string(), vec![client_id_1.clone(), "".to_string()]);
  40. exchange.command_order(command.clone(), order_sender.clone(), error_sender.clone()).await;
  41. tokio::time::sleep(Duration::from_secs(5)).await;
  42. // 撤单
  43. info!("撤单");
  44. let mut command = OrderCommand::new();
  45. command.cancel.insert("BTC_USDT1".to_string(), vec![client_id_0.clone(), "".to_string()]);
  46. command.cancel.insert("BTC_USDT2".to_string(), vec![client_id_1.clone(), "".to_string()]);
  47. exchange.command_order(command.clone(), order_sender.clone(), error_sender.clone()).await;
  48. tokio::time::sleep(Duration::from_secs(10)).await;
  49. }
  50. });
  51. let handler_thread = tokio::spawn(async move {
  52. info!("handler_thread被创建");
  53. loop {
  54. match order_receiver.recv().await {
  55. Some(order) => {
  56. info!(?order)
  57. },
  58. None => {
  59. error!("Channel has been closed!");
  60. break;
  61. }
  62. }
  63. }
  64. });
  65. let error_handler_thread = tokio::spawn(async move {
  66. info!("error_handler_thread被创建");
  67. loop {
  68. match error_receiver.recv().await {
  69. Some(error) => error!(?error),
  70. None => {
  71. error!("Channel has been closed!");
  72. break;
  73. }
  74. }
  75. }
  76. });
  77. tokio::try_join!(main_thread, handler_thread, error_handler_thread).unwrap();
  78. }