(&self, date_time: NaiveDateTime)
| 709 | out.push(get_plug_in_entropy(message, 1)); |
| 710 | out.push(get_lempel_ziv_entropy(message)); |
| 711 | out.push(get_konto_entropy(message, 0)); |
| 712 | } |
| 713 | |
| 714 | fn bar_features(&self, date_time: NaiveDateTime) -> Vec<f64> { |
| 715 | let mut features = vec![ |
| 716 | date_time.and_utc().timestamp_millis() as f64, |
| 717 | get_avg_tick_size(&self.trade_size), |
| 718 | self.tick_rule.iter().sum::<f64>(), |
| 719 | vwap(&self.dollar_size, &self.trade_size), |
| 720 | get_trades_based_kyle_lambda(&self.price_diff, &self.trade_size, &self.tick_rule), |
| 721 | get_trades_based_amihud_lambda(&self.log_ret, &self.dollar_size), |
| 722 | get_trades_based_hasbrouck_lambda(&self.log_ret, &self.dollar_size, &self.tick_rule), |
| 723 | ]; |
| 724 | |
| 725 | let tick_msg = |
| 726 | encode_tick_rule_array(&self.tick_rule.iter().map(|v| *v as i32).collect::<Vec<_>>()) |
| 727 | .unwrap_or_default(); |
| 728 | self.encode_entropy_features(&tick_msg, &mut features); |
| 729 | |
| 730 | if let Some(enc) = &self.volume_encoding { |
| 731 | let msg = encode_array(&self.trade_size, enc); |
| 732 | self.encode_entropy_features(&msg, &mut features); |
| 733 | } |
| 734 | if let Some(enc) = &self.pct_encoding { |
| 735 | let msg = encode_array(&self.log_ret, enc); |
| 736 | self.encode_entropy_features(&msg, &mut features); |
| 737 | } |
| 738 | features |
| 739 | } |
| 740 | |
| 741 | pub fn get_features_from_csv(&mut self, trades_path: &str) -> Result<Vec<Vec<f64>>, String> { |
| 742 | let mut rdr = csv::ReaderBuilder::new() |
| 743 | .has_headers(true) |
| 744 | .from_path(trades_path) |
| 745 | .map_err(|e| e.to_string())?; |
| 746 | let mut bars: Vec<Vec<f64>> = Vec::new(); |
no test coverage detected