Browse Source

修复均值计算问题

skyffire 8 tháng trước cách đây
mục cha
commit
ff2300eef7
1 tập tin đã thay đổi với 13 bổ sung13 xóa
  1. 13 13
      strategy/src/predictor.rs

+ 13 - 13
strategy/src/predictor.rs

@@ -242,7 +242,7 @@ impl Predictor {
                 symbol: "".to_string(),
             };
             let is_need_push = self.close_price_vec.len() == 0
-                || self.close_price_vec.deque.iter().last().unwrap().time - r.time > Decimal::ONE_THOUSAND
+                || r.time - self.close_price_vec.deque.iter().last().unwrap().time > Decimal::ONE_THOUSAND
             ;
 
             if is_need_push {
@@ -256,12 +256,12 @@ impl Predictor {
                     let mut i = len - 1;
                     let mut sum: Decimal = Decimal::ZERO;
                     loop {
-                        if i == len - 11 {
+                        sum += self.close_price_vec.get(i).unwrap().close;
+
+                        if i == len - 10 {
                             break
                         }
 
-                        sum += self.close_price_vec.get(i).unwrap().close;
-
                         i = i - 1;
                     }
 
@@ -269,7 +269,7 @@ impl Predictor {
                     self.r_short = (self.mid_price - mean_10s) / mean_10s;
                     self.r_short.rescale(8);
                 } else {
-                    self.r_short = self.mid_price;
+                    self.r_short = Decimal::ZERO;
                     mean_10s = self.mid_price;
                 }
 
@@ -279,28 +279,28 @@ impl Predictor {
                     let mut i = len - 1;
                     let mut sum: Decimal = Decimal::ZERO;
                     loop {
-                        if i == len - 301 {
+                        sum += self.close_price_vec.get(i).unwrap().close;
+
+                        if i == len - 300 {
                             break
                         }
 
-                        sum += self.close_price_vec.get(i).unwrap().close;
-
                         i = i - 1;
                     }
 
                     mean_300s = sum / Decimal::from(300);
                     self.r_long = (self.mid_price - mean_300s) / mean_300s;
                     self.r_long.rescale(8);
-                } else if self.record_vec.len() == 5 && !self.mid_price.is_zero() {
+                } else if self.record_vec.len() >= 5 && !self.mid_price.is_zero() {
                     let mut i = self.record_vec.len() - 1;
                     let mut sum: Decimal = Decimal::ZERO;
                     loop {
-                        if i == 0 {
+                        sum += self.record_vec[i].close;
+
+                        if i == self.record_vec.len() - 5 {
                             break
                         }
 
-                        sum += self.record_vec[i].close;
-
                         i = i - 1;
                     }
 
@@ -308,7 +308,7 @@ impl Predictor {
                     self.r_long = (self.mid_price - mean_300s) / mean_300s;
                     self.r_long.rescale(8);
                 } else {
-                    self.r_long = self.mid_price;
+                    self.r_long = Decimal::ZERO;
                     mean_300s = self.mid_price;
                 }