|
|
@@ -81,23 +81,24 @@ pub fn generate_rank_by_indicator_map(indicator_map: &MutexGuard<HashMap<String,
|
|
|
|
|
|
// msv_score计算规则
|
|
|
let mut msv_score = if msv_abs_total > Decimal::ZERO && epr_total > Decimal::ZERO {
|
|
|
- ((Decimal::ONE + epr_total / msv_abs_total) * SIXTY).ln()
|
|
|
+ (Decimal::ONE + epr_total / msv_abs_total).ln() * SIXTY
|
|
|
} else {
|
|
|
Decimal::ZERO
|
|
|
};
|
|
|
msv_score.rescale(2);
|
|
|
|
|
|
// liquidity_score
|
|
|
- let mut liquidity_score = if liquidity_avg > Decimal::ZERO {
|
|
|
- ((Decimal::ONE + liquidity_avg / Decimal::ONE_THOUSAND) * TWENTY).ln()
|
|
|
+ let liquidity_k = liquidity_avg / Decimal::ONE_THOUSAND;
|
|
|
+ let mut liquidity_score = if liquidity_k > Decimal::ONE_HUNDRED {
|
|
|
+ TWENTY + Decimal::ONE / (Decimal::ONE + Decimal::ONE_HUNDRED - liquidity_k)
|
|
|
} else {
|
|
|
- Decimal::ZERO
|
|
|
+ Decimal::TEN * liquidity_k.sqrt().unwrap()
|
|
|
};
|
|
|
liquidity_score.rescale(2);
|
|
|
|
|
|
// frequency_score计算规则
|
|
|
let mut frequency_score = if effective_count > Decimal::ZERO {
|
|
|
- ((Decimal::ONE + effective_count) * TWENTY).ln()
|
|
|
+ (Decimal::ONE + effective_count).ln() * TWENTY
|
|
|
} else {
|
|
|
Decimal::ZERO
|
|
|
};
|