|
|
@@ -301,7 +301,7 @@ impl Predictor {
|
|
|
self.fair_price = fair_price_part0 + fair_price_part1;
|
|
|
self.fair_price_time_vec.push_back(self.fair_price);
|
|
|
|
|
|
- // 重置焦点
|
|
|
+ // 重置焦点,条件1
|
|
|
if !self.fair_rate_focus.is_zero() && self.mid_price_time_vec.deque.len() >= 2 && self.fair_price_time_vec.deque.len() >= 2 {
|
|
|
let mid_price_prev = self.mid_price_time_vec.deque.get(self.mid_price_time_vec.deque.len() - 2).unwrap();
|
|
|
let fair_price_prev = self.fair_price_time_vec.deque.get(self.fair_price_time_vec.deque.len() - 2).unwrap();
|
|
|
@@ -316,6 +316,10 @@ impl Predictor {
|
|
|
self.fair_rate_focus = Decimal::ZERO;
|
|
|
}
|
|
|
}
|
|
|
+ // // 重置焦点,条件2
|
|
|
+ // if !self.fair_rate_focus.is_zero() && !self.inventory.is_zero() {
|
|
|
+ // self.fair_rate_focus = Decimal::ZERO;
|
|
|
+ // }
|
|
|
|
|
|
// 更新程序关注的变化幅度焦点
|
|
|
if self.fair_rate_focus.is_zero() {
|
|
|
@@ -404,27 +408,31 @@ impl Predictor {
|
|
|
self.ask_delta = dec!(-2);
|
|
|
|
|
|
if is_close_long {
|
|
|
- if self.mid_price > self.pos_avg_price {
|
|
|
- // let profit_rate = (self.mid_price - self.pos_avg_price) / self.pos_avg_price;
|
|
|
- // let fill_rate = profit_rate / (self.params.open * dec!(50));
|
|
|
- // let close_rate = (Decimal::ONE - fill_rate) * self.params.open + self.params.close;
|
|
|
- //
|
|
|
- // self.ask_delta = self.mid_price * close_rate * self.t_diff;
|
|
|
- self.ask_delta = self.mid_price * self.params.close;
|
|
|
- } else if self.mid_price > self.fair_price {
|
|
|
- self.ask_delta = self.mid_price * self.params.close;
|
|
|
- }
|
|
|
+ // if self.mid_price > self.pos_avg_price {
|
|
|
+ // // let profit_rate = (self.mid_price - self.pos_avg_price) / self.pos_avg_price;
|
|
|
+ // // let fill_rate = profit_rate / (self.params.open * dec!(50));
|
|
|
+ // // let close_rate = (Decimal::ONE - fill_rate) * self.params.open + self.params.close;
|
|
|
+ // //
|
|
|
+ // // self.ask_delta = self.mid_price * close_rate * self.t_diff;
|
|
|
+ // self.ask_delta = self.mid_price * self.params.close;
|
|
|
+ // } else if self.mid_price > self.fair_price {
|
|
|
+ // self.ask_delta = self.mid_price * self.params.close;
|
|
|
+ // }
|
|
|
+
|
|
|
+ self.ask_delta = self.mid_price * self.params.close;
|
|
|
} else if is_close_short {
|
|
|
- if self.mid_price < self.pos_avg_price {
|
|
|
- // let profit_rate = (self.pos_avg_price - self.mid_price) / self.pos_avg_price;
|
|
|
- // let fill_rate = profit_rate / (self.params.open * dec!(50));
|
|
|
- // let close_rate = (Decimal::ONE - fill_rate) * self.params.open + self.params.close;
|
|
|
- //
|
|
|
- // self.bid_delta = self.mid_price * close_rate * self.t_diff;
|
|
|
- self.bid_delta = self.mid_price * self.params.close;
|
|
|
- } else if self.mid_price < self.fair_price {
|
|
|
- self.bid_delta = self.mid_price * self.params.close;
|
|
|
- }
|
|
|
+ // if self.mid_price < self.pos_avg_price {
|
|
|
+ // // let profit_rate = (self.pos_avg_price - self.mid_price) / self.pos_avg_price;
|
|
|
+ // // let fill_rate = profit_rate / (self.params.open * dec!(50));
|
|
|
+ // // let close_rate = (Decimal::ONE - fill_rate) * self.params.open + self.params.close;
|
|
|
+ // //
|
|
|
+ // // self.bid_delta = self.mid_price * close_rate * self.t_diff;
|
|
|
+ // self.bid_delta = self.mid_price * self.params.close;
|
|
|
+ // } else if self.mid_price < self.fair_price {
|
|
|
+ // self.bid_delta = self.mid_price * self.params.close;
|
|
|
+ // }
|
|
|
+
|
|
|
+ self.bid_delta = self.mid_price * self.params.close;
|
|
|
} else if is_open_long {
|
|
|
let is_open_long_market = self.spread_sma_1000 - self.spread_sma > self.params.open_market;
|
|
|
self.bid_delta = if is_open_long_market {
|