|
|
@@ -24,6 +24,7 @@ pub struct Rank {
|
|
|
liquidity_avg: Decimal,
|
|
|
is_binance: bool,
|
|
|
}
|
|
|
+pub
|
|
|
|
|
|
const ONE_QUARTER: Decimal = dec!(0.25);
|
|
|
const ONE_PERCENT: Decimal = dec!(0.01);
|
|
|
@@ -46,15 +47,23 @@ pub fn generate_rank_by_indicator_map(indicator_map: &MutexGuard<HashMap<String,
|
|
|
let mut effective_epr_count = Decimal::ZERO;
|
|
|
let mut epr_total = Decimal::ZERO;
|
|
|
let mut epr_max = Decimal::ZERO;
|
|
|
+
|
|
|
+ let start_time = indicators.msv[0][0];
|
|
|
+ let end_time = indicators.msv[indicators.msv.len() - 1][0];
|
|
|
+ let timing_difference = end_time - start_time;
|
|
|
+ // 0.175 0.225 0.275 0.325
|
|
|
+
|
|
|
for (index, value) in indicators.msv.iter().enumerate() {
|
|
|
let msv_abs_value = value[1].abs();
|
|
|
|
|
|
if msv_abs_value <= Decimal::ZERO {
|
|
|
continue;
|
|
|
}
|
|
|
+ let a_scale = ((value[0] - start_time) / timing_difference).round_dp(2) + dec!(0.25);
|
|
|
|
|
|
+ let scale = if a_scale > Decimal::ONE { Decimal::ONE } else { a_scale };
|
|
|
msv_count += Decimal::ONE;
|
|
|
- msv_abs_total += msv_abs_value;
|
|
|
+ msv_abs_total += msv_abs_value * scale;
|
|
|
|
|
|
if msv_abs_value > msv_abs_max {
|
|
|
msv_abs_max = msv_abs_value
|
|
|
@@ -63,7 +72,7 @@ pub fn generate_rank_by_indicator_map(indicator_map: &MutexGuard<HashMap<String,
|
|
|
let epr = &indicators.eprs[index];
|
|
|
if epr[1] > msv_abs_value * ONE_QUARTER || epr[1].abs() > ONE_PERCENT {
|
|
|
effective_epr_count += Decimal::ONE;
|
|
|
- epr_total += epr[1];
|
|
|
+ epr_total += epr[1] * scale;
|
|
|
|
|
|
if value[1] > epr_max {
|
|
|
epr_max = value[1]
|