From 43b0423d30a75a1398484d89cca8b982b0a48e30 Mon Sep 17 00:00:00 2001 From: Sik Yoon Date: Mon, 1 Jan 2024 12:49:25 +0900 Subject: [PATCH] Move thread task starting point --- src/value_estimation_team/indicators/sma.rs | 51 +++++++++------------ 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/src/value_estimation_team/indicators/sma.rs b/src/value_estimation_team/indicators/sma.rs index 0033d8d..774d7d6 100644 --- a/src/value_estimation_team/indicators/sma.rs +++ b/src/value_estimation_team/indicators/sma.rs @@ -40,40 +40,33 @@ pub async fn sma( let mut task_vec = Vec::new(); for filtered_symbol in filtered_symbols { - let symbol_search_result = input_rt_data.iter().position(|x| x.0 == *filtered_symbol.symbol); - - match symbol_search_result { - Some(T) => { - let sma_data_wrapper_arc_c = Arc::clone(&sma_data_wrapper_arc); - let symbol_c = filtered_symbol.symbol.clone(); + let filtered_symbol_c = filtered_symbol.clone(); + let sma_data_wrapper_arc_c = Arc::clone(&sma_data_wrapper_arc); + let input_rt_data_c = input_rt_data.clone(); + task_vec.push(tokio::spawn(async move { + let search_result = input_rt_data_c.iter().position(|x| x.0 == *filtered_symbol_c.symbol); + if search_result.is_some() { let mut sma_data = SmaData::new(); let mut sma_data_vec: Vec = Vec::new(); - let input_rt_data_c = input_rt_data.clone(); - task_vec.push(tokio::spawn(async move { - if input_rt_data_c[T].1.len() < moving_number { - sma_data.sma_value = 0.0; - sma_data.close_time = 0; - sma_data_vec.push(sma_data.clone()); - } else { - let mut iter = input_rt_data_c[T].1.windows(moving_number); - for buffer in iter { - let mut avg = 0.0; - for element in buffer { - avg += element.close_price; - } - avg /= (moving_number as f64); - - sma_data.sma_value = avg; - sma_data.close_time = buffer.last().unwrap().close_time; - sma_data_vec.push(sma_data.clone()); + + if input_rt_data_c[search_result.unwrap()].1.len() >= moving_number { + let mut iter = input_rt_data_c[search_result.unwrap()].1.windows(moving_number); + for buffer in iter { + let mut avg = 0.0; + for element in buffer { + avg += element.close_price; } + avg /= (moving_number as f64); + + sma_data.sma_value = avg; + sma_data.close_time = buffer.last().unwrap().close_time; + sma_data_vec.push(sma_data.clone()); } - let mut sma_data_wrapper_lock = sma_data_wrapper_arc_c.lock().await; - sma_data_wrapper_lock.push((symbol_c.clone(), sma_data_vec.clone())); - })); + } + let mut sma_data_wrapper_lock = sma_data_wrapper_arc_c.lock().await; + sma_data_wrapper_lock.push((filtered_symbol_c.symbol.clone(), sma_data_vec.clone())); } - None => {} - } + })); } try_join_all(task_vec).await?; let a = sma_data_wrapper_arc.lock().await.to_owned();