Эх сурвалжийг харах

可以展示向下的波动。

skyffire 1 жил өмнө
parent
commit
859499f010
1 өөрчлөгдсөн 30 нэмэгдсэн , 19 устгасан
  1. 30 19
      src/export_analyze.rs

+ 30 - 19
src/export_analyze.rs

@@ -76,7 +76,7 @@ pub fn calc_gate_ticker_amplitude(tickers: Vec<Ticker>, limit_range: Decimal) ->
     info!("精确幅度计算执行中……");
     for (index, ticker) in tickers.iter().enumerate() {
         // 该元素向前遍历range毫秒
-        let mut prev_index = if index == 0 {
+        let mut range_index = if index == 0 {
             0
         } else {
             index
@@ -88,26 +88,26 @@ pub fn calc_gate_ticker_amplitude(tickers: Vec<Ticker>, limit_range: Decimal) ->
 
         loop {
             // 第0个就不搞
-            if prev_index == 0 {
+            if range_index == 0 {
                 break;
             }
 
-            let prev_ticker = tickers.get(prev_index).unwrap();
-            let range_time = ticker.create_time - prev_ticker.create_time;
+            let range_ticker = tickers.get(range_index).unwrap();
+            let range_time = ticker.create_time - range_ticker.create_time;
             // 判断该ticker是否是range ms以外
             if range_time > limit_range {
                 break;
             }
 
             // 判断最大值、最小值
-            if prev_ticker.price > max_price {
-                max_price = prev_ticker.price;
+            if range_ticker.price > max_price {
+                max_price = range_ticker.price;
             }
-            if prev_ticker.price < min_price {
-                min_price = prev_ticker.price;
+            if range_ticker.price < min_price {
+                min_price = range_ticker.price;
             }
 
-            prev_index -= 1;
+            range_index -= 1;
         }
 
         // 逻辑计算层
@@ -117,24 +117,35 @@ pub fn calc_gate_ticker_amplitude(tickers: Vec<Ticker>, limit_range: Decimal) ->
         // 不是初始值,以及不是0波动
         if index != 0 && (max_price != last_price || min_price != last_price) {
             let mut up_rate = (last_price - min_price) / min_price;
-            let mut dn_rate = (max_price - last_price) / max_price;
+            let mut dn_rate = (last_price - max_price) / max_price;
 
             up_rate.rescale(4);
             dn_rate.rescale(4);
 
             // 去除小数位之后,可以忽略一些太小的波动,减少图表生成压力
-            if up_rate > Decimal::ZERO || dn_rate > Decimal::ZERO {
-                // info!("up={}, dn={}, ra={}", up_rate, dn_rate, max(up_rate, dn_rate));
-                let insert_value = if amplitude_map.contains_key(&ticker.create_time) {
-                    let origin_rate = amplitude_map.get(&ticker.create_time).unwrap();
+            if up_rate.eq(&Decimal::ZERO) || dn_rate.eq(&Decimal::ZERO) {
+                continue
+            }
+
+            // info!("up={}, dn={}, ra={}", up_rate, dn_rate, max(up_rate, dn_rate));
+            // 如果已经生成了一个波动,则也要和已生成的波动进行比较
+            let insert_value = if amplitude_map.contains_key(&ticker.create_time) {
+                let origin_rate = amplitude_map.get(&ticker.create_time).unwrap();
 
-                    max(*origin_rate, max(up_rate, dn_rate))
+                if up_rate > dn_rate.abs() {
+                    max(*origin_rate, up_rate)
                 } else {
-                    max(up_rate, dn_rate)
-                };
+                    max(*origin_rate, dn_rate)
+                }
+            } else {
+                if up_rate > dn_rate.abs() {
+                    up_rate
+                } else {
+                    dn_rate
+                }
+            };
 
-                amplitude_map.insert(ticker.create_time, insert_value);
-            }
+            amplitude_map.insert(ticker.create_time, insert_value);
         }
     }