|
|
@@ -36,6 +36,7 @@ pub struct AvellanedaStoikov {
|
|
|
pub flow_in_value: Decimal,
|
|
|
pub flow_out_value: Decimal,
|
|
|
pub flow_ratio: Decimal, // 资金流比例
|
|
|
+ pub flow_ratio_diff: Decimal, // 資金流比例的差值
|
|
|
|
|
|
pub ask_delta: Decimal, // δa
|
|
|
pub bid_delta: Decimal, // δb
|
|
|
@@ -85,7 +86,6 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
ratio_edge: Default::default(),
|
|
|
kappa: Default::default(),
|
|
|
- flow_in_value: Default::default(),
|
|
|
ref_price: Default::default(),
|
|
|
|
|
|
cci_arc,
|
|
|
@@ -94,7 +94,9 @@ impl AvellanedaStoikov {
|
|
|
prev_trade_time: Utc::now().timestamp_micros(),
|
|
|
t_diff: Default::default(),
|
|
|
flow_ratio: Decimal::ONE,
|
|
|
+ flow_ratio_diff: Default::default(),
|
|
|
flow_out_value: Default::default(),
|
|
|
+ flow_in_value: Default::default(),
|
|
|
level: Default::default(),
|
|
|
};
|
|
|
|
|
|
@@ -230,7 +232,7 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
pub fn update_delta(&mut self) {
|
|
|
if self.gamma != Decimal::ZERO {
|
|
|
- let pos_edge = self.gamma * self.sigma_square * self.inventory.abs().powd(Decimal::TWO) * self.t_diff / Decimal::TWO;
|
|
|
+ let pos_edge = self.gamma * self.sigma_square * self.inventory.abs().powd(dec!(2.5)) * self.t_diff / Decimal::TWO;
|
|
|
|
|
|
self.base_delta = self.gamma * self.sigma_square * self.t_diff / Decimal::TWO + (Decimal::ONE / self.gamma) * (Decimal::ONE + self.gamma / self.kappa).ln();
|
|
|
self.ratio_edge = self.flow_ratio * self.sigma_square;
|
|
|
@@ -274,7 +276,18 @@ impl AvellanedaStoikov {
|
|
|
|
|
|
pub fn update_flow_ratio(&mut self) {
|
|
|
if self.trade_vec.len() > 200 {
|
|
|
- self.flow_ratio = (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value);
|
|
|
+ // let prev_flow_ratio = self.flow_ratio;
|
|
|
+ self.flow_ratio = dec!(3.7) * (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value);
|
|
|
+
|
|
|
+ // self.flow_ratio_diff = if !prev_flow_ratio.is_zero() {
|
|
|
+ // if self.flow_ratio != prev_flow_ratio {
|
|
|
+ // self.flow_ratio_diff * dec!(0.7) + (self.flow_ratio - prev_flow_ratio) * dec!(0.3)
|
|
|
+ // } else {
|
|
|
+ // self.flow_ratio_diff
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // Decimal::ZERO
|
|
|
+ // }
|
|
|
} else {
|
|
|
self.flow_ratio = Decimal::ZERO;
|
|
|
}
|