MCPcopy Create free account
hub / github.com/Open-Quant/openquant / build_ch10_setup

Function build_ch10_setup

crates/openquant/tests/ch10_snippets.rs:16–76  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

14}
15
16fn 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 }

Callers 4

test_get_signalFunction · 0.85
test_discrete_signalFunction · 0.85
test_avg_active_signalsFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected