|
|
@@ -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;
|