| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- use std::collections::{BTreeMap};
- use std::io::Error;
- use tokio::sync::mpsc::Sender;
- use crate::{Order, Platform};
- use crate::binance_swap::BinanceSwap;
- use crate::binance_spot::BinanceSpot;
- use crate::gate_spot::GateSpot;
- use crate::gate_swap::GateSwap;
- use crate::kucoin_swap::KucoinSwap;
- use crate::bitget_spot::BitgetSpot;
- use crate::kucoin_spot::KucoinSpot;
- use crate::okx_swap::OkxSwap;
- /// 交易所交易模式枚举
- /// - `BinanceSwap`: Binance交易所期货;
- /// - `BinanceSpot`: Binance交易所现货;
- /// - `GateSwap`: Gate交易所期货;
- /// - `GateSpot`: Gate交易所现货;
- /// - `KucoinSwap`: kucoin交易所期货;
- #[derive(Debug, Clone, PartialEq, Eq)]
- pub enum ExchangeEnum {
- BinanceSwap,
- BinanceSpot,
- GateSwap,
- GateSpot,
- KucoinSwap,
- KucoinSpot,
- OkxSwap,
- BitgetSpot,
- }
- /// Exchange结构体
- ///
- /// 方法:
- /// - 创建Exchange:
- ///
- /// 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>`
- /// - `platform(`[ExchangeEnum]`)`: 交易所平台枚举
- /// - `symbol(String)`: 币对
- /// - `is_colo(bool)`: 是否开始告诉模式
- /// - `params(BTreeMap<String, String>)`: 登录所需参数
- /// - `order_sender(Sender<Order>)`: 订单消息发送者
- /// - `error_sender(Sender<Error>)`: 错误消息发送者
- ///
- /// 示例参数值:
- ///
- /// | 交易所枚举 | params参数示例 BTreeMap<String, String> |
- /// | --- | --- |
- /// | BinanceSwap | {"access_key":"your_access_key","secret_key":"your_secret_key"} |
- /// | BinanceSpot | {"access_key":"your_access_key","secret_key":"your_secret_key"} |
- /// | GateSwap | {"access_key":"your_access_key","secret_key":"your_secret_key"} |
- /// | GateSpot | {"access_key":"your_access_key","secret_key":"your_secret_key"} |
- /// | KucoinSwap | {"access_key":"your_access_key","secret_key":"your_secret_key","pass_key":"your_pass_key"} |
- /// ```rust
- /// use std::collections::BTreeMap;
- /// use std::io::Error;
- /// use tokio::sync::mpsc;
- /// use standard::exchange::{Exchange, ExchangeEnum};
- /// use standard::Order;
- ///
- /// let mut params:BTreeMap<String,String> = BTreeMap::new();
- /// params.insert("access_key".to_string(), "your_access_key".to_string());
- /// params.insert("secret_key".to_string(), "your_secret_key".to_string());
- /// let (order_sender, _order_receiver): (mpsc::Sender<Order>, mpsc::Receiver<Order>) = mpsc::channel(1024);
- /// let (error_sender, _error_receiver): (mpsc::Sender<Error>, mpsc::Receiver<Error>) = mpsc::channel(1024);
- ///
- /// let exchange = Exchange::new(ExchangeEnum::BinanceSwap, "BTC_USDT".to_string(), false, params, order_sender, error_sender);
- #[derive(Debug, Clone)]
- pub struct Exchange;
- impl Exchange {
- 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> {
- match exchange {
- ExchangeEnum::BinanceSwap => {
- Box::new(BinanceSwap::new(symbol, is_colo, params, order_sender, error_sender).await)
- }
- ExchangeEnum::GateSwap => {
- Box::new(GateSwap::new(symbol, is_colo, params, order_sender, error_sender).await)
- }
- ExchangeEnum::GateSpot => {
- Box::new(GateSpot::new(symbol, is_colo, params))
- }
- ExchangeEnum::KucoinSwap => {
- Box::new(KucoinSwap::new(symbol, is_colo, params, order_sender, error_sender).await)
- }
- ExchangeEnum::KucoinSpot =>{
- Box::new(KucoinSpot::new(symbol, is_colo, params, order_sender, error_sender).await)
- }
- ExchangeEnum::OkxSwap => {
- Box::new(OkxSwap::new(symbol, is_colo, params, order_sender, error_sender).await)
- }
- ExchangeEnum::BitgetSpot => {
- Box::new(BitgetSpot::new(symbol, is_colo, params, order_sender, error_sender).await)
- }
- _ => {
- // BinanceSpot
- Box::new(BinanceSpot::new(symbol, is_colo, params))
- }
- }
- }
- }
|