|
@@ -354,50 +354,33 @@ impl Predictor {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- let mut rate = Self::get_real_rate(&self.fair_price_time_vec);
|
|
|
|
|
|
|
+ // let mut rate = Self::get_real_rate(&self.fair_price_time_vec);
|
|
|
let mut long_rate = Self::get_real_rate(&self.fair_price_long_time_vec);
|
|
let mut long_rate = Self::get_real_rate(&self.fair_price_long_time_vec);
|
|
|
- rate.rescale(8);
|
|
|
|
|
|
|
+ // rate.rescale(8);
|
|
|
long_rate.rescale(8);
|
|
long_rate.rescale(8);
|
|
|
|
|
|
|
|
// 重置开仓焦点,条件1
|
|
// 重置开仓焦点,条件1
|
|
|
if !self.fair_rate_focus_open.is_zero() {
|
|
if !self.fair_rate_focus_open.is_zero() {
|
|
|
- if self.fair_rate_focus_open > Decimal::ZERO && self.spread_ema_1000 < Decimal::ZERO {
|
|
|
|
|
|
|
+ if self.fair_rate_focus_open > Decimal::ZERO && self.spread < Decimal::ZERO {
|
|
|
self.fair_rate_focus_open = Decimal::ZERO;
|
|
self.fair_rate_focus_open = Decimal::ZERO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if self.fair_rate_focus_open < Decimal::ZERO && self.spread_ema_1000 < Decimal::ZERO {
|
|
|
|
|
|
|
+ if self.fair_rate_focus_open < Decimal::ZERO && self.spread > Decimal::ZERO {
|
|
|
self.fair_rate_focus_open = Decimal::ZERO;
|
|
self.fair_rate_focus_open = Decimal::ZERO;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- // 重置开仓焦点,条件2
|
|
|
|
|
- if !self.fair_rate_focus_open.is_zero() && !self.inventory.is_zero() {
|
|
|
|
|
- self.fair_rate_focus_open = Decimal::ZERO;
|
|
|
|
|
- }
|
|
|
|
|
- // 重置开仓焦点,条件3
|
|
|
|
|
- if !self.fair_price_focus_open.is_zero() {
|
|
|
|
|
- let focus_rate = (self.fair_price - self.fair_price_focus_open) / self.fair_price_focus_open;
|
|
|
|
|
-
|
|
|
|
|
- if self.fair_rate_focus_open > Decimal::ZERO && focus_rate < Decimal::NEGATIVE_ONE * self.params.open_activate / Decimal::TWO {
|
|
|
|
|
- self.fair_rate_focus_open = Decimal::ZERO;
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- if self.fair_rate_focus_open < Decimal::ZERO && focus_rate > self.params.open_activate / Decimal::TWO {
|
|
|
|
|
- self.fair_rate_focus_open = Decimal::ZERO;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
// 更新程序关注的开仓焦点
|
|
// 更新程序关注的开仓焦点
|
|
|
if self.fair_rate_focus_open.is_zero() && self.inventory.is_zero() {
|
|
if self.fair_rate_focus_open.is_zero() && self.inventory.is_zero() {
|
|
|
// 只有有强度的rate才有资格被称为针
|
|
// 只有有强度的rate才有资格被称为针
|
|
|
- if rate.abs() > self.params.open_activate {
|
|
|
|
|
- // 向上涨,并且fair下穿mid,视为观测阶段开始
|
|
|
|
|
- if rate > Decimal::ZERO && self.spread_ema_1000 < Decimal::ZERO {
|
|
|
|
|
- self.fair_rate_focus_open = rate;
|
|
|
|
|
|
|
+ if self.spread.abs() > self.params.open_activate {
|
|
|
|
|
+ if self.spread > Decimal::ZERO {
|
|
|
|
|
+ self.fair_rate_focus_open = self.spread;
|
|
|
self.fair_price_focus_open = self.fair_price;
|
|
self.fair_price_focus_open = self.fair_price;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 向下跌,并且fair上穿mid,视为观测阶段开始
|
|
|
|
|
- if rate < Decimal::ZERO && self.spread_ema_1000 > Decimal::ZERO {
|
|
|
|
|
- self.fair_rate_focus_open = rate;
|
|
|
|
|
|
|
+ if self.spread < Decimal::ZERO {
|
|
|
|
|
+ self.fair_rate_focus_open = self.spread;
|
|
|
self.fair_price_focus_open = self.fair_price;
|
|
self.fair_price_focus_open = self.fair_price;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -407,25 +390,23 @@ impl Predictor {
|
|
|
// close_rate:
|
|
// close_rate:
|
|
|
// 大于0:当前价格在均线之上
|
|
// 大于0:当前价格在均线之上
|
|
|
// 小于0:当前价格在均线之下
|
|
// 小于0:当前价格在均线之下
|
|
|
- let close_rate = rate.clone();
|
|
|
|
|
|
|
+ let close_rate = self.spread.clone();
|
|
|
// 重置平仓焦点,条件1
|
|
// 重置平仓焦点,条件1
|
|
|
if !self.fair_rate_focus_close.is_zero() && self.inventory.is_zero() {
|
|
if !self.fair_rate_focus_close.is_zero() && self.inventory.is_zero() {
|
|
|
self.fair_rate_focus_close = Decimal::ZERO;
|
|
self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
}
|
|
}
|
|
|
- // 重置平仓焦点,条件2
|
|
|
|
|
- if !self.fair_rate_focus_close.is_zero() {
|
|
|
|
|
- let focus_rate = (self.fair_price - self.fair_price_focus_close) / self.fair_price_focus_close;
|
|
|
|
|
-
|
|
|
|
|
- if self.fair_rate_focus_close > Decimal::ZERO && focus_rate < Decimal::NEGATIVE_ONE * self.params.close_activate / Decimal::TWO {
|
|
|
|
|
- self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if self.fair_rate_focus_close < Decimal::ZERO && focus_rate > self.params.close_activate / Decimal::TWO {
|
|
|
|
|
- self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // // 重置平仓焦点,条件2
|
|
|
|
|
+ // if !self.fair_rate_focus_close.is_zero() {
|
|
|
|
|
+ // if self.fair_rate_focus_close > Decimal::ZERO && close_rate < Decimal::ZERO {
|
|
|
|
|
+ // self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
|
|
+ // }
|
|
|
|
|
+ //
|
|
|
|
|
+ // if self.fair_rate_focus_close < Decimal::ZERO && close_rate > Decimal::ZERO {
|
|
|
|
|
+ // self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
// 更新程序关注的平仓焦点
|
|
// 更新程序关注的平仓焦点
|
|
|
- let close_activate = self.params.open_activate / Decimal::TWO;
|
|
|
|
|
|
|
+ let close_activate = Decimal::ZERO;
|
|
|
if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() && close_rate.abs() > close_activate {
|
|
if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() && close_rate.abs() > close_activate {
|
|
|
// 多单平仓逻辑
|
|
// 多单平仓逻辑
|
|
|
if self.inventory > Decimal::ZERO && close_rate > Decimal::ZERO {
|
|
if self.inventory > Decimal::ZERO && close_rate > Decimal::ZERO {
|
|
@@ -508,10 +489,10 @@ impl Predictor {
|
|
|
// let is_open_long = self.spread_sma_1000 - self.spread_sma > self.params.open && self.fair_price > self.mid_price;
|
|
// let is_open_long = self.spread_sma_1000 - self.spread_sma > self.params.open && self.fair_price > self.mid_price;
|
|
|
// let is_open_short = self.spread_sma_1000 - self.spread_sma < self.params.open * Decimal::NEGATIVE_ONE && self.fair_price < self.mid_price;
|
|
// let is_open_short = self.spread_sma_1000 - self.spread_sma < self.params.open * Decimal::NEGATIVE_ONE && self.fair_price < self.mid_price;
|
|
|
// 可能是接针
|
|
// 可能是接针
|
|
|
- let is_open_long = self.fair_rate_focus_open < Decimal::ZERO && self.fair_price > self.mid_price;
|
|
|
|
|
- let is_open_short = self.fair_rate_focus_open > Decimal::ZERO && self.fair_price < self.mid_price;
|
|
|
|
|
- let is_close_long = self.inventory > Decimal::ZERO && self.fair_rate_focus_close > Decimal::ZERO;
|
|
|
|
|
- let is_close_short = self.inventory < Decimal::ZERO && self.fair_rate_focus_close < Decimal::ZERO;
|
|
|
|
|
|
|
+ let is_open_long = self.fair_rate_focus_open > Decimal::ZERO;
|
|
|
|
|
+ let is_open_short = self.fair_rate_focus_open < Decimal::ZERO;
|
|
|
|
|
+ let is_close_long = self.inventory > Decimal::ZERO && self.fair_rate_focus_close < Decimal::ZERO;
|
|
|
|
|
+ let is_close_short = self.inventory < Decimal::ZERO && self.fair_rate_focus_close > Decimal::ZERO;
|
|
|
|
|
|
|
|
self.bid_delta = dec!(-2);
|
|
self.bid_delta = dec!(-2);
|
|
|
self.ask_delta = dec!(-2);
|
|
self.ask_delta = dec!(-2);
|
|
@@ -658,7 +639,7 @@ impl Predictor {
|
|
|
|
|
|
|
|
let gamma = self.fair_rate_focus_open;
|
|
let gamma = self.fair_rate_focus_open;
|
|
|
|
|
|
|
|
- let kappa = self.error_rate;
|
|
|
|
|
|
|
+ let kappa = self.fair_rate_focus_close;
|
|
|
|
|
|
|
|
let flow_ratio = Decimal::ZERO;
|
|
let flow_ratio = Decimal::ZERO;
|
|
|
|
|
|