Explorar o código

获取价格信息的接口,以及测试。

skyffire hai 1 ano
pai
achega
8417403105

+ 15 - 0
exchanges/src/bitget_swap_rest.rs

@@ -64,6 +64,21 @@ impl BitgetSwapRest {
         ).await
     }
 
+    //获取行情信息
+    pub async fn get_tickers(&mut self, symbol: String) -> ResponseData {
+        let params = serde_json::json!({
+            "symbol": symbol,
+            "productType": "USDT-FUTURES"
+         });
+        let data = self.request("GET".to_string(),
+                                "/api/v2".to_string(),
+                                "/mix/market/ticker".to_string(),
+                                true,
+                                params.to_string(),
+        ).await;
+        data
+    }
+
     pub async fn get_server_time(&mut self) -> ResponseData {
         let params = serde_json::json!({});
         self.request("GET".to_string(),

+ 22 - 22
standard/src/bitget_usdt_swap.rs

@@ -5,11 +5,13 @@ use tokio::sync::mpsc::Sender;
 use std::str::FromStr;
 use async_trait::async_trait;
 use rust_decimal::Decimal;
+use rust_decimal::prelude::ToPrimitive;
+use rust_decimal_macros::dec;
 use serde_json::{Value};
 use tokio::time::Instant;
 use global::trace_stack::TraceStack;
 use crate::exchange::ExchangeEnum;
-use crate::{Account, Market, Order, OrderCommand, Platform, Position, Ticker};
+use crate::{Account, Market, Order, OrderCommand, Platform, Position, Ticker, utils};
 
 #[allow(dead_code)]
 #[derive(Clone)]
@@ -101,27 +103,25 @@ impl Platform for BitgetSwap {
     async fn get_positions(&mut self) -> Result<Vec<Position>, Error> { Err(Error::new(ErrorKind::NotFound, "bitget_swap:该交易所方法未实现".to_string())) }
 
     async fn get_ticker(&mut self) -> Result<Ticker, Error> {
-        // let symbol_format = utils::format_symbol(self.symbol.clone(), "");
-        // let res_data = self.request.get_tickers(symbol_format).await;
-        // if res_data.code == "200" {
-        //     let res_data_str = &res_data.data;
-        //     let res_data_json: serde_json::Value = serde_json::from_str(res_data_str).unwrap();
-        //     let ticker_info = res_data_json[0].clone();
-        //     let time = (Decimal::from_str(&*ticker_info["ts"].as_str().unwrap()).unwrap() / dec!(1000)).floor().to_i64().unwrap();
-        //     let result = Ticker {
-        //         time,
-        //         high: Decimal::from_str(ticker_info["high24h"].as_str().unwrap()).unwrap(),
-        //         low: Decimal::from_str(ticker_info["low24h"].as_str().unwrap()).unwrap(),
-        //         sell: Decimal::from_str(ticker_info["askPr"].as_str().unwrap()).unwrap(),
-        //         buy: Decimal::from_str(ticker_info["bidPr"].as_str().unwrap()).unwrap(),
-        //         last: Decimal::from_str(ticker_info["lastPr"].as_str().unwrap()).unwrap(),
-        //         volume: Decimal::from_str(ticker_info["quoteVolume"].as_str().unwrap()).unwrap(),
-        //     };
-        //     Ok(result)
-        // } else {
-        //     Err(Error::new(ErrorKind::Other, res_data.to_string()))
-        // }
-        Err(Error::new(ErrorKind::NotFound, "bitget_swap:该交易所方法未实现".to_string()))
+        let symbol_format = utils::format_symbol(self.symbol.clone(), "");
+        let res_data = self.request.get_tickers(symbol_format).await;
+        if res_data.code == "200" {
+            let res_data_json = res_data.data;
+            let ticker_info = res_data_json[0].clone();
+            let time = (Decimal::from_str(&*ticker_info["ts"].as_str().unwrap()).unwrap() / dec!(1000)).floor().to_i64().unwrap();
+            let result = Ticker {
+                time,
+                high: Decimal::from_str(ticker_info["high24h"].as_str().unwrap()).unwrap(),
+                low: Decimal::from_str(ticker_info["low24h"].as_str().unwrap()).unwrap(),
+                sell: Decimal::from_str(ticker_info["askPr"].as_str().unwrap()).unwrap(),
+                buy: Decimal::from_str(ticker_info["bidPr"].as_str().unwrap()).unwrap(),
+                last: Decimal::from_str(ticker_info["lastPr"].as_str().unwrap()).unwrap(),
+                volume: Decimal::from_str(ticker_info["quoteVolume"].as_str().unwrap()).unwrap(),
+            };
+            Ok(result)
+        } else {
+            Err(Error::new(ErrorKind::Other, res_data.to_string()))
+        }
     }
 
     async fn get_ticker_symbol(&mut self, symbol: String) -> Result<Ticker, Error> {

+ 1 - 0
strategy/src/core.rs

@@ -1471,6 +1471,7 @@ impl Core {
         self.get_exchange_info().await;
         // 获取价格信息
         let ticker = self.platform_rest.get_ticker().await.expect("获取价格信息异常!");
+        info!(?ticker);
         let mp = (ticker.buy + ticker.sell) / Decimal::TWO;
         // 获取账户信息
         if self.exchange.contains("spot") {

+ 1 - 1
strategy/src/utils.rs

@@ -97,7 +97,7 @@ pub fn get_limit_order_requests_num_per_second(exchange: String) -> i64 {
         return public_params::OKEX_USDT_SWAP_LIMIT
     } else if exchange.eq("bitget_spot") {
         return public_params::BITGET_USDT_SPOT_LIMIT
-    }  else if exchange.eq("bitget_spot") {
+    }  else if exchange.eq("bitget_usdt_swap") {
         return public_params::BITGET_USDT_SWAP_LIMIT
     } else if exchange.eq("bybit_usdt_swap") {
         return public_params::BYBIT_USDT_SWAP_LIMIT