Selaa lähdekoodia

进行了一些基础类型的替换,能提高效率

skyfffire 2 vuotta sitten
vanhempi
commit
212d7ab1e6
1 muutettua tiedostoa jossa 30 lisäystä ja 30 poistoa
  1. 30 30
      strategy/src/strategy.rs

+ 30 - 30
strategy/src/strategy.rs

@@ -177,7 +177,7 @@ impl Strategy {
             max_pos_rate: Default::default(),
             profit: Default::default(),
             daily_return: Default::default(),
-            adjust_lever_rate: dec!(1),
+            adjust_lever_rate: Decimal::ONE,
             lever_rate: Default::default(),
             long_pos_bias: Default::default(),
             short_pos_bias: Default::default(),
@@ -205,7 +205,7 @@ impl Strategy {
         }
         // 杠杆比例处理
         if strategy.exchange.contains("spot") {
-            strategy.lever_rate = min(params.lever_rate, dec!(1));
+            strategy.lever_rate = min(params.lever_rate, Decimal::ONE);
         }
         // 各类时间戳
         let now = Utc::now();
@@ -226,7 +226,7 @@ impl Strategy {
         strategy.limit_order_requests_num = utils::get_limit_order_requests_num_per_second(params.exchange.clone(), params.place_order_limit) * (request_limit_check_interval_per_second);
         // 开仓下单间隔 均匀下单机会
         strategy.post_open_time = now.timestamp_millis();
-        let post_open_interval_per_second = dec!(1).div(Decimal::from_i64(utils::get_limit_order_requests_num_per_second(params.exchange.clone(), 0)).unwrap());
+        let post_open_interval_per_second = Decimal::ONE.div(Decimal::from_i64(utils::get_limit_order_requests_num_per_second(params.exchange.clone(), 0)).unwrap());
         strategy.post_open_interval = dec!(1000).mul(post_open_interval_per_second).to_i64().unwrap();
         // 初始化日志订阅者
         let sub = tracing_subscriber::fmt()
@@ -265,7 +265,7 @@ impl Strategy {
         self.ap = trader_msg.market[global::public_params::ASK_PRICE_INDEX];
         self.mp = (self.bp + self.ap) * dec!(0.5);
         // 中间价的ema值处理
-        if self.mp_ema.eq(&dec!(0)) {
+        if self.mp_ema.eq(&Decimal::ZERO) {
             self.mp_ema = self.mp;
         } else {
             self.mp_ema = self.mp_ema * dec!(0.999) + self.mp * dec!(0.001);
@@ -274,7 +274,7 @@ impl Strategy {
 
         // 动态杠杆调节
         if self.mp > self.mp_ema {
-            self.adjust_lever_rate = dec!(1);
+            self.adjust_lever_rate = Decimal::ONE;
         } else {
             self.adjust_lever_rate = dec!(0.8);
         }
@@ -333,13 +333,13 @@ impl Strategy {
         self.total_amount = self.equity * self.lever_rate * self.adjust_lever_rate / self.mp;
         self.total_amount = utils::fix_amount(self.total_amount, self.step_size);
         trace!(?self.total_amount);
-        if self.total_amount.eq(&dec!(0)) {
+        if self.total_amount.eq(&Decimal::ZERO) {
             error!("总可开数量太少!equity={}, lever_rate={}, adjust_lever_rate={}", self.equity, self.lever_rate, self.adjust_lever_rate);
             return false;
         }
 
         // 求最大pos
-        if self.equity > dec!(0) {
+        if self.equity > Decimal::ZERO {
             let max_pos_rate = max(self.pos.long_pos, self.pos.short_pos) * self.mp / self.equity;
             if max_pos_rate > self.max_pos_rate {
                 self.max_pos_rate = max_pos_rate;
@@ -401,10 +401,10 @@ impl Strategy {
         let mut sell_start = mp;
         let mut avoid = min(dec!(0.0005), close * dec!(0.5));
         let mut close_dist = vec![
-            buy_start * (dec!(1) + predict - close + avoid),                    // buy upper
-            buy_start * (dec!(1) + predict - close - avoid),                    // buy lower
-            sell_start * (dec!(1) + predict + close - avoid),                   // sell lower
-            sell_start * (dec!(1) + predict + close + avoid),                   // sell upper
+            buy_start * (Decimal::ONE + predict - close + avoid),                    // buy upper
+            buy_start * (Decimal::ONE + predict - close - avoid),                    // buy lower
+            sell_start * (Decimal::ONE + predict + close - avoid),                   // sell lower
+            sell_start * (Decimal::ONE + predict + close + avoid),                   // sell upper
         ];
         trace!(?mp, ?buy_start, ?sell_start, ?avoid, ?close_dist);
 
@@ -426,13 +426,13 @@ impl Strategy {
         // 开仓相关
         avoid = min(dec!(0.001), open * dec!(0.05));
         // 持仓偏移
-        let buy_shift = dec!(1) + pos_rate[0] * grid;
-        let sell_shift = dec!(1) + pos_rate[1] * grid;
+        let buy_shift = Decimal::ONE + pos_rate[0] * grid;
+        let sell_shift = Decimal::ONE + pos_rate[1] * grid;
         let mut open_dist = vec![
-            buy_start * (dec!(1) + predict - open * buy_shift  + avoid),             // buy upper
-            buy_start * (dec!(1) + predict - open * buy_shift  - avoid),             // buy lower
-            sell_start * (dec!(1) + predict + open * sell_shift - avoid),            // sell lower
-            sell_start * (dec!(1) + predict + open * sell_shift + avoid),            // sell upper
+            buy_start * (Decimal::ONE + predict - open * buy_shift  + avoid),             // buy upper
+            buy_start * (Decimal::ONE + predict - open * buy_shift  - avoid),             // buy lower
+            sell_start * (Decimal::ONE + predict + open * sell_shift - avoid),            // sell lower
+            sell_start * (Decimal::ONE + predict + open * sell_shift + avoid),            // sell upper
         ];
         trace!(?avoid, ?buy_shift, ?sell_shift, ?avoid, ?open_dist);
 
@@ -606,12 +606,12 @@ impl Strategy {
     pub fn _pos_rate(&mut self) {
         trace!(?self);
 
-        if self.max_long_value > dec!(0) {
+        if self.max_long_value > Decimal::ZERO {
             self.long_hold_rate = self.long_hold_value / self.max_long_value;
             trace!(?self.long_hold_rate);
         }
 
-        if self.max_short_value > dec!(0) {
+        if self.max_short_value > Decimal::ZERO {
             self.short_hold_rate = self.short_hold_value / self.max_short_value;
             trace!(?self.short_hold_rate);
         }
@@ -667,8 +667,8 @@ impl Strategy {
     #[instrument(skip(self, command), level="TRACE")]
     pub fn _close_all(&self, command: &mut OrderCommand) {
         // 撤掉全部挂单
-        let mut pd_amount = dec!(0);
-        let mut pk_amount = dec!(0);
+        let mut pd_amount = Decimal::ZERO;
+        let mut pk_amount = Decimal::ZERO;
         trace!(?self.local_orders);
         for client_id in self.local_orders.keys() {
             let order = self.local_orders.get(client_id).unwrap();
@@ -741,7 +741,7 @@ impl Strategy {
         }
 
         let pre_hot:i64 = 10 * 1000;
-        if !self.mp.eq(&dec!(0)) && self.local_time - self.local_start_time > pre_hot {
+        if !self.mp.eq(&Decimal::ZERO) && self.local_time - self.local_start_time > pre_hot {
             self.is_ready = true;
             trace!(?self.mp, ?self.local_time, ?self.local_start_time, ?pre_hot);
             info!("策略预热完毕,可以执行后续逻辑!")
@@ -763,9 +763,9 @@ impl Strategy {
     pub fn _post_close(&self, command: &mut OrderCommand) {
         trace!(?command);
 
-        let mut pd_amount = dec!(0);
+        let mut pd_amount = Decimal::ZERO;
         let mut pd_order_num = 0;
-        let mut pk_amount = dec!(0);
+        let mut pk_amount = Decimal::ZERO;
         let mut pk_order_num = 0;
         // 各类价格
         let long_upper = self.close_dist[0];
@@ -867,7 +867,7 @@ impl Strategy {
                 }
             }
         } else {
-            if self.pos.long_pos > dec!(0) {
+            if self.pos.long_pos > Decimal::ZERO {
                 let mut price = (short_lower + short_upper) * dec!(0.5);
                 price = utils::clip(price, self.bp * dec!(0.9995), self.ap * dec!(1.03));
                 price = utils::fix_price(price, self.tick_size);
@@ -885,7 +885,7 @@ impl Strategy {
                 trace!(?command);
             }
 
-            if self.pos.short_pos > dec!(0) {
+            if self.pos.short_pos > Decimal::ZERO {
                 let mut price = (long_upper + long_lower) * dec!(0.5);
                 price = utils::clip(price, self.bp * dec!(0.97), self.ap * dec!(1.0005));
                 price = utils::fix_price(price, self.tick_size);
@@ -1005,8 +1005,8 @@ impl Strategy {
         // 获取当前挂单价值
         let mut buy_price_list: Vec<Decimal> = vec![];
         let mut sell_price_list: Vec<Decimal> = vec![];
-        let mut buy_value = dec!(0);
-        let mut sell_value = dec!(0);
+        let mut buy_value = Decimal::ZERO;
+        let mut sell_value = Decimal::ZERO;
         for client_id in self.local_orders.keys() {
             let order = self.local_orders.get(client_id).unwrap();
             if order.side == "kd".to_string() {
@@ -1184,11 +1184,11 @@ mod tests {
             fee: Default::default(),
         });
         trader_msg.cash = dec!(1000);
-        trader_msg.coin = dec!(0);
+        trader_msg.coin = Decimal::ZERO;
 
         strategy.is_ready = true;
         strategy.equity = dec!(1000);
-        strategy.lever_rate = dec!(1);
+        strategy.lever_rate = Decimal::ONE;
 
         trace!("{:?}", strategy.on_time(&trader_msg));
     }