|
@@ -1,4 +1,4 @@
|
|
|
-use std::cmp::{max, min};
|
|
|
|
|
|
|
+use std::cmp::{min};
|
|
|
use std::collections::HashMap;
|
|
use std::collections::HashMap;
|
|
|
use rust_decimal::{Decimal, MathematicalOps};
|
|
use rust_decimal::{Decimal, MathematicalOps};
|
|
|
use rust_decimal_macros::dec;
|
|
use rust_decimal_macros::dec;
|
|
@@ -41,7 +41,6 @@ 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();
|
|
|
|
|
|
|
@@ -51,7 +50,6 @@ 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
|
|
@@ -64,22 +62,8 @@ pub fn generate_rank_by_indicator_map(indicator_map: &MutexGuard<HashMap<String,
|
|
|
msv_abs_total / effective_count
|
|
msv_abs_total / effective_count
|
|
|
};
|
|
};
|
|
|
msv_abs_avg.rescale(6);
|
|
msv_abs_avg.rescale(6);
|
|
|
- // 计算方差
|
|
|
|
|
- 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 standard_deviation = msv_variance.sqrt().unwrap();
|
|
|
|
|
- let mut coverted_open_base = (msv_abs_max + standard_deviation) / TWO_HUNDRED;
|
|
|
|
|
- coverted_open_base = max(coverted_open_base, Decimal::ZERO);
|
|
|
|
|
|
|
+ // 开仓基准值
|
|
|
|
|
+ let mut coverted_open_base = (msv_abs_max + msv_abs_avg) / TWO_HUNDRED;
|
|
|
coverted_open_base.rescale(8);
|
|
coverted_open_base.rescale(8);
|
|
|
|
|
|
|
|
// ============== epr相关数据的计算 =================
|
|
// ============== epr相关数据的计算 =================
|