()
| 199 | fn test_triple_barrier_labeling() { |
| 200 | let close = load_close(); |
| 201 | let prices: Vec<f64> = close.iter().map(|(_, p)| *p).collect(); |
| 202 | let timestamps: Vec<NaiveDateTime> = close.iter().map(|(ts, _)| *ts).collect(); |
| 203 | let cusum_events = |
| 204 | cusum_filter_timestamps(&prices, ×tamps, Threshold::Scalar(0.02)).unwrap(); |
| 205 | let daily_vol = get_daily_vol(&close, 100); |
| 206 | let vertical_barriers = add_vertical_barrier(&cusum_events, &close, 1, 0, 0, 0); |
| 207 | |
| 208 | // standard labeling |
| 209 | let events = get_events( |
| 210 | &close, |
| 211 | &cusum_events, |
| 212 | (1.0, 1.0), |
| 213 | &daily_vol, |
| 214 | 0.005, |
| 215 | 3, |
| 216 | Some(&vertical_barriers), |
| 217 | None, |
| 218 | ); |
| 219 | let labels = get_bins(&events, &close); |
| 220 | assert_eq!(labels.len(), 8); |
| 221 | assert!(labels.iter().all(|(_, _, _, bin, _)| matches!(bin, -1..=1))); |
| 222 | let reference = load_reference(); |
| 223 | assert_labels_match(&labels, &reference["events"]); |
| 224 | |
| 225 | // meta labeling with side=1 |
| 226 | let side: Vec<(NaiveDateTime, f64)> = close.iter().map(|(ts, _)| (*ts, 1.0)).collect(); |
| 227 | let meta_events = get_events( |
| 228 | &close, |
| 229 | &cusum_events, |
| 230 | (1.0, 1.0), |
| 231 | &daily_vol, |
| 232 | 0.005, |
| 233 | 3, |
| 234 | Some(&vertical_barriers), |
| 235 | Some(&side), |
| 236 | ); |
| 237 | let meta_labels = get_bins(&meta_events, &close); |
| 238 | assert_eq!(meta_labels.len(), 8); |
| 239 | assert_labels_match(&meta_labels, &reference["meta_events"]); |
| 240 | assert!(meta_labels.iter().all(|(_, _, _, bin, _)| matches!(bin, 0 | 1))); |
| 241 | assert!(meta_labels.iter().any(|(_, _, _, bin, _)| *bin == 1)); |
| 242 | } |
| 243 | |
| 244 | #[test] |
| 245 | fn test_pt_sl_levels() { |
| 246 | let close = load_close(); |
| 247 | let prices: Vec<f64> = close.iter().map(|(_, p)| *p).collect(); |
| 248 | let timestamps: Vec<NaiveDateTime> = close.iter().map(|(ts, _)| *ts).collect(); |
| 249 | let cusum_events = |
| 250 | cusum_filter_timestamps(&prices, ×tamps, Threshold::Scalar(0.02)).unwrap(); |
nothing calls this directly
no test coverage detected