From 7736c2e37344d390b356c9666c17b821bd38047b Mon Sep 17 00:00:00 2001 From: Sik Yoon Date: Sat, 9 Dec 2023 03:04:53 +0900 Subject: [PATCH] Add filtering --- src/strategy_team/strategy_004.rs | 45 ++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/strategy_team/strategy_004.rs b/src/strategy_team/strategy_004.rs index 3371a36..aeab0f9 100644 --- a/src/strategy_team/strategy_004.rs +++ b/src/strategy_team/strategy_004.rs @@ -278,6 +278,49 @@ pub async fn list_up_for_buy( } try_join_all(task_vec).await?; + // 6th filtering: 0.5% <= the average amplitude of the latest 10 30m candles <= 2% + let filtered_data_5th_c = filtered_data_5th_arc.lock().await.clone(); + let mut filtered_data_6th: Vec = Vec::new(); + let mut filtered_data_6th_arc: Arc>> = + Arc::new(Mutex::new(filtered_data_6th)); + let mut task_vec = Vec::new(); + for element in filtered_data_5th_c { + let mut supertrend_vec: Vec = Vec::new(); + let rt_price_30m_vec_c = alldata.rt_price_30m_vec.clone(); + let filtered_data_6th_arc_c = Arc::clone(&filtered_data_5th_arc); + + task_vec.push(tokio::spawn(async move { + let position_idx = rt_price_30m_vec_c.iter().position(|elem| elem.0 == element.symbol); + + if position_idx.is_some() { + let vec_len = rt_price_30m_vec_c[position_idx.unwrap()].1.len(); + if vec_len >= 11 { + let candles = rt_price_30m_vec_c[position_idx.unwrap()].1.get(vec_len-12..vec_len-1).unwrap(); + let windows = candles.windows(2); + let mut average_amplitude = 0.0; + + for window in windows { + average_amplitude += (window.last().unwrap().high_price - window.last().unwrap().low_price) / window.first().unwrap().close_price; + } + average_amplitude /= 10.0; + + if 0.005 <= average_amplitude && average_amplitude <= 0.02 { + let mut filtered_data_6th_lock = filtered_data_6th_arc_c.lock().await; + let mut filtered_data = FilteredData::new(); + filtered_data.symbol = element.symbol.clone(); + filtered_data.closetime = element.closetime; + filtered_data.current_price = element.current_price; + filtered_data.stoploss = element.stoploss; + filtered_data.target_price = element.target_price; + + filtered_data_6th_lock.push(filtered_data); + } + } + } + })); + } + try_join_all(task_vec).await?; + // // 4th filtering: StochRSI (RSI length: 3, Stoch length: 3, smooth k: 3, smooth d: 3) 80 > k > kn-1 // let filtered_4th_symbol_c = filtered_data_4th_arc.lock().await.clone(); // let mut rsi10_1d_data: Vec<(String, Vec)> = @@ -360,7 +403,7 @@ pub async fn list_up_for_buy( // } // try_join_all(task_vec).await?; - let final_filtered_data = filtered_data_5th_arc.lock().await.clone(); + let final_filtered_data = filtered_data_6th_arc.lock().await.clone(); insert_pre_suggested_coins(4, false, &final_filtered_data, &alldata).await; Ok(())