|
|
@@ -1,14 +1,12 @@
|
|
|
use std::cmp::{max, min};
|
|
|
use std::collections::{BTreeMap, VecDeque};
|
|
|
use std::sync::Arc;
|
|
|
-use std::time::Duration;
|
|
|
use chrono::{Utc};
|
|
|
use futures_channel::mpsc::UnboundedSender;
|
|
|
use futures_util::StreamExt;
|
|
|
use rust_decimal::prelude::*;
|
|
|
use rust_decimal_macros::dec;
|
|
|
use tokio::sync::{Mutex};
|
|
|
-use tokio::time::sleep;
|
|
|
use tracing::{info};
|
|
|
use global::cci::CentralControlInfo;
|
|
|
use global::fixed_time_range_deque::FixedTimeRangeDeque;
|
|
|
@@ -94,36 +92,34 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
tokio::spawn(async move {
|
|
|
let len = 16usize;
|
|
|
- let mut prev_save_time = dec!(0);
|
|
|
- let mut debugs: Vec<Vec<Decimal>> = vec![Vec::new(); len];
|
|
|
+ let mut prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
+ let mut debugs: Vec<VecDeque<Decimal>> = vec![VecDeque::new(); len];
|
|
|
|
|
|
loop {
|
|
|
while let Some(value) = rx.next().await {
|
|
|
// 数据填充到对应位置
|
|
|
for i in 0..len {
|
|
|
- debugs[i].push(value[i]);
|
|
|
+ debugs[i].push_back(value[i]);
|
|
|
}
|
|
|
|
|
|
// 长度限制
|
|
|
- if debugs[0].len() > 700_000 {
|
|
|
+ if debugs[0].len() > 1_000_000 {
|
|
|
for i in 0..len {
|
|
|
- debugs[i].remove(0);
|
|
|
+ debugs[i].pop_front(); // 从前面移除元素
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- let now = Decimal::from(Utc::now().timestamp_millis());
|
|
|
- if now - prev_save_time < dec!(60000) {
|
|
|
- sleep(Duration::from_millis(1000)).await;
|
|
|
|
|
|
- continue;
|
|
|
- }
|
|
|
+ let now = Decimal::from(Utc::now().timestamp_millis());
|
|
|
+ if now - prev_save_time < dec!(60000) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- let temp_html_str = utils::build_html_file(&debugs).await;
|
|
|
- utils::write_to_file(&temp_html_str, "./db/db.html".to_string()).await;
|
|
|
+ let temp_html_str = utils::build_html_file(&debugs).await;
|
|
|
+ utils::write_to_file(&temp_html_str, "./db/db.html".to_string()).await;
|
|
|
|
|
|
- prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
- info!("存放完毕, {}", prev_save_time - now);
|
|
|
+ prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
+ info!("存放完毕, {}, {}", prev_save_time - now, debugs[0].len());
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -592,7 +588,7 @@ impl AvellanedaStoikov {
|
|
|
let flow_ratio = Decimal::ZERO;
|
|
|
let ref_price = self.ref_price;
|
|
|
|
|
|
- let need_append = now - self.prev_insert_time > Decimal::TEN;
|
|
|
+ let need_append = now - self.prev_insert_time > dec!(50);
|
|
|
if !need_append {
|
|
|
return;
|
|
|
}
|
|
|
@@ -615,65 +611,6 @@ impl AvellanedaStoikov {
|
|
|
flow_ratio,
|
|
|
ref_price
|
|
|
]).unwrap()
|
|
|
-
|
|
|
- // self.prev_insert_time = now;
|
|
|
- //
|
|
|
- // // 将数据放入debugs里面
|
|
|
- // if self.debugs.is_empty() {
|
|
|
- // self.debugs = vec![Vec::new(); 16];
|
|
|
- // }
|
|
|
- // self.debugs[0].push(now);
|
|
|
- // self.debugs[1].push(mid_price);
|
|
|
- // self.debugs[2].push(ask_price);
|
|
|
- // self.debugs[3].push(bid_price);
|
|
|
- // self.debugs[4].push(last_price);
|
|
|
- // self.debugs[5].push(spread);
|
|
|
- // self.debugs[6].push(spread_max);
|
|
|
- // self.debugs[7].push(spread_min);
|
|
|
- // self.debugs[8].push(optimal_ask_price);
|
|
|
- // self.debugs[9].push(optimal_bid_price);
|
|
|
- // self.debugs[10].push(inventory);
|
|
|
- // self.debugs[11].push(sigma_square);
|
|
|
- // self.debugs[12].push(gamma);
|
|
|
- // self.debugs[13].push(kappa);
|
|
|
- // self.debugs[14].push(flow_ratio);
|
|
|
- // self.debugs[15].push(ref_price);
|
|
|
- //
|
|
|
- // // 长度限定
|
|
|
- // if self.debugs[0].len() > 700_000 {
|
|
|
- // self.debugs[0].remove(0);
|
|
|
- // self.debugs[1].remove(0);
|
|
|
- // self.debugs[2].remove(0);
|
|
|
- // self.debugs[3].remove(0);
|
|
|
- // self.debugs[4].remove(0);
|
|
|
- // self.debugs[5].remove(0);
|
|
|
- // self.debugs[6].remove(0);
|
|
|
- // self.debugs[7].remove(0);
|
|
|
- // self.debugs[8].remove(0);
|
|
|
- // self.debugs[9].remove(0);
|
|
|
- // self.debugs[10].remove(0);
|
|
|
- // self.debugs[11].remove(0);
|
|
|
- // self.debugs[12].remove(0);
|
|
|
- // self.debugs[13].remove(0);
|
|
|
- // self.debugs[14].remove(0);
|
|
|
- // self.debugs[15].remove(0);
|
|
|
- // }
|
|
|
- //
|
|
|
- // // 将数据存入本地json文件,要求不能在行情烈度比较大的时候执行这个逻辑,防止卡交易逻辑
|
|
|
- // if now - self.prev_save_time < dec!(60000) {
|
|
|
- // return;
|
|
|
- // }
|
|
|
- // // 存放逻辑
|
|
|
- // info!("存放, {}, {}, {}", now, self.prev_save_time, now - self.prev_save_time);
|
|
|
- //
|
|
|
- // let data_c = self.debugs.clone();
|
|
|
- // tokio::spawn(async move {
|
|
|
- // let temp_html_str = utils::build_html_file(&data_c).await;
|
|
|
- // utils::write_to_file(&temp_html_str, "./db/db.html".to_string()).await;
|
|
|
- // });
|
|
|
- //
|
|
|
- // self.prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
- // info!("存放完毕, {}", self.prev_save_time - now);
|
|
|
}
|
|
|
|
|
|
// #[instrument(skip(self, ref_ticker_map), level="TRACE")]
|