|
|
@@ -57,7 +57,7 @@ impl AvellanedaStoikov {
|
|
|
// 时间窗口大小(微秒)
|
|
|
const MAX_TIME_RANGE_MICROS: i64 = 5 * 60_000_000;
|
|
|
const TRADE_LONG_RANGE_MICROS: i64 = 3 * 60_000_000;
|
|
|
- const TRADE_SHORT_RANGE_MICROS: i64 = 30_000_000;
|
|
|
+ const TRADE_SHORT_RANGE_MICROS: i64 = 10_000_000;
|
|
|
// const ONE_MILLION: Decimal = dec!(1_000_000);
|
|
|
// const TWENTY_THOUSAND: Decimal = dec!(20_000);
|
|
|
const IRA: Decimal = dec!(1);
|
|
|
@@ -290,7 +290,7 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
fn calc_flow_ratio(prev_flow_ratio: &Decimal, min_volume: &Decimal, trades: &mut FixedTimeRangeDeque<Trade>) -> Decimal {
|
|
|
// 使用EMA來更新資金流,確保平滑性
|
|
|
- let a = Decimal::TWO / dec!(50);
|
|
|
+ // let a = Decimal::TWO / dec!(50);
|
|
|
|
|
|
let mut flow_in_value = Decimal::ZERO;
|
|
|
let mut flow_out_value = Decimal::ZERO;
|
|
|
@@ -321,8 +321,9 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
if flow_out_value + flow_in_value > *min_volume {
|
|
|
- let now = (flow_in_value - flow_out_value) / (flow_out_value + flow_in_value);
|
|
|
- a * now + (Decimal::ONE - a) * prev_flow_ratio
|
|
|
+ // let now = (flow_in_value - flow_out_value) / (flow_out_value + flow_in_value);
|
|
|
+ // a * now + (Decimal::ONE - a) * prev_flow_ratio
|
|
|
+ (flow_in_value - flow_out_value) / (flow_out_value + flow_in_value)
|
|
|
} else {
|
|
|
Decimal::ZERO
|
|
|
}
|
|
|
@@ -372,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_long = Self::calc_flow_ratio(&self.flow_ratio_long, &dec!(0), &mut self.trade_long_vec);
|
|
|
self.flow_ratio_short = Self::calc_flow_ratio(&self.flow_ratio_short, &dec!(0), &mut self.trade_short_vec);
|
|
|
}
|
|
|
|