|
|
@@ -208,7 +208,7 @@ impl AvellanedaStoikov {
|
|
|
self.gamma = if self.sigma_square == Decimal::ZERO || self.inventory == Decimal::ZERO {
|
|
|
Decimal::ONE
|
|
|
} else {
|
|
|
- Decimal::ONE + Self::IRA * (self.spread_max / self.spread_min) * self.inventory.abs() / Decimal::TEN
|
|
|
+ Decimal::ONE + Self::IRA * (self.spread_max / self.spread_min).sqrt().unwrap() * self.inventory.abs() / Decimal::TEN
|
|
|
};
|
|
|
self.gamma.rescale(8);
|
|
|
}
|
|
|
@@ -246,16 +246,12 @@ impl AvellanedaStoikov {
|
|
|
pub fn update_delta(&mut self) {
|
|
|
if self.gamma != Decimal::ZERO {
|
|
|
let a = (self.gamma * self.sigma_square * self.t_diff) / Decimal::TWO;
|
|
|
- let edge = (self.flow_ratio_diff_log.abs() / dec!(0.0003)) * self.gamma * self.sigma_square * self.t_diff;
|
|
|
+ // let edge = (self.flow_ratio_diff_log.abs() / dec!(0.0003)) * self.gamma * self.sigma_square * self.t_diff;
|
|
|
|
|
|
let temp_delta_bid = {
|
|
|
let b = (Decimal::ONE / self.gamma) * (Decimal::ONE + self.gamma / self.kappa).ln();
|
|
|
|
|
|
- if self.flow_ratio_diff_log > Decimal::ZERO {
|
|
|
- a + b
|
|
|
- } else {
|
|
|
- a + b + edge
|
|
|
- }
|
|
|
+ a + b
|
|
|
};
|
|
|
self.delta_bid = if self.delta_bid == Decimal::ZERO || temp_delta_bid > self.delta_bid {
|
|
|
temp_delta_bid
|
|
|
@@ -266,11 +262,7 @@ impl AvellanedaStoikov {
|
|
|
let temp_delta_ask = {
|
|
|
let b = (Decimal::ONE / self.gamma) * (Decimal::ONE + self.gamma / self.kappa).ln();
|
|
|
|
|
|
- if self.flow_ratio_diff_log < Decimal::ZERO {
|
|
|
- a + b
|
|
|
- } else {
|
|
|
- a + b + edge
|
|
|
- }
|
|
|
+ a + b
|
|
|
};
|
|
|
self.delta_ask = if self.delta_ask == Decimal::ZERO || temp_delta_ask > self.delta_ask {
|
|
|
temp_delta_ask
|
|
|
@@ -403,8 +395,8 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
inventory: self.inventory,
|
|
|
sigma_square: self.sigma_square,
|
|
|
- gamma: self.delta_ask,
|
|
|
- kappa: self.delta_bid,
|
|
|
+ gamma: self.gamma,
|
|
|
+ kappa: self.kappa,
|
|
|
|
|
|
flow_ratio: self.flow_ratio_diff_log,
|
|
|
ref_price: self.ref_price,
|