JiahengHe 1 год назад
Родитель
Сommit
ade0515aa0
2 измененных файлов с 15 добавлено и 15 удалено
  1. 7 7
      strategy/src/avellaneda_stoikov.rs
  2. 8 8
      strategy/src/strategy.rs

+ 7 - 7
strategy/src/avellaneda_stoikov.rs

@@ -158,7 +158,7 @@ impl AvellanedaStoikov {
 
             let mut first_trade_price = last_trade.price;
             for trade in self.trade_long_vec.deque.iter().rev() {
-                if last_trade_time - trade.time > dec!(6) {
+                if last_trade_time - trade.time > Decimal::TEN {
                     break;
                 }
 
@@ -308,7 +308,7 @@ impl AvellanedaStoikov {
     }
 
     pub fn update_sigma_square(&mut self) {
-        self.sigma_square = self.spread_max;
+        self.sigma_square = self.spread_max * dec!(0.5);
         self.sigma_square.rescale(10);
     }
 
@@ -364,23 +364,23 @@ impl AvellanedaStoikov {
             // 知情者概率大于平均值,拉开开单距离
             if self.vwpin_avg > Decimal::ZERO && self.vwpin > self.vwpin_avg {
                 if self.inventory > Decimal::ZERO && self.ratio_edge > Decimal::ZERO {
-                    self.ask_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
+                    self.ask_delta -= self.ratio_edge.abs() * (Decimal::TWO - self.t_diff);
                     self.bid_delta += self.sigma_square.abs() * dec!(10);
                 } else if self.inventory < Decimal::ZERO && self.ratio_edge < Decimal::ZERO {
                     self.ask_delta += self.sigma_square.abs() * dec!(10);
-                    self.bid_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
+                    self.bid_delta -= self.ratio_edge.abs() * (Decimal::TWO - self.t_diff);
                 } else {
                     self.ask_delta += self.sigma_square.abs() * dec!(10);
                     self.bid_delta += self.sigma_square.abs() * dec!(10);
                 }
             } else {
                 if self.ratio_edge > Decimal::ZERO {
-                    self.ask_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
+                    self.ask_delta -= self.ratio_edge.abs() * (Decimal::TWO - self.t_diff);
                     self.bid_delta += self.sigma_square.abs() * dec!(5);
                 } else if self.ratio_edge < Decimal::ZERO {
                     self.ask_delta += self.sigma_square.abs() * dec!(5);
-                    self.bid_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
-                } else {
+                    self.bid_delta -= self.ratio_edge.abs() * (Decimal::TWO - self.t_diff);
+                } else if self.ratio_edge == Decimal::ZERO {
                     self.ask_delta += self.sigma_square.abs() * dec!(5);
                     self.bid_delta += self.sigma_square.abs() * dec!(5);
                 }

+ 8 - 8
strategy/src/strategy.rs

@@ -831,10 +831,10 @@ impl Strategy {
     pub fn _cancel_open(&self, command: &mut OrderCommand, local_orders: &HashMap<String, OrderInfo>) {
         // debug!(?command);
         // 挂单范围
-        let long_upper = self.open_dist[0];
-        let long_lower = self.open_dist[1];
-        let short_lower = self.open_dist[2];
-        let short_upper = self.open_dist[3];
+        // let long_upper = self.open_dist[0];
+        // let long_lower = self.open_dist[1];
+        // let short_lower = self.open_dist[2];
+        // let short_upper = self.open_dist[3];
 
         for order_client_id in local_orders.keys() {
             let order = local_orders.get(order_client_id).unwrap();
@@ -844,16 +844,16 @@ impl Strategy {
             // 开多订单处理
             if order.side == "kd".to_string() {
                 // 在价格范围内时不处理
-                if order.price <= long_upper && order.price >= long_lower {
-                // if self.local_time - order.local_time <= 200 {
+                // if (order.price <= long_upper && order.price >= long_lower) || self.local_time - order.local_time <= 200 {
+                if self.local_time - order.local_time <= 200 {
                     continue
                 }
                 // debug!(?key, ?order.price, ?long_upper, ?long_lower);
                 command.cancel.insert(key, value);
             } else if order.side == "kk".to_string() { // 开空订单处理
                 // 在价格范围内时不处理
-                if order.price >= short_lower && order.price <= short_upper {
-                // if self.local_time - order.local_time <= 200 {
+                // if (order.price >= short_lower && order.price <= short_upper) || self.local_time - order.local_time <= 200 {
+                if self.local_time - order.local_time <= 200 {
                     continue
                 }
                 // debug!(?key, ?order.price, ?short_lower, ?short_upper);