|
|
@@ -260,10 +260,11 @@ impl Predictor {
|
|
|
}
|
|
|
|
|
|
self.spread_vec[i] = fair_price_std - self.mid_price;
|
|
|
- self.signal = self.signal + self.spread_vec[i];
|
|
|
+ // 以最远的那个为基准点
|
|
|
+ if self.spread_vec[i].abs() > self.signal.abs() {
|
|
|
+ self.signal = self.spread_vec[i];
|
|
|
+ }
|
|
|
}
|
|
|
- self.signal = self.signal / self.params.min_spread;
|
|
|
- self.signal.rescale(0);
|
|
|
}
|
|
|
|
|
|
pub fn update_delta(&mut self) {
|
|
|
@@ -280,37 +281,28 @@ impl Predictor {
|
|
|
let is_close_long = self.inventory > Decimal::ZERO;
|
|
|
let is_close_short = self.inventory < Decimal::ZERO;
|
|
|
|
|
|
+ self.bid_delta = dec!(-2);
|
|
|
+ self.ask_delta = dec!(-2);
|
|
|
+ self.optimal_bid_price = Self::DONT_VIEW;
|
|
|
+ self.optimal_ask_price = Self::DONT_VIEW;
|
|
|
+
|
|
|
if is_close_long {
|
|
|
self.ask_delta = dec!(0);
|
|
|
- self.bid_delta = dec!(-2);
|
|
|
|
|
|
self.optimal_ask_price = self.mid_price + self.mid_price * self.params.close;
|
|
|
- self.optimal_bid_price = Self::DONT_VIEW;
|
|
|
} else if is_close_short {
|
|
|
self.bid_delta = dec!(0);
|
|
|
- self.ask_delta = dec!(-2);
|
|
|
|
|
|
self.optimal_bid_price = self.mid_price - self.mid_price * self.params.close;
|
|
|
- self.optimal_ask_price = Self::DONT_VIEW;
|
|
|
} else {
|
|
|
- if self.signal > Decimal::ZERO {
|
|
|
+ if self.signal > self.params.min_spread {
|
|
|
self.bid_delta = dec!(0);
|
|
|
- self.ask_delta = dec!(-2);
|
|
|
-
|
|
|
- self.optimal_bid_price = self.mid_price - self.mid_price * self.params.open;
|
|
|
- self.optimal_ask_price = Self::DONT_VIEW;
|
|
|
- } else if self.signal < Decimal::ZERO {
|
|
|
- self.ask_delta = dec!(0);
|
|
|
- self.bid_delta = dec!(-2);
|
|
|
|
|
|
- self.optimal_ask_price = self.mid_price + self.mid_price * self.params.open;
|
|
|
- self.optimal_bid_price = Self::DONT_VIEW;
|
|
|
- } else {
|
|
|
- self.bid_delta = dec!(0);
|
|
|
+ self.optimal_bid_price = self.mid_price + self.mid_price * (self.signal - self.params.min_spread);
|
|
|
+ } else if self.signal < -self.params.min_spread {
|
|
|
self.ask_delta = dec!(0);
|
|
|
|
|
|
- self.optimal_bid_price = self.mid_price - self.mid_price * self.params.open;
|
|
|
- self.optimal_ask_price = self.mid_price + self.mid_price * self.params.open;
|
|
|
+ self.optimal_ask_price = self.mid_price + self.mid_price * (self.signal + self.params.min_spread);
|
|
|
}
|
|
|
}
|
|
|
|