Add filtering
This commit is contained in:
parent
daddbed2b0
commit
73a968b839
|
|
@ -68,7 +68,7 @@ pub async fn list_up_for_buy(
|
|||
}
|
||||
try_join_all(task_vec).await?;
|
||||
|
||||
// 2nd filtering: supertrend(ATR period 10, multiplier: 1.1, 30m close price), signal should be BUY
|
||||
// 2nd filtering: supertrend(ATR period 10, multiplier: 1.2, 30m close price), signal should be BUY
|
||||
let filtered_data_1st = filtered_data_1st_arc.lock().await.clone();
|
||||
let mut filtered_data_2nd: Vec<FilteredData> = Vec::new();
|
||||
let mut filtered_data_2nd_arc: Arc<Mutex<Vec<FilteredData>>> =
|
||||
|
|
@ -85,7 +85,7 @@ pub async fn list_up_for_buy(
|
|||
.iter()
|
||||
.position(|x| *x.0 == element.symbol);
|
||||
let supertrend_option_30m =
|
||||
supertrend(&element.symbol, &rt_price_30m_vec_c, 10, 1.1, true).await;
|
||||
supertrend(&element.symbol, &rt_price_30m_vec_c, 10, 1.2, true).await;
|
||||
|
||||
if rt_30m_option.is_some() && supertrend_option_30m.is_some() {
|
||||
rt_30m_vec = rt_price_30m_vec_c[rt_30m_option.unwrap()].1.clone();
|
||||
|
|
@ -319,6 +319,51 @@ pub async fn list_up_for_buy(
|
|||
}
|
||||
try_join_all(task_vec).await?;
|
||||
|
||||
// 7th filtering: ema3_30m < ema5_30m latest 3 candles
|
||||
let filtered_data_6th_c = filtered_data_6th_arc.lock().await.clone();
|
||||
let mut filtered_data_7th: Vec<FilteredData> = Vec::new();
|
||||
let mut filtered_data_7th_arc: Arc<Mutex<Vec<FilteredData>>> =
|
||||
Arc::new(Mutex::new(filtered_data_7th));
|
||||
let mut task_vec = Vec::new();
|
||||
let ema3_30m_data = ema(3, &alldata.rt_price_30m_vec, &filtered_data_6th_c).await?;
|
||||
let ema5_30m_data = ema(5, &alldata.rt_price_30m_vec, &filtered_data_6th_c).await?;
|
||||
for element in filtered_data_6th_c {
|
||||
let filtered_data_7th_arc_c = Arc::clone(&filtered_data_7th_arc);
|
||||
let ema3_30m_data_c = ema3_30m_data.clone();
|
||||
let ema5_30m_data_c = ema5_30m_data.clone();
|
||||
|
||||
task_vec.push(tokio::spawn(async move {
|
||||
let ema3_idx = ema3_30m_data_c.iter().position(|elem| elem.0 == element.symbol);
|
||||
let ema5_idx = ema5_30m_data_c.iter().position(|elem| elem.0 == element.symbol);
|
||||
|
||||
if ema3_idx.is_some() && ema5_idx.is_some() {
|
||||
let ema3_30m = &ema3_30m_data_c[ema3_idx.unwrap()].1;
|
||||
let ema5_30m = &ema5_30m_data_c[ema3_idx.unwrap()].1;
|
||||
|
||||
let ema3_close_time_idx = ema3_30m.iter().position(|elem| elem.close_time == element.closetime);
|
||||
let ema5_close_time_idx = ema5_30m.iter().position(|elem| elem.close_time == element.closetime);
|
||||
|
||||
if ema3_30m.len() >= 5 && ema5_30m.len() >= 5 && ema3_close_time_idx.is_some() && ema5_close_time_idx.is_some() {
|
||||
if ema3_30m[ema3_close_time_idx.unwrap()-1].ema_value < ema5_30m[ema5_close_time_idx.unwrap()-1].ema_value ||
|
||||
ema3_30m[ema3_close_time_idx.unwrap()-2].ema_value < ema5_30m[ema5_close_time_idx.unwrap()-2].ema_value ||
|
||||
ema3_30m[ema3_close_time_idx.unwrap()-3].ema_value < ema5_30m[ema5_close_time_idx.unwrap()-3].ema_value {
|
||||
let mut filtered_data_7th_lock = filtered_data_7th_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_7th_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<RsiData>)> =
|
||||
|
|
@ -401,7 +446,7 @@ pub async fn list_up_for_buy(
|
|||
// }
|
||||
// try_join_all(task_vec).await?;
|
||||
|
||||
let final_filtered_data = filtered_data_6th_arc.lock().await.clone();
|
||||
let final_filtered_data = filtered_data_7th_arc.lock().await.clone();
|
||||
insert_pre_suggested_coins(4, false, &final_filtered_data, &alldata).await;
|
||||
|
||||
Ok(())
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ use serde::Deserialize;
|
|||
use sqlx::FromRow;
|
||||
use std::sync::Arc;
|
||||
use tokio::{fs::*, io::AsyncWriteExt, sync::Mutex, time::*};
|
||||
use super::FilteredData;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct EmaData {
|
||||
|
|
@ -28,7 +29,7 @@ impl EmaData {
|
|||
pub async fn ema(
|
||||
moving_number: usize,
|
||||
input_rt_data: &Vec<(String, Vec<RealtimePriceData>)>,
|
||||
filtered_symbols: &Vec<(String, i64)>,
|
||||
filtered_symbols: &Vec<FilteredData>,
|
||||
) -> Result<Vec<(String, Vec<EmaData>)>, Box<dyn std::error::Error + Send + Sync>> {
|
||||
if filtered_symbols.is_empty() {
|
||||
Err("Err")?;
|
||||
|
|
@ -41,13 +42,13 @@ pub async fn ema(
|
|||
let mut ema_data_wrapper: Vec<(String, Vec<EmaData>)> = Vec::new();
|
||||
let mut ema_data_wrapper_arc = Arc::new(Mutex::new(ema_data_wrapper));
|
||||
let mut task_vec = Vec::new();
|
||||
for symbol in filtered_symbols {
|
||||
let symbol_search_result = input_rt_data.iter().position(|x| x.0 == *symbol.0);
|
||||
for filtered_elem in filtered_symbols {
|
||||
let symbol_search_result = input_rt_data.iter().position(|x| x.0 == *filtered_elem.symbol);
|
||||
|
||||
match symbol_search_result {
|
||||
Some(T) => {
|
||||
let ema_data_wrapper_arc_c = Arc::clone(&ema_data_wrapper_arc);
|
||||
let symbol_c = symbol.clone();
|
||||
let filtered_elem_c = filtered_elem.clone();
|
||||
let mut ema_data = EmaData::new();
|
||||
let mut ema_data_vec: Vec<EmaData> = Vec::new();
|
||||
let input_rt_data_c = input_rt_data.clone();
|
||||
|
|
@ -83,7 +84,7 @@ pub async fn ema(
|
|||
}
|
||||
}
|
||||
let mut ema_data_wrapper_lock = ema_data_wrapper_arc_c.lock().await;
|
||||
ema_data_wrapper_lock.push((symbol_c.0.clone(), ema_data_vec.clone()));
|
||||
ema_data_wrapper_lock.push((filtered_elem_c.symbol.clone(), ema_data_vec.clone()));
|
||||
}));
|
||||
}
|
||||
None => {}
|
||||
|
|
|
|||
|
|
@ -7,3 +7,5 @@ pub mod sma;
|
|||
pub mod stoch_rsi;
|
||||
pub mod supertrend;
|
||||
pub mod tema;
|
||||
|
||||
use crate::strategy_team::FilteredData;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user