|
|
@@ -52,7 +52,7 @@ pub struct AvellanedaStoikov {
|
|
|
|
|
|
impl AvellanedaStoikov {
|
|
|
// 时间窗口大小(微秒)
|
|
|
- const MAX_TIME_RANGE_MICROS: i64 = 1 * 60_000_000;
|
|
|
+ const MAX_TIME_RANGE_MICROS: i64 = 3 * 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.732);
|
|
|
+ self.base_delta = (Decimal::ONE / self.gamma) * (Decimal::ONE + self.gamma / self.kappa).ln() * dec!(0.618);
|
|
|
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.5);
|
|
|
+ self.bid_delta += pos_edge;
|
|
|
} 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.5);
|
|
|
+ self.ask_delta += pos_edge;
|
|
|
}
|
|
|
if self.ratio_edge < Decimal::ZERO {
|
|
|
self.bid_delta += self.ratio_edge.abs()
|
|
|
@@ -269,13 +269,17 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
pub fn update_flow_ratio(&mut self) {
|
|
|
- self.flow_ratio = if self.trade_vec.len() < 100 {
|
|
|
- Decimal::ZERO
|
|
|
- } else {
|
|
|
- (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value)
|
|
|
- };
|
|
|
+ // self.flow_ratio = if self.trade_vec.len() < 100 {
|
|
|
+ // Decimal::ZERO
|
|
|
+ // } else {
|
|
|
+ // let now = (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value);
|
|
|
+ //
|
|
|
+ // self.flow_ratio * dec!(0.8) + now * dec!(0.2)
|
|
|
+ // };
|
|
|
+ //
|
|
|
+ // self.flow_ratio.rescale(6);
|
|
|
|
|
|
- self.flow_ratio.rescale(6);
|
|
|
+ self.flow_ratio = Decimal::ZERO;
|
|
|
}
|
|
|
|
|
|
pub fn check_ready(&mut self) {
|