Pārlūkot izejas kodu

fix: footprint chart was dependant on the heatmap chart

Berke 1 gadu atpakaļ
vecāks
revīzija
8e5277bd02
1 mainītis faili ar 8 papildinājumiem un 4 dzēšanām
  1. 8 4
      src/charts/footprint.rs

+ 8 - 4
src/charts/footprint.rs

@@ -28,6 +28,7 @@ pub struct Footprint {
     scaling: f32,
     
     data_points: BTreeMap<i64, (HashMap<i64, (f32, f32)>, (f32, f32, f32, f32, f32, f32))>,
+    raw_trades: Vec<Trade>,
 
     autoscale: bool,
     crosshair: bool,
@@ -45,7 +46,7 @@ impl Footprint {
     const MIN_SCALING: f32 = 0.4;
     const MAX_SCALING: f32 = 3.6;
 
-    pub fn new(timeframe: u16, tick_size: f32, klines_raw: Vec<(i64, f32, f32, f32, f32, f32, f32)>, trades_raw: Vec<Trade>) -> Footprint {
+    pub fn new(timeframe: u16, tick_size: f32, klines_raw: Vec<(i64, f32, f32, f32, f32, f32, f32)>, raw_trades: Vec<Trade>) -> Footprint {
         let mut data_points = BTreeMap::new();
         let aggregate_time = 1000 * 60 * timeframe as i64;
 
@@ -53,7 +54,7 @@ impl Footprint {
             let kline_raw = (kline.1, kline.2, kline.3, kline.4, kline.5, kline.6);
             data_points.entry(kline.0).or_insert((HashMap::new(), kline_raw));
         }
-        for trade in trades_raw {
+        for trade in &raw_trades {
             let rounded_time = (trade.time / aggregate_time) * aggregate_time;
             let price_level: i64 = (trade.price * (1.0 / tick_size)).round() as i64;
 
@@ -99,6 +100,7 @@ impl Footprint {
             timeframe,
             tick_size,
             data_points,
+            raw_trades,
         }
     }
 
@@ -123,12 +125,14 @@ impl Footprint {
                     trades.insert(price_level, (trade.qty, 0.0));
                 }
             }
+
+            self.raw_trades.push(trade);
         }
     
         self.render_start();
     }
 
-    pub fn change_tick_size(&mut self, trades_raw: Vec<Trade>, new_tick_size: f32) {
+    pub fn change_tick_size(&mut self, new_tick_size: f32) {
         let mut new_data_points = BTreeMap::new();
         let aggregate_time = 1000 * 60 * self.timeframe as i64;
 
@@ -136,7 +140,7 @@ impl Footprint {
             new_data_points.entry(*time).or_insert((HashMap::new(), *kline_values));
         }
 
-        for trade in trades_raw {
+        for trade in self.raw_trades.iter() {
             let rounded_time = (trade.time / aggregate_time) * aggregate_time;
             let price_level: i64 = (trade.price * (1.0 / new_tick_size)).round() as i64;