Sfoglia il codice sorgente

添加交易所成交记录导出

gepangpang 1 anno fa
parent
commit
c0093e1f96

+ 6 - 1
derive/src/binance_swap_export.rs

@@ -2,6 +2,7 @@ use std::collections::BTreeMap;
 use async_trait::async_trait;
 use chrono::{FixedOffset, NaiveDateTime, TimeZone};
 use serde::{Deserialize, Serialize};
+use tracing::warn;
 use exchanges::binance_swap_rest::BinanceSwapRest;
 use standard::utils;
 use crate::ExportConnector;
@@ -56,7 +57,11 @@ struct TradesSwap {
 impl ExportConnector for BinanceSwapExport {
     async fn export_trades(&mut self, prefix_name: &str, symbol: String, start_time: i64, end_time: i64, limit: i64) -> String {
         let symbol_format = utils::format_symbol(symbol.clone(), "");
-        let res_data = self.request.get_user_trades(symbol_format, start_time as i32, end_time as i32, limit).await;
+        let limit_params = if limit > 1000 {
+            warn!("查询条数最大为1000条,已修改为1000条!");
+            1000
+        } else { limit };
+        let res_data = self.request.get_user_trades(symbol_format, start_time, end_time, limit_params).await;
         if res_data.code == "200" {
             let trades_info: Vec<TradesSwap> = serde_json::from_str(&res_data.data).unwrap();
             let header_array = vec!["交易编号", "订单编号", "交易币对", "买卖方向", "成交价格", "成交数量", "成交价值", "交易费用", "交易时间"];

+ 6 - 1
derive/src/bitget_spot_export.rs

@@ -4,6 +4,7 @@ use async_trait::async_trait;
 use chrono::{FixedOffset, NaiveDateTime, TimeZone};
 use rust_decimal::Decimal;
 use serde::{Deserialize, Serialize};
+use tracing::warn;
 use exchanges::bitget_spot_rest::BitgetSpotRest;
 use standard::utils;
 use crate::ExportConnector;
@@ -44,7 +45,11 @@ impl ExportConnector for BitgetSpotExport {
         let symbol_format = utils::format_symbol(symbol, "");
         let start_at = if start_time > 0 { start_time.to_string() } else { "".to_string() };
         let end_at = if end_time > 0 { end_time.to_string() } else { "".to_string() };
-        let res_data = self.request.get_market_fills_history(symbol_format, start_at.to_string(), end_at.to_string(), limit.to_string()).await;
+        let limit_params = if limit > 1000 {
+            warn!("查询条数最大为1000条,已修改为1000条!");
+            1000
+        } else { limit };
+        let res_data = self.request.get_market_fills_history(symbol_format, start_at.to_string(), end_at.to_string(), limit_params.to_string()).await;
         if res_data.code == "200" {
             let trades_info: Vec<TradesSpot> = serde_json::from_str(&res_data.data).unwrap();
             let header_array = vec!["交易编号", "交易币对", "买卖方向", "订单价格", "订单数量", "成交额", "创建时间"];

+ 9 - 3
derive/src/gate_swap_export.rs

@@ -6,6 +6,7 @@ use rust_decimal::Decimal;
 use rust_decimal::prelude::{FromPrimitive, ToPrimitive};
 use rust_decimal_macros::dec;
 use serde::{Deserialize, Serialize};
+use tracing::{error, warn};
 use exchanges::gate_swap_rest::GateSwapRest;
 use standard::utils;
 use crate::ExportConnector;
@@ -49,10 +50,15 @@ struct TradesSwap {
 
 #[async_trait]
 impl ExportConnector for GateSwapExport {
-    async fn export_trades(&mut self, prefix_name: &str, symbol: String, _start_time: i64, _end_time: i64, _limit: i64) -> String {
+    async fn export_trades(&mut self, prefix_name: &str, symbol: String, start_time: i64, end_time: i64, limit: i64) -> String {
         let symbol_array: Vec<&str> = symbol.split("_").collect();
-        let _symbol_format = utils::format_symbol(symbol.clone(), "_");
-        let res_data = self.request.my_trades(symbol_array[1].to_lowercase()).await;
+        let symbol_format = utils::format_symbol(symbol.clone(), "_");
+        let limit_params = if limit > 1000 {
+            warn!("查询条数最大为1000条,已修改为1000条!");
+            1000
+        } else { limit };
+        let res_data = self.request.my_trades(symbol_array[1].to_lowercase(), symbol_format, limit_params).await;
+        if start_time > 0 || end_time > 0 { error!("该交易所不支持根据时间查询!") };
         if res_data.code == "200" {
             let trades_info: Vec<TradesSwap> = serde_json::from_str(&res_data.data).unwrap();
             let header_array = vec!["交易编号", "订单编号", "交易币对", "买卖方向", "成交价格", "成交数量", "成交价值", "交易费用", "成交角色", "成交时间"];

+ 6 - 1
derive/src/kucoin_spot_export.rs

@@ -2,6 +2,7 @@ use std::collections::BTreeMap;
 use async_trait::async_trait;
 use chrono::{FixedOffset, NaiveDateTime, TimeZone};
 use serde::{Deserialize, Serialize};
+use tracing::warn;
 use exchanges::kucoin_spot_rest::KucoinSpotRest;
 use standard::exchange::ExchangeEnum;
 use standard::utils;
@@ -65,7 +66,11 @@ impl ExportConnector for KucoinSpotExport {
     async fn export_trades(&mut self, prefix_name: &str, symbol: String, start_time: i64, end_time: i64, limit: i64) -> String {
         let symbol_mapper = utils::symbol_enter_mapper(ExchangeEnum::KucoinSwap, symbol.as_str());
         let symbol_format = format!("{}M", utils::format_symbol(symbol_mapper.clone(), ""));
-        let res_data = self.request.get_fills(symbol_format, "".to_string(), "".to_string(), start_time, end_time, limit).await;
+        let limit_params = if limit > 1000 {
+            warn!("查询条数最大为1000条,已修改为1000条!");
+            1000
+        } else { limit };
+        let res_data = self.request.get_fills(symbol_format, "".to_string(), "".to_string(), start_time, end_time, limit_params).await;
         if res_data.code == "200" {
             let res_data_json: serde_json::Value = serde_json::from_str(&res_data.data).unwrap();
             let trades_info: Vec<TradesSpot> = serde_json::from_str(&res_data_json["items"].to_string()).unwrap();

+ 6 - 1
derive/src/kucoin_swap_export.rs

@@ -2,6 +2,7 @@ use std::collections::BTreeMap;
 use async_trait::async_trait;
 use chrono::{FixedOffset, NaiveDateTime, TimeZone, Utc};
 use serde::{Deserialize, Serialize};
+use tracing::warn;
 use exchanges::kucoin_swap_rest::KucoinSwapRest;
 use standard::exchange::ExchangeEnum;
 use standard::utils;
@@ -68,7 +69,11 @@ impl ExportConnector for KucoinSwapExport {
     async fn export_trades(&mut self, prefix_name: &str, symbol: String, start_time: i64, end_time: i64, limit: i64) -> String {
         let symbol_mapper = utils::symbol_enter_mapper(ExchangeEnum::KucoinSwap, symbol.as_str());
         let symbol_format = format!("{}M", utils::format_symbol(symbol_mapper.clone(), ""));
-        let res_data = self.request.get_fills(symbol_format, "".to_string(), "".to_string(), start_time, end_time, limit).await;
+        let limit_params = if limit > 1000 {
+            warn!("查询条数最大为1000条,已修改为1000条!");
+            1000
+        } else { limit };
+        let res_data = self.request.get_fills(symbol_format, "".to_string(), "".to_string(), start_time, end_time, limit_params).await;
         if res_data.code == "200" {
             let res_data_json: serde_json::Value = serde_json::from_str(&res_data.data).unwrap();
             let trades_info: Vec<TradesSwap> = serde_json::from_str(&res_data_json["items"].to_string()).unwrap();

+ 12 - 3
derive/src/okx_swap_export.rs

@@ -4,6 +4,7 @@ use async_trait::async_trait;
 use chrono::{FixedOffset, NaiveDateTime, TimeZone};
 use rust_decimal::Decimal;
 use serde::{Deserialize, Serialize};
+use tracing::warn;
 use exchanges::okx_swap_rest::OkxSwapRest;
 use standard::utils;
 use crate::ExportConnector;
@@ -21,6 +22,7 @@ impl OkxSwapExport {
 }
 
 /// TradesSwap
+///
 /// - `inst_type`: String,
 /// - `inst_id`: String,
 /// - `trade_id`: String,
@@ -74,9 +76,16 @@ struct TradesSwap {
 
 #[async_trait]
 impl ExportConnector for OkxSwapExport {
-    async fn export_trades(&mut self, prefix_name: &str, symbol: String, _start_time: i64, _end_time: i64, _limit: i64) -> String {
-        let _symbol_format = utils::format_symbol(symbol.clone(), "-");
-        let res_data = self.request.get_trade_fills("".to_string()).await;
+    async fn export_trades(&mut self, prefix_name: &str, symbol: String, start_time: i64, end_time: i64, limit: i64) -> String {
+        let symbol_format = utils::format_symbol(symbol.clone(), "-");
+        let limit_params = if limit > 100 {
+            warn!("查询条数最大为100条,已修改为100条!");
+            1000
+        } else { limit };
+        let start_time_str = if start_time > 0 { start_time.to_string() } else { "".to_string() };
+        let end_time_str = if end_time > 0 { end_time.to_string() } else { "".to_string() };
+        let limit_str = if limit_params > 0 { limit_params.to_string() } else { "".to_string() };
+        let res_data = self.request.get_trade_fills_history(symbol_format, start_time_str, end_time_str, limit_str).await;
         if res_data.code == "200" {
             let trades_info: Vec<TradesSwap> = serde_json::from_str(&res_data.data).unwrap();
             let header_array = vec!["交易编号", "订单编号", "交易币对", "买卖方向", "成交价格", "成交数量", "成交价值", "交易费用", "创建时间", "成交时间"];

+ 1 - 1
derive/tests/binance_swap_export_test.rs

@@ -14,6 +14,6 @@ async fn test_get_self_exchange() {
     global::log_utils::init_log_with_trace();
 
     let mut export = test_new_export(ExportEnum::BinanceSwap).await;
-    let export_trades = export.export_trades("binance_swap",SYMBOL.to_string(), 0, 0, 50).await;
+    let export_trades = export.export_trades("binance_swap",SYMBOL.to_string(), 0, 0, 100).await;
     trace!(?export_trades);
 }

+ 1 - 0
strategy/src/quant.rs

@@ -315,6 +315,7 @@ impl Quant {
         // 新增订单推送 仅需要cid oid信息
         if data.status == "NEW" {
             // 更新oid信息 更新订单 loceltime信息(尤其是查单返回new的情况 必须更新 否则会误触发风控)
+
             if self.local_orders.contains_key(&data.client_id) {
                 let mut order_info = self.local_orders.get(&data.client_id).unwrap().clone();
                 order_info.order_id = data.order_id;