Update filtering

This commit is contained in:
Sik Yoon 2024-06-02 01:59:41 +09:00
parent 2b08bbfd66
commit bbaf39173d
3 changed files with 57 additions and 25 deletions

View File

@ -33,8 +33,8 @@ pub async fn list_up_for_buy(
// sma3_close(current) > sma3_open (current), sma3_close(prev) < sma3_open (prev)
let mut keys_to_remove: HashSet<String> = HashSet::new();
let ema10_open = ema_open(10, &alldata.rt_price_30m_vec, &filtered_data).await?;
let ema10_close = ema(10, &alldata.rt_price_30m_vec, &filtered_data).await?;
let ema10_open = ema_open(5, &alldata.rt_price_30m_vec, &filtered_data).await?;
let ema10_close = ema(5, &alldata.rt_price_30m_vec, &filtered_data).await?;
let server_epoch = get_server_epoch().await;
for (symbol, values) in &mut filtered_data {
let mut do_buy = false;
@ -83,7 +83,7 @@ pub async fn list_up_for_buy(
// supertrend(ATR period 30, multiplier: 2.0, 30m close price)
let mut keys_to_remove: HashSet<String> = HashSet::new();
let supertrend_30m_map =
supertrend(30, 2.0, true, &alldata.rt_price_30m_vec, &filtered_data).await?;
supertrend(100, 1.5, true, &alldata.rt_price_30m_vec, &filtered_data).await?;
for (symbol, values) in &mut filtered_data {
let mut do_buy = false;
if let Some(supertrend_vec) = supertrend_30m_map.get(symbol)
@ -92,13 +92,7 @@ pub async fn list_up_for_buy(
&& supertrend_vec.last().is_some_and(|a| a.close_time == values.closetime)
&& supertrend_vec.last().unwrap().area == SuperTrendArea::UP
&& supertrend_vec[supertrend_vec.len()-2].area == SuperTrendArea::UP {
let a = supertrend_vec.get(supertrend_vec.len()-6..supertrend_vec.len()-1).unwrap();
for element in a {
if element.signal == Some(SuperTrendSignal::BUY) {
do_buy = true;
break;
}
}
}
}
@ -149,7 +143,7 @@ pub async fn list_up_for_buy(
if let Some(wpr100_vec) = wpr100_map.get(symbol) {
if wpr100_vec.len() > 15
&& wpr100_vec.last().unwrap().close_time > server_epoch
&& wpr100_vec.last().unwrap().r_value < -50.0 {
&& wpr100_vec.last().unwrap().r_value < -40.0 {
do_buy = true;
}
}
@ -367,9 +361,31 @@ pub async fn list_up_for_sell(all_data: &AllData, futures_exchange_info_map: &Ha
is_sell = true;
} else if element.pure_profit_percent <= element.stoploss_percent {
is_sell = true;
} else if server_epoch - element.close_time > 1_800_000 * 24 {
}
let minimum_candles = 5;
let maximum_candles = 20;
for count_candles in minimum_candles..=maximum_candles {
if count_candles < maximum_candles
&& server_epoch - element.transact_time
> (1_800_000) * count_candles
&& (element.target_percent != 0.0
&& element.target_percent
* ((maximum_candles - count_candles) as f64
/ (maximum_candles - minimum_candles + 1) as f64)
<= element.pure_profit_percent)
{
is_sell = true;
break;
} else {
break;
}
}
if server_epoch - element.close_time > 1_800_000 * maximum_candles {
is_sell = true;
}
// else if server_epoch - element.close_time > 300_000 && supertrend_1m_map.get(&element.symbol).is_some_and(|a| a.len() > 10 && a.last().is_some_and(|b| b.close_time > server_epoch && b.area == SuperTrendArea::DOWN)) {
// is_sell = true;
// } else if server_epoch - element.close_time > 300_000

View File

@ -33,8 +33,8 @@ pub async fn list_up_for_buy(
// sma3_close(current) > sma3_open (current), sma3_close(prev) < sma3_open (prev)
let mut keys_to_remove: HashSet<String> = HashSet::new();
let ema10_open = ema_open(10, &alldata.rt_price_30m_vec, &filtered_data).await?;
let ema10_close = ema(10, &alldata.rt_price_30m_vec, &filtered_data).await?;
let ema10_open = ema_open(5, &alldata.rt_price_30m_vec, &filtered_data).await?;
let ema10_close = ema(5, &alldata.rt_price_30m_vec, &filtered_data).await?;
let server_epoch = get_server_epoch().await;
for (symbol, values) in &mut filtered_data {
let mut do_buy = false;
@ -83,7 +83,7 @@ pub async fn list_up_for_buy(
// supertrend(ATR period 30, multiplier: 2.0, 30m close price)
let mut keys_to_remove: HashSet<String> = HashSet::new();
let supertrend_30m_map =
supertrend(30, 2.0, true, &alldata.rt_price_30m_vec, &filtered_data).await?;
supertrend(100, 1.5, true, &alldata.rt_price_30m_vec, &filtered_data).await?;
for (symbol, values) in &mut filtered_data {
let mut do_buy = false;
if let Some(supertrend_vec) = supertrend_30m_map.get(symbol)
@ -92,13 +92,7 @@ pub async fn list_up_for_buy(
&& supertrend_vec.last().is_some_and(|a| a.close_time == values.closetime)
&& supertrend_vec.last().unwrap().area == SuperTrendArea::DOWN
&& supertrend_vec[supertrend_vec.len()-2].area == SuperTrendArea::DOWN {
let a = supertrend_vec.get(supertrend_vec.len()-6..supertrend_vec.len()-1).unwrap();
for element in a {
if element.signal == Some(SuperTrendSignal::SELL) {
do_buy = true;
break;
}
}
}
}
@ -149,7 +143,7 @@ pub async fn list_up_for_buy(
if let Some(wpr100_vec) = wpr100_map.get(symbol) {
if wpr100_vec.len() > 15
&& wpr100_vec.last().unwrap().close_time > server_epoch
&& wpr100_vec.last().unwrap().r_value > -50.0 {
&& wpr100_vec.last().unwrap().r_value > -60.0 {
do_buy = true;
}
}
@ -374,9 +368,31 @@ pub async fn list_up_for_sell(all_data: &AllData, futures_exchange_info_map: &Ha
is_sell = true;
} else if element.pure_profit_percent <= element.stoploss_percent {
is_sell = true;
} else if server_epoch - element.close_time > 1_800_000 * 24 {
}
let minimum_candles = 5;
let maximum_candles = 20;
for count_candles in minimum_candles..=maximum_candles {
if count_candles < maximum_candles
&& server_epoch - element.transact_time
> (1_800_000) * count_candles
&& (element.target_percent != 0.0
&& element.target_percent
* ((maximum_candles - count_candles) as f64
/ (maximum_candles - minimum_candles + 1) as f64)
<= element.pure_profit_percent)
{
is_sell = true;
break;
} else {
break;
}
}
if server_epoch - element.close_time > 1_800_000 * maximum_candles {
is_sell = true;
}
// else if server_epoch - element.close_time > 300_000 && supertrend_1m_map.get(&element.symbol).is_some_and(|a| a.len() > 10 && a.last().is_some_and(|b| b.close_time > server_epoch && b.area == SuperTrendArea::UP)) {
// is_sell = true;
// } else if server_epoch - element.close_time > 300_000 && adx_vec.get(&element.symbol).is_some_and(|a| a.len() > 10 && a.last().is_some_and(|b| b.close_time > server_epoch && b.adx < 15.0)) {

View File

@ -132,7 +132,7 @@ pub async fn ema_opclo(
ema_prev = sma_for_initial_value;
for element in partial_vec2 {
ema_t = (1.0 - alpha) * ema_prev + alpha * element.close_price;
ema_t = (1.0 - alpha) * ema_prev + alpha * element.opclo_price;
ema_data.ema_value = ema_t;
ema_data.close_time = element.close_time;