|
|
@@ -60,7 +60,9 @@ pub struct AvellanedaStoikov {
|
|
|
pub t_diff: Decimal, // (T-t)
|
|
|
pub last_update_time: Decimal,
|
|
|
pub last_index: Decimal,
|
|
|
+
|
|
|
pub prev_insert_time: Decimal,
|
|
|
+ pub prev_save_time: Decimal,
|
|
|
}
|
|
|
|
|
|
impl AvellanedaStoikov {
|
|
|
@@ -124,8 +126,10 @@ impl AvellanedaStoikov {
|
|
|
short_trade_len_dec: Default::default(),
|
|
|
last_update_time: Default::default(),
|
|
|
last_index: Default::default(),
|
|
|
- prev_insert_time: Default::default(),
|
|
|
pos_avg_price: Default::default(),
|
|
|
+
|
|
|
+ prev_insert_time: Default::default(),
|
|
|
+ prev_save_time: Decimal::from(Utc::now().timestamp_millis()),
|
|
|
};
|
|
|
|
|
|
avellaneda_stoikov
|
|
|
@@ -216,7 +220,7 @@ impl AvellanedaStoikov {
|
|
|
self.error_rate.rescale(4);
|
|
|
|
|
|
self.last_price = trade.price;
|
|
|
- self.processor().await;
|
|
|
+ // self.processor().await;
|
|
|
}
|
|
|
|
|
|
pub async fn update_fair_price(&mut self, depth: &Depth, index: usize) {
|
|
|
@@ -503,19 +507,20 @@ impl AvellanedaStoikov {
|
|
|
let flow_ratio = Decimal::ZERO;
|
|
|
let ref_price = self.ref_price;
|
|
|
|
|
|
- let need_append = now - self.prev_insert_time > Decimal::TEN;
|
|
|
- if !need_append {
|
|
|
- return;
|
|
|
- }
|
|
|
+ // let need_append = now - self.prev_insert_time > Decimal::TEN;
|
|
|
+ // if !need_append {
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
|
|
|
self.prev_insert_time = now;
|
|
|
- // 数据量太多导致的,减少一些吧
|
|
|
+
|
|
|
+ // 将数据放入cci里面,方便读取
|
|
|
tokio::spawn(async move {
|
|
|
let mut cci = cci_arc.lock().await;
|
|
|
|
|
|
let kappa = Decimal::from(cci.predictor_state_vec.len());
|
|
|
|
|
|
- cci.predictor_state_vec.push_back(PredictorState {
|
|
|
+ cci.predictor_state_vec.push(PredictorState {
|
|
|
update_time: now,
|
|
|
|
|
|
mid_price,
|
|
|
@@ -537,7 +542,22 @@ impl AvellanedaStoikov {
|
|
|
flow_ratio,
|
|
|
ref_price,
|
|
|
});
|
|
|
+
|
|
|
+ // 长度限定,最大100w条
|
|
|
+ if cci.predictor_state_vec.len() > 1_000_000 {
|
|
|
+ cci.predictor_state_vec.remove(0);
|
|
|
+ }
|
|
|
});
|
|
|
+
|
|
|
+ let prev_save_time = self.prev_save_time;
|
|
|
+ let error_rate = self.error_rate;
|
|
|
+ // 将数据存入本地json文件,要求不能在行情烈度比较大的时候执行这个逻辑,防止卡交易逻辑
|
|
|
+ if now - prev_save_time < dec!(60000) && error_rate > dec!(0.15) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ self.prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
+ // 存放逻辑
|
|
|
}
|
|
|
|
|
|
// #[instrument(skip(self, ref_ticker_map), level="TRACE")]
|