exchange.rs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. use std::collections::{BTreeMap};
  2. use std::io::Error;
  3. use tokio::sync::mpsc::Sender;
  4. use crate::{Order, Platform};
  5. use crate::binance_swap::BinanceSwap;
  6. use crate::binance_spot::BinanceSpot;
  7. use crate::gate_spot::GateSpot;
  8. use crate::gate_swap::GateSwap;
  9. use crate::kucoin_swap::KucoinSwap;
  10. use crate::bitget_spot::BitgetSpot;
  11. use crate::kucoin_spot::KucoinSpot;
  12. use crate::okx_swap::OkxSwap;
  13. /// 交易所交易模式枚举
  14. /// - `BinanceSwap`: Binance交易所期货;
  15. /// - `BinanceSpot`: Binance交易所现货;
  16. /// - `GateSwap`: Gate交易所期货;
  17. /// - `GateSpot`: Gate交易所现货;
  18. /// - `KucoinSwap`: kucoin交易所期货;
  19. #[derive(Debug, Clone, PartialEq, Eq)]
  20. pub enum ExchangeEnum {
  21. BinanceSwap,
  22. BinanceSpot,
  23. GateSwap,
  24. GateSpot,
  25. KucoinSwap,
  26. KucoinSpot,
  27. OkxSwap,
  28. BitgetSpot,
  29. }
  30. /// Exchange结构体
  31. ///
  32. /// 方法:
  33. /// - 创建Exchange:
  34. ///
  35. /// new(platform: [ExchangeEnum], symbol: `String`, is_colo: `bool`, params: `BTreeMap<String, String>`, order_sender: `Sender<Order>`, error_sender: `Sender<Error>`) -> `Box<dyn Platform + Send + Sync>`
  36. /// - `platform(`[ExchangeEnum]`)`: 交易所平台枚举
  37. /// - `symbol(String)`: 币对
  38. /// - `is_colo(bool)`: 是否开始告诉模式
  39. /// - `params(BTreeMap<String, String>)`: 登录所需参数
  40. /// - `order_sender(Sender<Order>)`: 订单消息发送者
  41. /// - `error_sender(Sender<Error>)`: 错误消息发送者
  42. ///
  43. /// 示例参数值:
  44. ///
  45. /// | 交易所枚举 | params参数示例 BTreeMap<String, String> |
  46. /// | --- | --- |
  47. /// | BinanceSwap | {"access_key":"your_access_key","secret_key":"your_secret_key"} |
  48. /// | BinanceSpot | {"access_key":"your_access_key","secret_key":"your_secret_key"} |
  49. /// | GateSwap | {"access_key":"your_access_key","secret_key":"your_secret_key"} |
  50. /// | GateSpot | {"access_key":"your_access_key","secret_key":"your_secret_key"} |
  51. /// | KucoinSwap | {"access_key":"your_access_key","secret_key":"your_secret_key","pass_key":"your_pass_key"} |
  52. /// ```rust
  53. /// use std::collections::BTreeMap;
  54. /// use std::io::Error;
  55. /// use tokio::sync::mpsc;
  56. /// use standard::exchange::{Exchange, ExchangeEnum};
  57. /// use standard::Order;
  58. ///
  59. /// let mut params:BTreeMap<String,String> = BTreeMap::new();
  60. /// params.insert("access_key".to_string(), "your_access_key".to_string());
  61. /// params.insert("secret_key".to_string(), "your_secret_key".to_string());
  62. /// let (order_sender, _order_receiver): (mpsc::Sender<Order>, mpsc::Receiver<Order>) = mpsc::channel(1024);
  63. /// let (error_sender, _error_receiver): (mpsc::Sender<Error>, mpsc::Receiver<Error>) = mpsc::channel(1024);
  64. ///
  65. /// let exchange = Exchange::new(ExchangeEnum::BinanceSwap, "BTC_USDT".to_string(), false, params, order_sender, error_sender);
  66. #[derive(Debug, Clone)]
  67. pub struct Exchange;
  68. impl Exchange {
  69. pub async fn new(exchange: ExchangeEnum, symbol: String, is_colo: bool, params: BTreeMap<String, String>, order_sender: Sender<Order>, error_sender: Sender<Error>) -> Box<dyn Platform + Send + Sync> {
  70. match exchange {
  71. ExchangeEnum::BinanceSwap => {
  72. Box::new(BinanceSwap::new(symbol, is_colo, params, order_sender, error_sender).await)
  73. }
  74. ExchangeEnum::GateSwap => {
  75. Box::new(GateSwap::new(symbol, is_colo, params, order_sender, error_sender).await)
  76. }
  77. ExchangeEnum::GateSpot => {
  78. Box::new(GateSpot::new(symbol, is_colo, params))
  79. }
  80. ExchangeEnum::KucoinSwap => {
  81. Box::new(KucoinSwap::new(symbol, is_colo, params, order_sender, error_sender).await)
  82. }
  83. ExchangeEnum::KucoinSpot =>{
  84. Box::new(KucoinSpot::new(symbol, is_colo, params, order_sender, error_sender).await)
  85. }
  86. ExchangeEnum::OkxSwap => {
  87. Box::new(OkxSwap::new(symbol, is_colo, params, order_sender, error_sender).await)
  88. }
  89. ExchangeEnum::BitgetSpot => {
  90. Box::new(BitgetSpot::new(symbol, is_colo, params, order_sender, error_sender).await)
  91. }
  92. _ => {
  93. // BinanceSpot
  94. Box::new(BinanceSpot::new(symbol, is_colo, params))
  95. }
  96. }
  97. }
  98. }