|
|
@@ -275,7 +275,7 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
pub fn update_delta(&mut self) {
|
|
|
if self.gamma != Decimal::ZERO {
|
|
|
- let pos_edge = self.sigma_square * self.inventory * self.t_diff;
|
|
|
+ let pos_edge = self.sigma_square * self.inventory.abs() * self.t_diff;
|
|
|
|
|
|
self.base_delta = self.sigma_square;
|
|
|
// self.ratio_edge = self.flow_ratio_mfi * self.sigma_square;
|
|
|
@@ -284,11 +284,11 @@ impl AvellanedaStoikov {
|
|
|
self.ask_delta = self.base_delta;
|
|
|
|
|
|
if self.inventory > Decimal::ZERO {
|
|
|
- self.bid_delta += pos_edge * Decimal::TEN;
|
|
|
- self.ask_delta = Decimal::ZERO;
|
|
|
+ self.bid_delta += pos_edge * Decimal::TWO;
|
|
|
+ self.ask_delta = Decimal::NEGATIVE_ONE;
|
|
|
} else if self.inventory < Decimal::ZERO {
|
|
|
- self.bid_delta = Decimal::ZERO;
|
|
|
- self.ask_delta += pos_edge * Decimal::TEN;
|
|
|
+ self.bid_delta = Decimal::NEGATIVE_ONE;
|
|
|
+ self.ask_delta += pos_edge * Decimal::TWO;
|
|
|
}
|
|
|
//
|
|
|
// if (self.ratio_edge > Decimal::ZERO) || (self.money_flow_index > dec!(60) && self.inventory > Decimal::ZERO) {
|
|
|
@@ -315,8 +315,16 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
pub fn update_optimal_ask_and_bid(&mut self) {
|
|
|
- self.optimal_ask_price = max(self.ref_price + self.ask_delta, self.ask_price);
|
|
|
- self.optimal_bid_price = min(self.ref_price - self.bid_delta, self.bid_price);
|
|
|
+ self.optimal_ask_price = if self.ask_delta == Decimal::NEGATIVE_ONE {
|
|
|
+ self.ask_price
|
|
|
+ } else {
|
|
|
+ max(self.ref_price + self.ask_delta, self.ask_price)
|
|
|
+ };
|
|
|
+ self.optimal_bid_price = if self.bid_price == Decimal::NEGATIVE_ONE {
|
|
|
+ self.bid_price
|
|
|
+ } else {
|
|
|
+ min(self.ref_price - self.bid_delta, self.bid_price)
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
pub fn update_t_diff(&mut self) {
|