Browse Source

优化波动分数的问题。

skyffire 1 năm trước cách đây
mục cha
commit
07976f4bda
2 tập tin đã thay đổi với 13 bổ sung5 xóa
  1. 8 4
      src/msv.rs
  2. 5 1
      src/rank.rs

+ 8 - 4
src/msv.rs

@@ -70,8 +70,8 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
         }
         }
 
 
         // 获取到range毫秒以后的预定价格,计算回去的幅度
         // 获取到range毫秒以后的预定价格,计算回去的幅度
-        let mut future_ref_price_sum = trade.price;
-        let mut future_ref_count = Decimal::ONE;
+        let mut future_ref_price_sum = Decimal::ZERO;
+        let mut future_ref_count = Decimal::ZERO;
         let mut future_range_index = index + 1;
         let mut future_range_index = index + 1;
         loop {
         loop {
             // 下标合法性判断
             // 下标合法性判断
@@ -83,7 +83,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
             let range_time = flag_trade.time - trade.time;
             let range_time = flag_trade.time - trade.time;
 
 
             // 判断该ticker是否是range ms以外
             // 判断该ticker是否是range ms以外
-            if range_time > mills_back && future_ref_count > Decimal::TEN {
+            if range_time > mills_back && future_ref_count > Decimal::ZERO {
                 break;
                 break;
             }
             }
 
 
@@ -91,7 +91,11 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
             future_ref_price_sum += flag_trade.price;
             future_ref_price_sum += flag_trade.price;
             future_ref_count += Decimal::ONE;
             future_ref_count += Decimal::ONE;
         }
         }
-        let future_ref_price = future_ref_price_sum / future_ref_count;
+        let future_ref_price = if future_ref_count < Decimal::ONE {
+            trade.price
+        } else {
+            future_ref_price_sum / future_ref_count
+        };
 
 
         // 计算过去至多100条数据的sigma值 sigma^2 = (1 / (tn-t0))*sum((S(tk) - S(tk-1)) ^ 2)
         // 计算过去至多100条数据的sigma值 sigma^2 = (1 / (tn-t0))*sum((S(tk) - S(tk-1)) ^ 2)
         let mut sigma_index = index - 1;
         let mut sigma_index = index - 1;

+ 5 - 1
src/rank.rs

@@ -90,7 +90,11 @@ pub fn generate_rank_by_indicator_map(indicator_map: &MutexGuard<HashMap<String,
         // ======================== 最终计算 =========================
         // ======================== 最终计算 =========================
         // msv_score计算规则
         // msv_score计算规则
         let mut msv_score = if msv_abs_total > Decimal::ZERO && epr_total > Decimal::ZERO {
         let mut msv_score = if msv_abs_total > Decimal::ZERO && epr_total > Decimal::ZERO {
-            ((epr_max * epr_total / msv_abs_total) * SIXTY).powd(Decimal::TWO)
+            if epr_total > msv_abs_total {
+                (epr_max * SIXTY).powd(Decimal::TWO)
+            } else {
+                ((epr_max * epr_total / msv_abs_total) * SIXTY).powd(Decimal::TWO)
+            }
         } else {
         } else {
             Decimal::ZERO
             Decimal::ZERO
         };
         };