|
|
@@ -439,12 +439,16 @@ impl Predictor {
|
|
|
pub fn update_spread(&mut self) {
|
|
|
let depth = &self.depth_vec[1];
|
|
|
|
|
|
- self.spread = depth.asks[0].price - depth.bids[0].price;
|
|
|
+ let ref_mid = (depth.asks[0].price + depth.bids[0].price) / Decimal::TWO;
|
|
|
+ self.spread = (depth.asks[0].price - depth.bids[0].price) / ref_mid;
|
|
|
+ self.spread.rescale(8);
|
|
|
+
|
|
|
self.spread_ema = if self.spread_ema.is_zero() {
|
|
|
self.spread
|
|
|
} else {
|
|
|
- self.spread_ema * dec!(0.999) + self.spread * dec!(0.001)
|
|
|
+ self.spread_ema * dec!(0.995) + self.spread * dec!(0.005)
|
|
|
};
|
|
|
+ self.spread_ema.rescale(8);
|
|
|
}
|
|
|
|
|
|
pub async fn update_delta(&mut self) {
|
|
|
@@ -489,12 +493,10 @@ impl Predictor {
|
|
|
let is_open_long = self.force_order_value < -self.params.open
|
|
|
&& (self.mid_price < self.prev_trade_price * dec!(0.999) || self.prev_trade_price.is_zero())
|
|
|
&& self.inventory < self.params.grid
|
|
|
- && self.state == 0
|
|
|
&& self.bid_delta == dec!(-2);
|
|
|
let is_open_short = self.force_order_value > self.params.open
|
|
|
&& (self.mid_price > self.prev_trade_price * dec!(1.001) || self.prev_trade_price.is_zero())
|
|
|
&& self.inventory > -self.params.grid
|
|
|
- && self.state == 0
|
|
|
&& self.ask_delta == dec!(-2);
|
|
|
|
|
|
if is_open_long {
|
|
|
@@ -597,7 +599,7 @@ impl Predictor {
|
|
|
|
|
|
let sigma_square = Decimal::from(self.state);
|
|
|
|
|
|
- let gamma = self.params.holding_time;
|
|
|
+ let gamma = self.force_order_value;
|
|
|
let kappa = self.balance;
|
|
|
|
|
|
let flow_ratio = Decimal::ZERO;
|