()
| 14 | } |
| 15 | |
| 16 | fn build_ch10_setup() -> Ch10Setup { |
| 17 | let prob: Vec<f64> = vec![0.711, 0.898, 0.992, 0.595, 0.544, 0.775]; |
| 18 | let side: Vec<f64> = vec![1.0, 1.0, -1.0, 1.0, -1.0, 1.0]; |
| 19 | let base = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap().and_hms_opt(0, 0, 0).unwrap(); |
| 20 | let dates: Vec<NaiveDateTime> = (0..6).map(|i| base + Duration::days(i)).collect(); |
| 21 | let shift_list: Vec<f64> = vec![0.5, 1.0, 2.0, 1.5, 0.8, 0.2]; |
| 22 | let shift_dt: Vec<Duration> = |
| 23 | shift_list.iter().map(|d| Duration::seconds((d * 86400.0).round() as i64)).collect(); |
| 24 | let t1: Vec<NaiveDateTime> = dates.iter().zip(shift_dt.iter()).map(|(d, s)| *d + *s).collect(); |
| 25 | |
| 26 | let norm = Normal::new(0.0, 1.0).unwrap(); |
| 27 | let bet_size: Vec<f64> = prob |
| 28 | .iter() |
| 29 | .zip(side.iter()) |
| 30 | .map(|(p, s)| { |
| 31 | let z = (p - 0.5) / (p * (1.0 - p)).sqrt(); |
| 32 | let size = 2.0 * norm.cdf(z) - 1.0; |
| 33 | size * s |
| 34 | }) |
| 35 | .collect(); |
| 36 | |
| 37 | let bet_size_d: Vec<f64> = bet_size |
| 38 | .iter() |
| 39 | .map(|m| { |
| 40 | let mut v = (m / 0.1).round() * 0.1; |
| 41 | if v > 1.0 { |
| 42 | v = 1.0; |
| 43 | } |
| 44 | if v < -1.0 { |
| 45 | v = -1.0; |
| 46 | } |
| 47 | v |
| 48 | }) |
| 49 | .collect(); |
| 50 | |
| 51 | let signal: Vec<(NaiveDateTime, f64)> = |
| 52 | dates.iter().copied().zip(bet_size.iter().copied()).collect(); |
| 53 | let mut t_pnts: Vec<NaiveDateTime> = t1.iter().copied().collect(); |
| 54 | t_pnts.extend(dates.iter().copied()); |
| 55 | t_pnts.sort(); |
| 56 | t_pnts.dedup(); |
| 57 | |
| 58 | let mut avg_active = Vec::new(); |
| 59 | for loc in t_pnts.iter() { |
| 60 | let mut sum = 0.0; |
| 61 | let mut count = 0.0; |
| 62 | for ((start, signal_val), end) in signal.iter().zip(t1.iter()) { |
| 63 | if *start <= *loc && (*loc < *end) { |
| 64 | sum += *signal_val; |
| 65 | count += 1.0; |
| 66 | } |
| 67 | } |
| 68 | if count > 0.0 { |
| 69 | avg_active.push((*loc, sum / count)); |
| 70 | } else { |
| 71 | avg_active.push((*loc, 0.0)); |
| 72 | } |
| 73 | } |
no outgoing calls
no test coverage detected