|
|
@@ -113,6 +113,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
let mut fair_price_simulation_ema = Decimal::ZERO;
|
|
|
|
|
|
const GAMMA: Decimal = dec!(0.5);
|
|
|
+ let gamma_fair: Decimal = Decimal::ONE / Decimal::from_i64(trades.len().to_i64().unwrap() / (end_time - start_time)).unwrap();
|
|
|
|
|
|
// ================== 计算每个点的具体波动率以及回溯幅度 ===================
|
|
|
trades.sort_by(|a, b| Decimal::from_str(a.id.as_str()).unwrap().cmp(&Decimal::from_str(b.id.as_str()).unwrap()));
|
|
|
@@ -201,7 +202,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
fair_price_simulation_ema = if fair_price_simulation_ema.is_zero() {
|
|
|
fair_price
|
|
|
} else {
|
|
|
- fair_price_simulation_ema * dec!(0.999967) + fair_price * dec!(0.000033)
|
|
|
+ fair_price_simulation_ema * (Decimal::ONE - gamma_fair) + fair_price * gamma_fair
|
|
|
};
|
|
|
|
|
|
// ==================== 波动逻辑计算 ====================
|