|
|
@@ -1,18 +1,14 @@
|
|
|
-use futures_channel::mpsc::UnboundedSender;
|
|
|
use std::cmp::{max, min};
|
|
|
use std::collections::HashMap;
|
|
|
-use std::collections::VecDeque;
|
|
|
use std::ops::{Div, Mul};
|
|
|
use std::str::FromStr;
|
|
|
use chrono::Utc;
|
|
|
-use futures_util::StreamExt;
|
|
|
use rust_decimal::Decimal;
|
|
|
use rust_decimal::prelude::{FromPrimitive, ToPrimitive};
|
|
|
use tracing::{error, info, warn};
|
|
|
use tokio::time::Instant;
|
|
|
use crate::params::Params;
|
|
|
use crate::model::{LocalPosition, OrderCommand, OrderInfo};
|
|
|
-use crate::utils;
|
|
|
use crate::utils::{clip, fix_amount, fix_price, generate_client_id, get_limit_order_requests_num_per_second, get_limit_requests_num_per_second};
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
@@ -113,7 +109,7 @@ pub struct Strategy {
|
|
|
|
|
|
|
|
|
pub prev_insert_time: Decimal,
|
|
|
- pub debug_sender: UnboundedSender<Vec<Decimal>>,
|
|
|
+ // pub debug_sender: UnboundedSender<Vec<Decimal>>,
|
|
|
}
|
|
|
|
|
|
impl Strategy {
|
|
|
@@ -125,44 +121,44 @@ impl Strategy {
|
|
|
|
|
|
// 创建数据通道
|
|
|
// 创建一个无界通道
|
|
|
- let (tx, mut rx) = futures_channel::mpsc::unbounded::<Vec<Decimal>>();
|
|
|
-
|
|
|
- tokio::spawn(async move {
|
|
|
- let len = 16usize;
|
|
|
- let mut prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
- let mut debugs: Vec<VecDeque<Option<Decimal>>> = vec![VecDeque::new(); len];
|
|
|
-
|
|
|
- while let Some(value) = rx.next().await {
|
|
|
- // 数据填充到对应位置
|
|
|
- for i in 0..len {
|
|
|
- if value[i] == Decimal::from_str("14142135623730951").unwrap() {
|
|
|
- debugs[i].push_back(None);
|
|
|
- } else {
|
|
|
- debugs[i].push_back(Some(value[i]));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 长度限制
|
|
|
- if debugs[0].len() > 500_000 {
|
|
|
- for i in 0..len {
|
|
|
- debugs[i].pop_front(); // 从前面移除元素
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- let now = Decimal::from(Utc::now().timestamp_millis());
|
|
|
- if now - prev_save_time < Decimal::from_str("60000").unwrap() {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- let debugs_clone = debugs.clone();
|
|
|
- let temp_html_str = tokio::task::spawn_blocking(move || {
|
|
|
- utils::build_html_file(&debugs_clone)
|
|
|
- }).await.unwrap();
|
|
|
-
|
|
|
- utils::write_to_file(&temp_html_str, "./db/db.html".to_string()).await;
|
|
|
- prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
- }
|
|
|
- });
|
|
|
+ // let (tx, mut rx) = futures_channel::mpsc::unbounded::<Vec<Decimal>>();
|
|
|
+ //
|
|
|
+ // tokio::spawn(async move {
|
|
|
+ // let len = 16usize;
|
|
|
+ // let mut prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
+ // let mut debugs: Vec<VecDeque<Option<Decimal>>> = vec![VecDeque::new(); len];
|
|
|
+ //
|
|
|
+ // while let Some(value) = rx.next().await {
|
|
|
+ // // 数据填充到对应位置
|
|
|
+ // for i in 0..len {
|
|
|
+ // if value[i] == Decimal::from_str("14142135623730951").unwrap() {
|
|
|
+ // debugs[i].push_back(None);
|
|
|
+ // } else {
|
|
|
+ // debugs[i].push_back(Some(value[i]));
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 长度限制
|
|
|
+ // if debugs[0].len() > 500_000 {
|
|
|
+ // for i in 0..len {
|
|
|
+ // debugs[i].pop_front(); // 从前面移除元素
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // let now = Decimal::from(Utc::now().timestamp_millis());
|
|
|
+ // if now - prev_save_time < Decimal::from_str("60000").unwrap() {
|
|
|
+ // continue;
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // let debugs_clone = debugs.clone();
|
|
|
+ // let temp_html_str = tokio::task::spawn_blocking(move || {
|
|
|
+ // utils::build_html_file(&debugs_clone)
|
|
|
+ // }).await.unwrap();
|
|
|
+ //
|
|
|
+ // utils::write_to_file(&temp_html_str, "./db/db.html".to_string()).await;
|
|
|
+ // prev_save_time = Decimal::from(Utc::now().timestamp_millis());
|
|
|
+ // }
|
|
|
+ // });
|
|
|
|
|
|
|
|
|
// strategy的初始化,里面已经有一些参数初始化了
|
|
|
@@ -252,7 +248,7 @@ impl Strategy {
|
|
|
prev_place_order_timestamp: 0,
|
|
|
min_cancel_interval_mills: 500,
|
|
|
prev_insert_time: Default::default(),
|
|
|
- debug_sender: tx,
|
|
|
+ // debug_sender: tx,
|
|
|
};
|
|
|
|
|
|
// 交易名字
|
|
|
@@ -1319,74 +1315,74 @@ impl Strategy {
|
|
|
self.prev_place_order_timestamp = Utc::now().timestamp_millis();
|
|
|
}
|
|
|
// 数据录入
|
|
|
- self.processor();
|
|
|
+ // self.processor();
|
|
|
command
|
|
|
}
|
|
|
|
|
|
|
|
|
- fn processor(&mut self) {
|
|
|
- self.check_ready();
|
|
|
- if !self.is_ready {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // let mut smm = Decimal::ZERO;
|
|
|
- // if !self.depth_vec[1].time.is_zero() {
|
|
|
- // let sma = self.depth_vec[1].asks[0].price;
|
|
|
- // let smb = self.depth_vec[1].bids[0].price;
|
|
|
- // smm = (sma + smb) / Decimal::TWO;
|
|
|
- // }
|
|
|
-
|
|
|
-
|
|
|
- // let cci_arc = self.cci_arc.clone();
|
|
|
- let now = Decimal::from_i64(Utc::now().timestamp_millis()).unwrap();
|
|
|
- let mid_price = self.mp;
|
|
|
- let ask_price = self.ref_ap;
|
|
|
- let bid_price = self.ref_bp;
|
|
|
- let last_price = Decimal::ZERO;
|
|
|
-
|
|
|
- let spread = self.ref_price;
|
|
|
- let spread_max = self.open_dist[2];
|
|
|
- let spread_min = self.open_dist[0];
|
|
|
-
|
|
|
-
|
|
|
- let optimal_ask_price = self.open_dist[2];
|
|
|
- let optimal_bid_price = self.open_dist[0];
|
|
|
-
|
|
|
- let inventory = Decimal::ZERO;
|
|
|
- let sigma_square = Decimal::ZERO;
|
|
|
- let gamma = Decimal::ZERO;
|
|
|
- let kappa = Decimal::ZERO;
|
|
|
-
|
|
|
- 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.debug_sender.unbounded_send(vec![
|
|
|
- now,
|
|
|
- mid_price,
|
|
|
- ask_price,
|
|
|
- bid_price,
|
|
|
- last_price,
|
|
|
- spread,
|
|
|
- spread_max,
|
|
|
- spread_min,
|
|
|
- optimal_ask_price,
|
|
|
- optimal_bid_price,
|
|
|
- inventory,
|
|
|
- sigma_square,
|
|
|
- gamma,
|
|
|
- kappa,
|
|
|
- flow_ratio,
|
|
|
- ref_price
|
|
|
- ]).unwrap();
|
|
|
-
|
|
|
- self.prev_insert_time = Decimal::from(Utc::now().timestamp_millis())
|
|
|
- }
|
|
|
+ // fn processor(&mut self) {
|
|
|
+ // self.check_ready();
|
|
|
+ // if !self.is_ready {
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // let mut smm = Decimal::ZERO;
|
|
|
+ // // if !self.depth_vec[1].time.is_zero() {
|
|
|
+ // // let sma = self.depth_vec[1].asks[0].price;
|
|
|
+ // // let smb = self.depth_vec[1].bids[0].price;
|
|
|
+ // // smm = (sma + smb) / Decimal::TWO;
|
|
|
+ // // }
|
|
|
+ //
|
|
|
+ //
|
|
|
+ // // let cci_arc = self.cci_arc.clone();
|
|
|
+ // let now = Decimal::from_i64(Utc::now().timestamp_millis()).unwrap();
|
|
|
+ // let mid_price = self.mp;
|
|
|
+ // let ask_price = self.ap;
|
|
|
+ // let bid_price = self.bp;
|
|
|
+ // let last_price = Decimal::ZERO;
|
|
|
+ //
|
|
|
+ // let spread = self.ref_price;
|
|
|
+ // let spread_max = self.open_dist[2];
|
|
|
+ // let spread_min = self.open_dist[0];
|
|
|
+ //
|
|
|
+ //
|
|
|
+ // let optimal_ask_price = self.open_dist[2];
|
|
|
+ // let optimal_bid_price = self.open_dist[0];
|
|
|
+ //
|
|
|
+ // let inventory = Decimal::ZERO;
|
|
|
+ // let sigma_square = Decimal::ZERO;
|
|
|
+ // let gamma = Decimal::ZERO;
|
|
|
+ // let kappa = Decimal::ZERO;
|
|
|
+ //
|
|
|
+ // 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.debug_sender.unbounded_send(vec![
|
|
|
+ // now,
|
|
|
+ // mid_price,
|
|
|
+ // ask_price,
|
|
|
+ // bid_price,
|
|
|
+ // last_price,
|
|
|
+ // spread,
|
|
|
+ // spread_max,
|
|
|
+ // spread_min,
|
|
|
+ // optimal_ask_price,
|
|
|
+ // optimal_bid_price,
|
|
|
+ // inventory,
|
|
|
+ // sigma_square,
|
|
|
+ // gamma,
|
|
|
+ // kappa,
|
|
|
+ // flow_ratio,
|
|
|
+ // ref_price
|
|
|
+ // ]).unwrap();
|
|
|
+ //
|
|
|
+ // self.prev_insert_time = Decimal::from(Utc::now().timestamp_millis())
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
|