|
|
@@ -322,11 +322,14 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
pub async fn on_inventory(&mut self, pos_amount: &Decimal, pos_avg_price: &Decimal, min_amount_value: &Decimal) {
|
|
|
+ if self.mid_price.is_zero() {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
let prev_inventory = self.inventory;
|
|
|
self.pos_amount = pos_amount.clone();
|
|
|
self.pos_avg_price = pos_avg_price.clone();
|
|
|
self.inventory = (pos_amount / (min_amount_value / self.mid_price)).trunc();
|
|
|
- info!("pos_amount={}, inventory={}", pos_amount, self.inventory);
|
|
|
if prev_inventory != self.inventory && prev_inventory.is_zero() {
|
|
|
self.prev_trade_time = Utc::now().timestamp_micros();
|
|
|
self.close_price = self.order_ref_price;
|
|
|
@@ -337,7 +340,7 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
pub fn update_sigma_square(&mut self) {
|
|
|
- self.sigma_square = self.ref_price * dec!(0.001);
|
|
|
+ self.sigma_square = self.ref_price * dec!(0.002);
|
|
|
self.sigma_square.rescale(10);
|
|
|
}
|
|
|
|
|
|
@@ -382,10 +385,10 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
if self.inventory > Decimal::ZERO {
|
|
|
// self.ask_delta = self.base_delta;
|
|
|
- self.ask_delta = self.ref_price * dec!(0.0002);
|
|
|
+ self.ask_delta = self.ref_price * dec!(0.0003);
|
|
|
} else if self.inventory < Decimal::ZERO {
|
|
|
// self.bid_delta = self.base_delta;
|
|
|
- self.bid_delta = self.ref_price * dec!(0.0002);
|
|
|
+ self.bid_delta = self.ref_price * dec!(0.0003);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -531,7 +534,7 @@ impl AvellanedaStoikov {
|
|
|
let inventory = self.inventory;
|
|
|
let sigma_square = self.error_rate;
|
|
|
let gamma = now - self.last_update_time;
|
|
|
- let kappa = self.dir;
|
|
|
+ let kappa = self.pos_amount;
|
|
|
|
|
|
let flow_ratio = Decimal::ZERO;
|
|
|
let ref_price = self.ref_price;
|
|
|
@@ -574,26 +577,26 @@ impl AvellanedaStoikov {
|
|
|
});
|
|
|
|
|
|
// 长度限定,最大100w条
|
|
|
- if cci.predictor_state_vec.len() > 700_000 {
|
|
|
+ if cci.predictor_state_vec.len() > 10_000 {
|
|
|
cci.predictor_state_vec.remove(0);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- let error_rate = self.error_rate;
|
|
|
- // 将数据存入本地json文件,要求不能在行情烈度比较大的时候执行这个逻辑,防止卡交易逻辑
|
|
|
- if now - self.prev_save_time < dec!(60000) || error_rate > dec!(0.15) {
|
|
|
- return;
|
|
|
- }
|
|
|
- // 存放逻辑
|
|
|
- info!("存放, {}, {}, {}", now, self.prev_save_time, now - self.prev_save_time);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- self.prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
- let cci = cci_arc.lock().await;
|
|
|
- let temp_json_str = serde_json::to_string(&cci.predictor_state_vec).unwrap();
|
|
|
- Self::write_to_file(&temp_json_str, "./db/db.json".to_string()).await;
|
|
|
- info!("存放完毕, {}", self.prev_save_time - now);
|
|
|
+ // let error_rate = self.error_rate;
|
|
|
+ // // 将数据存入本地json文件,要求不能在行情烈度比较大的时候执行这个逻辑,防止卡交易逻辑
|
|
|
+ // if now - self.prev_save_time < dec!(60000) || error_rate > dec!(0.15) {
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // // 存放逻辑
|
|
|
+ // info!("存放, {}, {}, {}", now, self.prev_save_time, now - self.prev_save_time);
|
|
|
+ //
|
|
|
+ //
|
|
|
+ //
|
|
|
+ // self.prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
+ // let cci = cci_arc.lock().await;
|
|
|
+ // let temp_json_str = serde_json::to_string(&cci.predictor_state_vec).unwrap();
|
|
|
+ // Self::write_to_file(&temp_json_str, "./db/db.json".to_string()).await;
|
|
|
+ // info!("存放完毕, {}", self.prev_save_time - now);
|
|
|
}
|
|
|
|
|
|
// #[instrument(skip(self, ref_ticker_map), level="TRACE")]
|