diff --git a/src/strategy_team/strategy_008.rs b/src/strategy_team/strategy_008.rs index 1e55d41..c640241 100644 --- a/src/strategy_team/strategy_008.rs +++ b/src/strategy_team/strategy_008.rs @@ -44,14 +44,14 @@ pub async fn list_up_for_buy( } remove_keys(&mut filtered_data, keys_to_remove).await; - // current Dema(20) < current Tema(10) - // previous Dema(20) > previous Tema(10) + // current Dema(30) < current Tema(10) + // previous Dema(30) > previous Tema(10) let mut keys_to_remove: HashSet = HashSet::new(); - let dema_20 = dema(20, &alldata.rt_price_30m_vec, &filtered_data).await?; + let dema_30 = dema(30, &alldata.rt_price_30m_vec, &filtered_data).await?; let tema_10 = tema(10, &alldata.rt_price_30m_vec, &filtered_data).await?; let server_epoch = get_server_epoch().await; for (symbol, values) in &mut filtered_data { - if let (Some(dema_vec), Some(tema_vec)) = (dema_20.get(symbol), tema_10.get(symbol)) { + if let (Some(dema_vec), Some(tema_vec)) = (dema_30.get(symbol), tema_10.get(symbol)) { if dema_vec.len() > 2 && tema_vec.len() > 2 && dema_vec.last().unwrap().close_time == tema_vec.last().unwrap().close_time && dema_vec.last().unwrap().close_time > server_epoch && @@ -70,6 +70,26 @@ pub async fn list_up_for_buy( } remove_keys(&mut filtered_data, keys_to_remove).await; + // current ADX(10, 10) < 25 + let mut keys_to_remove: HashSet = HashSet::new(); + let adx_vec = adx(10, 10, &alldata.rt_price_30m_vec, &filtered_data).await?; + for (symbol, values) in &mut filtered_data { + if let Some(adx_vec) = adx_vec.get(symbol) { + if let Some(last_idx) = adx_vec.iter().position(|elem| elem.close_time == values.closetime) { + if adx_vec.len() > 10 && + adx_vec[last_idx].adx < 25.0 { + } else { + keys_to_remove.insert(symbol.clone()); + } + } else { + keys_to_remove.insert(symbol.clone()); + } + } else { + keys_to_remove.insert(symbol.clone()); + } + } + remove_keys(&mut filtered_data, keys_to_remove).await; + // supertrend(ATR period 10, multiplier: 2.0, 30m close price) let mut keys_to_remove: HashSet = HashSet::new(); let server_epoch = get_server_epoch().await; @@ -89,7 +109,7 @@ pub async fn list_up_for_buy( values.current_price = current_price; values.closetime = rt_price_vec.last().unwrap().close_time; values.stoploss = band_value; - values.target_price = decimal_add(decimal_mul(decimal_sub(current_price, values.stoploss), dec!(2.0)), current_price); + values.target_price = decimal_add(decimal_mul(decimal_sub(current_price, values.stoploss), dec!(3.0)), current_price); } else if supertrend_vec.last().unwrap().area == SuperTrendArea::DOWN && band_value > current_price && band_value > open_price @@ -97,7 +117,7 @@ pub async fn list_up_for_buy( values.current_price = current_price; values.closetime = rt_price_vec.last().unwrap().close_time; values.stoploss = decimal_sub(open_price, decimal_sub(band_value, open_price)); - values.target_price = decimal_add(decimal_mul(decimal_sub(open_price, values.stoploss), dec!(2.0)), current_price); + values.target_price = decimal_add(decimal_mul(decimal_sub(open_price, values.stoploss), dec!(3.0)), current_price); } else { keys_to_remove.insert(symbol.clone()); @@ -131,7 +151,7 @@ pub async fn list_up_for_buy( } remove_keys(&mut filtered_data, keys_to_remove).await; - // limit buy price: 0.5 * abs(이전 5 개 중 최대값 제거 한 opclo 값 평균 - 현재 open 값) + 현재 open 값 > current_price + // limit buy price: 0.25 * abs(이전 5 개 중 최대값 제거 한 opclo 값 평균 - 현재 open 값) + 현재 open 값 > current_price let mut keys_to_remove: HashSet = HashSet::new(); let server_epoch = get_server_epoch().await; for (symbol, values) in &mut filtered_data { @@ -154,7 +174,7 @@ pub async fn list_up_for_buy( let current_price = rt_price_vec.last().unwrap().close_price; let difference = (mean - rt_price_vec.last().unwrap().open_price).abs(); - if current_price < rt_price_vec.last().unwrap().open_price + (0.5 * difference) { + if current_price < rt_price_vec.last().unwrap().open_price + (0.25 * difference) { } else { keys_to_remove.insert(symbol.clone()); }