Update filtering rules

This commit is contained in:
Sik Yoon 2024-04-02 23:33:22 +09:00
parent 490ca68a5c
commit c31abbb863

View File

@ -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<String> = 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<String> = 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<String> = 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<String> = 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());
}