|
|
@@ -56,8 +56,8 @@ pub struct AvellanedaStoikov {
|
|
|
impl AvellanedaStoikov {
|
|
|
// 时间窗口大小(微秒)
|
|
|
const MAX_TIME_RANGE_MICROS: i64 = 5 * 60_000_000;
|
|
|
- const TRADE_LONG_RANGE_MICROS: i64 = 30_000_000;
|
|
|
- const TRADE_SHORT_RANGE_MICROS: i64 = 6_000_000;
|
|
|
+ const TRADE_LONG_RANGE_MICROS: i64 = 3 * 60_000_000;
|
|
|
+ const TRADE_SHORT_RANGE_MICROS: i64 = 30_000_000;
|
|
|
// const ONE_MILLION: Decimal = dec!(1_000_000);
|
|
|
// const TWENTY_THOUSAND: Decimal = dec!(20_000);
|
|
|
const IRA: Decimal = dec!(1);
|
|
|
@@ -227,18 +227,18 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
pub fn update_delta(&mut self) {
|
|
|
- // let pos_edge = self.gamma * self.sigma_square * self.inventory.abs().powd(Decimal::TWO) * self.t_diff;
|
|
|
+ let pos_edge = self.gamma * self.sigma_square * self.inventory.abs().powd(Decimal::TWO) * self.t_diff;
|
|
|
|
|
|
self.base_delta = self.sigma_square;
|
|
|
|
|
|
self.bid_delta = self.base_delta;
|
|
|
self.ask_delta = self.base_delta;
|
|
|
|
|
|
- // if self.inventory > Decimal::ZERO {
|
|
|
- // self.bid_delta += pos_edge;
|
|
|
- // } else if self.inventory < Decimal::ZERO {
|
|
|
- // self.ask_delta += pos_edge;
|
|
|
- // }
|
|
|
+ if self.inventory > Decimal::ZERO {
|
|
|
+ self.bid_delta += pos_edge;
|
|
|
+ } else if self.inventory < Decimal::ZERO {
|
|
|
+ self.ask_delta += pos_edge;
|
|
|
+ }
|
|
|
|
|
|
if !self.flow_ratio_long.is_zero() {
|
|
|
if self.flow_ratio_long < Decimal::ZERO {
|
|
|
@@ -307,9 +307,9 @@ impl AvellanedaStoikov {
|
|
|
flow_out_value += trade.value;
|
|
|
} else {
|
|
|
// if trade.size > Decimal::ZERO {
|
|
|
- // self.flow_in_value += trade.value;
|
|
|
+ // flow_in_value += trade.value;
|
|
|
// } else {
|
|
|
- // self.flow_out_value += trade.value;
|
|
|
+ // flow_out_value += trade.value;
|
|
|
// }
|
|
|
}
|
|
|
|
|
|
@@ -373,7 +373,7 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
pub fn update_flow_ratio(&mut self) {
|
|
|
self.flow_ratio_long = Self::calc_flow_ratio(&self.flow_ratio_long, &dec!(30_000), &mut self.trade_long_vec);
|
|
|
- self.flow_ratio_short = Self::calc_flow_ratio(&self.flow_ratio_short, &dec!(10_000), &mut self.trade_short_vec);
|
|
|
+ self.flow_ratio_short = Self::calc_flow_ratio(&self.flow_ratio_short, &dec!(0), &mut self.trade_short_vec);
|
|
|
}
|
|
|
|
|
|
pub fn check_ready(&mut self) {
|