order_command_test.rs 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. let sub = tracing_subscriber::fmt()
  22. .with_max_level(tracing::Level::INFO)
  23. .with_span_events(tracing_subscriber::fmt::format::FmtSpan::FULL)
  24. .finish();
  25. subscriber::set_global_default(sub).expect("策略模块日志初始化错误");
  26. let (order_sender, mut order_receiver) = mpsc::channel::<Order>(100);
  27. let (error_sender, mut error_receiver) = mpsc::channel::<Error>(100);
  28. let main_thread = tokio::spawn(async move {
  29. let client_id_0 = "123425678".to_string();
  30. let client_id_1 = "123452679".to_string();
  31. loop {
  32. // 下单
  33. info!("下单");
  34. let mut command = OrderCommand::new();
  35. command.limits_open.insert("BTC_USDT1".to_string(), vec!["0.001".to_string(), "kd".to_string(), "25000".to_string(), client_id_0.clone()]);
  36. command.limits_open.insert("BTC_USDT2".to_string(), vec!["0.001".to_string(), "kk".to_string(), "28000".to_string(), client_id_1.clone()]);
  37. exchange.command_order(command.clone(), order_sender.clone(), error_sender.clone()).await;
  38. tokio::time::sleep(Duration::from_secs(5)).await;
  39. // 查单
  40. info!("查单");
  41. let mut command = OrderCommand::new();
  42. command.check.insert("BTC_USDT1".to_string(), vec![client_id_0.clone(), "".to_string()]);
  43. command.check.insert("BTC_USDT2".to_string(), vec![client_id_1.clone(), "".to_string()]);
  44. exchange.command_order(command.clone(), order_sender.clone(), error_sender.clone()).await;
  45. tokio::time::sleep(Duration::from_secs(5)).await;
  46. // 撤单
  47. info!("撤单");
  48. let mut command = OrderCommand::new();
  49. command.cancel.insert("BTC_USDT1".to_string(), vec![client_id_0.clone(), "".to_string()]);
  50. command.cancel.insert("BTC_USDT2".to_string(), vec![client_id_1.clone(), "".to_string()]);
  51. exchange.command_order(command.clone(), order_sender.clone(), error_sender.clone()).await;
  52. tokio::time::sleep(Duration::from_secs(10)).await;
  53. }
  54. });
  55. let handler_thread = tokio::spawn(async move {
  56. info!("handler_thread被创建");
  57. loop {
  58. match order_receiver.recv().await {
  59. Some(order) => {
  60. info!(?order)
  61. },
  62. None => {
  63. error!("Channel has been closed!");
  64. break;
  65. }
  66. }
  67. }
  68. });
  69. let error_handler_thread = tokio::spawn(async move {
  70. info!("error_handler_thread被创建");
  71. loop {
  72. match error_receiver.recv().await {
  73. Some(error) => error!(?error),
  74. None => {
  75. error!("Channel has been closed!");
  76. break;
  77. }
  78. }
  79. }
  80. });
  81. tokio::try_join!(main_thread, handler_thread, error_handler_thread).unwrap();
  82. }