|
|
@@ -62,6 +62,7 @@ pub struct AvellanedaStoikov {
|
|
|
pub t_diff: Decimal, // (T-t)
|
|
|
pub last_update_time: Decimal,
|
|
|
pub last_index: Decimal,
|
|
|
+ pub prev_insert_time: Decimal,
|
|
|
}
|
|
|
|
|
|
impl AvellanedaStoikov {
|
|
|
@@ -127,6 +128,7 @@ impl AvellanedaStoikov {
|
|
|
short_trade_len_dec: Default::default(),
|
|
|
last_update_time: Default::default(),
|
|
|
last_index: Default::default(),
|
|
|
+ prev_insert_time: Default::default(),
|
|
|
};
|
|
|
|
|
|
avellaneda_stoikov
|
|
|
@@ -370,11 +372,11 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
self.base_delta = self.sigma_square;
|
|
|
|
|
|
- self.bid_delta = self.base_delta * Decimal::TWO;
|
|
|
+ self.bid_delta = self.base_delta;
|
|
|
self.ask_delta = self.base_delta;
|
|
|
|
|
|
- if self.money_flow_index < dec!(50) && self.error_rate > dec!(0.3) {
|
|
|
- self.bid_delta = self.base_delta;
|
|
|
+ if self.money_flow_index > dec!(50) && self.error_rate > dec!(0.3) {
|
|
|
+ self.bid_delta = self.base_delta * Decimal::TWO;
|
|
|
}
|
|
|
|
|
|
// else if self.flow_ratio.is_zero() {
|
|
|
@@ -522,19 +524,15 @@ impl AvellanedaStoikov {
|
|
|
let flow_ratio = Decimal::ZERO;
|
|
|
let ref_price = self.ref_price;
|
|
|
|
|
|
+ let need_append = now - self.prev_insert_time > Decimal::ONE_HUNDRED;
|
|
|
+ if !need_append {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ self.prev_insert_time = now;
|
|
|
// 数据量太多导致的,减少一些吧
|
|
|
tokio::spawn(async move {
|
|
|
let mut cci = cci_arc.lock().await;
|
|
|
- let need_append = if cci.predictor_state_vec.len() == 0 {
|
|
|
- true
|
|
|
- } else {
|
|
|
- let state = cci.predictor_state_vec.deque.iter().last().unwrap();
|
|
|
-
|
|
|
- now - state.update_time > Decimal::ONE_HUNDRED
|
|
|
- };
|
|
|
- if !need_append {
|
|
|
- return;
|
|
|
- }
|
|
|
|
|
|
cci.predictor_state_vec.push_back(PredictorState {
|
|
|
update_time: now,
|