|
|
@@ -157,10 +157,6 @@ impl AvellanedaStoikov {
|
|
|
self.mid_price = (self.ask_price + self.bid_price) / Decimal::TWO;
|
|
|
}
|
|
|
|
|
|
- if !self.fair_price_vec[0].is_zero() && !self.fair_price_vec[1].is_zero() {
|
|
|
- self.ref_price = (self.fair_price_vec[0] + self.fair_price_vec[1]) / Decimal::TWO;
|
|
|
- }
|
|
|
-
|
|
|
self.processor().await;
|
|
|
}
|
|
|
|
|
|
@@ -231,7 +227,7 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
pub fn update_sigma_square(&mut self) {
|
|
|
- self.sigma_square = self.spread_max * dec!(0.3);
|
|
|
+ self.sigma_square = self.spread_max * dec!(0.5);
|
|
|
self.sigma_square.rescale(10);
|
|
|
}
|
|
|
|
|
|
@@ -248,7 +244,9 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
pub fn update_ref_price(&mut self) {
|
|
|
- self.ref_price = self.mid_price;
|
|
|
+ if !self.fair_price_vec[0].is_zero() && !self.fair_price_vec[1].is_zero() {
|
|
|
+ self.ref_price = (self.fair_price_vec[0] + self.fair_price_vec[1]) / Decimal::TWO;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
pub fn update_delta(&mut self) {
|
|
|
@@ -261,11 +259,11 @@ impl AvellanedaStoikov {
|
|
|
self.ask_delta = self.base_delta;
|
|
|
|
|
|
if self.inventory > Decimal::ZERO {
|
|
|
- self.bid_delta += pos_edge * Decimal::TEN;
|
|
|
+ self.bid_delta += pos_edge * Decimal::TWO;
|
|
|
self.ask_delta = Decimal::NEGATIVE_ONE;
|
|
|
} else if self.inventory < Decimal::ZERO {
|
|
|
self.bid_delta = Decimal::NEGATIVE_ONE;
|
|
|
- self.ask_delta += pos_edge * Decimal::TEN;
|
|
|
+ self.ask_delta += pos_edge * Decimal::TWO;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -365,10 +363,11 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
let mut cci = self.cci_arc.lock().await;
|
|
|
+
|
|
|
cci.predictor_state_vec.push_back(PredictorState {
|
|
|
update_time: Decimal::from_i64(Utc::now().timestamp_millis()).unwrap(),
|
|
|
|
|
|
- mid_price: self.last_price,
|
|
|
+ mid_price: self.mid_price,
|
|
|
ask_price: self.ask_price,
|
|
|
bid_price: self.bid_price,
|
|
|
last_price: self.last_price,
|