Explorar o código

观察资金流

skyffire hai 10 meses
pai
achega
48188d6dae
Modificáronse 1 ficheiros con 13 adicións e 11 borrados
  1. 13 11
      strategy/src/predictor.rs

+ 13 - 11
strategy/src/predictor.rs

@@ -76,10 +76,7 @@ pub struct Predictor {
 
     pub params: Params,
 
-    pub debug_sender: UnboundedSender<Vec<Decimal>>,
-
-    pub long_trade_len_dec: Decimal,
-    pub short_trade_len_dec: Decimal,
+    pub debug_sender: UnboundedSender<Vec<Decimal>>
 }
 
 impl Predictor {
@@ -197,10 +194,7 @@ impl Predictor {
 
             params,
 
-            debug_sender: tx,
-
-            long_trade_len_dec: Default::default(),
-            short_trade_len_dec: Default::default(),
+            debug_sender: tx
         };
 
         predictor
@@ -235,9 +229,17 @@ impl Predictor {
         self.trade_long_vec.push_back(trade.clone());
         self.trade_short_vec.push_back(trade.clone());
 
-        self.long_trade_len_dec = Decimal::from_usize(self.trade_long_vec.len()).unwrap();
-        self.short_trade_len_dec = Decimal::from_usize(self.trade_short_vec.len()).unwrap();
-        self.error_rate = self.short_trade_len_dec / self.long_trade_len_dec;
+        let (bought_sum, sold_sum): (Decimal, Decimal) = self.trade_long_vec.deque.iter()
+            .fold((Decimal::ZERO, Decimal::ZERO), |(buy_sum, sell_sum), item| {
+                if item.size > Decimal::ZERO {
+                    (buy_sum + item.value, sell_sum)
+                } else if item.size < Decimal::ZERO {
+                    (buy_sum, sell_sum + item.value)
+                } else {
+                    (buy_sum, sell_sum)
+                }
+            });
+        self.error_rate = (bought_sum - sold_sum) / (bought_sum + sold_sum);
         self.error_rate.rescale(4);
 
         self.last_price = trade.price;