|
|
@@ -314,7 +314,8 @@ impl Predictor {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- self.spread = self.fair_price - self.mid_price;
|
|
|
+ self.spread = (self.fair_price - self.mid_price) / self.mid_price;
|
|
|
+ self.spread.rescale(8);
|
|
|
self.spread_vec.push(self.spread);
|
|
|
|
|
|
self.spread_sma = if self.spread_sma.is_zero() {
|
|
|
@@ -322,18 +323,21 @@ impl Predictor {
|
|
|
} else {
|
|
|
self.spread_sma * dec!(0.9998) + self.spread * dec!(0.0002)
|
|
|
};
|
|
|
+ self.spread_sma.rescale(8);
|
|
|
|
|
|
self.spread_sma_2000 = if self.spread_sma_2000.is_zero() {
|
|
|
self.spread
|
|
|
} else {
|
|
|
self.spread_sma_2000 * dec!(0.9995) + self.spread * dec!(0.0005)
|
|
|
};
|
|
|
+ self.spread_sma_2000.rescale(8);
|
|
|
|
|
|
self.spread_sma_1000 = if self.spread_sma_1000.is_zero() {
|
|
|
self.spread
|
|
|
} else {
|
|
|
self.spread_sma_1000 * dec!(0.999) + self.spread * dec!(0.001)
|
|
|
};
|
|
|
+ self.spread_sma_1000.rescale(8);
|
|
|
|
|
|
while self.spread_vec.len() > 1_000 {
|
|
|
self.spread_vec.remove(0);
|
|
|
@@ -349,8 +353,8 @@ impl Predictor {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- let is_open_long = (self.fair_price - self.mid_price) / self.mid_price > self.params.open;
|
|
|
- let is_open_short = (self.mid_price - self.fair_price) / self.mid_price > self.params.open;
|
|
|
+ let is_open_long = self.spread_sma_1000 > self.params.open;
|
|
|
+ let is_open_short = self.spread_sma_1000 < self.params.open * Decimal::NEGATIVE_ONE;
|
|
|
let is_close_long = self.inventory > Decimal::ZERO;
|
|
|
let is_close_short = self.inventory < Decimal::ZERO;
|
|
|
|