|
@@ -41,6 +41,7 @@ pub fn generate_rank_by_indicator_map(indicator_map: &MutexGuard<HashMap<String,
|
|
|
let mut msv_abs_total = Decimal::ZERO;
|
|
let mut msv_abs_total = Decimal::ZERO;
|
|
|
let mut msv_abs_max = Decimal::ZERO;
|
|
let mut msv_abs_max = Decimal::ZERO;
|
|
|
let mut effective_count = Decimal::ZERO;
|
|
let mut effective_count = Decimal::ZERO;
|
|
|
|
|
+ let mut effective_msv_vec: Vec<Decimal> = vec![];
|
|
|
for value in indicators.msv.iter() {
|
|
for value in indicators.msv.iter() {
|
|
|
let msv_abs_value = value[1].abs();
|
|
let msv_abs_value = value[1].abs();
|
|
|
|
|
|
|
@@ -50,18 +51,32 @@ pub fn generate_rank_by_indicator_map(indicator_map: &MutexGuard<HashMap<String,
|
|
|
|
|
|
|
|
effective_count += Decimal::ONE;
|
|
effective_count += Decimal::ONE;
|
|
|
msv_abs_total += msv_abs_value;
|
|
msv_abs_total += msv_abs_value;
|
|
|
|
|
+ effective_msv_vec.push(msv_abs_value);
|
|
|
|
|
|
|
|
if msv_abs_value > msv_abs_max {
|
|
if msv_abs_value > msv_abs_max {
|
|
|
msv_abs_max = msv_abs_value
|
|
msv_abs_max = msv_abs_value
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ // 计算波动率平均值
|
|
|
let mut msv_abs_avg = if effective_count == Decimal::ZERO {
|
|
let mut msv_abs_avg = if effective_count == Decimal::ZERO {
|
|
|
Decimal::ZERO
|
|
Decimal::ZERO
|
|
|
} else {
|
|
} else {
|
|
|
msv_abs_total / effective_count
|
|
msv_abs_total / effective_count
|
|
|
};
|
|
};
|
|
|
msv_abs_avg.rescale(6);
|
|
msv_abs_avg.rescale(6);
|
|
|
- let mut coverted_open_base = (msv_abs_max + msv_abs_avg) / TWO_HUNDRED;
|
|
|
|
|
|
|
+ // 计算方差
|
|
|
|
|
+ let msv_variance = if effective_count == Decimal::ZERO {
|
|
|
|
|
+ Decimal::ZERO
|
|
|
|
|
+ } else {
|
|
|
|
|
+ let mut total = Decimal::ZERO;
|
|
|
|
|
+
|
|
|
|
|
+ for effective_msv in effective_msv_vec {
|
|
|
|
|
+ total += (effective_msv - msv_abs_avg).powd(Decimal::TWO)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ total / effective_count
|
|
|
|
|
+ };
|
|
|
|
|
+ let mut coverted_open_base = msv_abs_max - msv_variance;
|
|
|
coverted_open_base.rescale(8);
|
|
coverted_open_base.rescale(8);
|
|
|
|
|
|
|
|
// ============== epr相关数据的计算 =================
|
|
// ============== epr相关数据的计算 =================
|