|
|
@@ -52,7 +52,7 @@ pub struct AvellanedaStoikov {
|
|
|
|
|
|
impl AvellanedaStoikov {
|
|
|
// 时间窗口大小(微秒)
|
|
|
- const MAX_TIME_RANGE_MICROS: i64 = 5 * 60_000_000;
|
|
|
+ const MAX_TIME_RANGE_MICROS: i64 = 1 * 60_000_000;
|
|
|
// const ONE_MILLION: Decimal = dec!(1_000_000);
|
|
|
// const TWENTY_THOUSAND: Decimal = dec!(20_000);
|
|
|
const IRA: Decimal = dec!(1);
|
|
|
@@ -233,7 +233,7 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
pub fn update_delta(&mut self) {
|
|
|
if self.gamma != Decimal::ZERO {
|
|
|
- self.base_delta = (Decimal::ONE / self.gamma) * (Decimal::ONE + self.gamma / self.kappa).ln() * dec!(0.8);
|
|
|
+ self.base_delta = (Decimal::ONE / self.gamma) * (Decimal::ONE + self.gamma / self.kappa).ln() * dec!(0.732);
|
|
|
self.ratio_edge = (self.flow_ratio * self.base_delta) * Decimal::TWO;
|
|
|
|
|
|
self.bid_delta = self.base_delta;
|
|
|
@@ -242,11 +242,11 @@ impl AvellanedaStoikov {
|
|
|
if self.inventory > Decimal::ZERO {
|
|
|
let pos_edge = ((Decimal::ONE + Decimal::TWO * self.inventory) / Decimal::TWO) * (self.gamma * self.sigma_square) * self.t_diff;
|
|
|
|
|
|
- self.bid_delta += pos_edge * dec!(0.1);
|
|
|
+ self.bid_delta += pos_edge * dec!(0.5);
|
|
|
} else if self.inventory < Decimal::ZERO {
|
|
|
let pos_edge = ((Decimal::ONE - Decimal::TWO * self.inventory) / Decimal::TWO) * (self.gamma * self.sigma_square) * self.t_diff;
|
|
|
|
|
|
- self.ask_delta += pos_edge * dec!(0.1);
|
|
|
+ self.ask_delta += pos_edge * dec!(0.5);
|
|
|
}
|
|
|
if self.ratio_edge < Decimal::ZERO {
|
|
|
self.bid_delta += self.ratio_edge.abs()
|
|
|
@@ -303,11 +303,11 @@ impl AvellanedaStoikov {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if self.depth_vec.len() < 20 {
|
|
|
+ if self.depth_vec.len() < 200 {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if self.trade_vec.len() < 20 {
|
|
|
+ if self.trade_vec.len() < 200 {
|
|
|
return;
|
|
|
}
|
|
|
|