Update filtering
This commit is contained in:
parent
2b08bbfd66
commit
bbaf39173d
|
|
@ -33,8 +33,8 @@ pub async fn list_up_for_buy(
|
||||||
|
|
||||||
// sma3_close(current) > sma3_open (current), sma3_close(prev) < sma3_open (prev)
|
// sma3_close(current) > sma3_open (current), sma3_close(prev) < sma3_open (prev)
|
||||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
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_open = ema_open(5, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
||||||
let ema10_close = ema(10, &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;
|
let server_epoch = get_server_epoch().await;
|
||||||
for (symbol, values) in &mut filtered_data {
|
for (symbol, values) in &mut filtered_data {
|
||||||
let mut do_buy = false;
|
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)
|
// supertrend(ATR period 30, multiplier: 2.0, 30m close price)
|
||||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
let supertrend_30m_map =
|
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 {
|
for (symbol, values) in &mut filtered_data {
|
||||||
let mut do_buy = false;
|
let mut do_buy = false;
|
||||||
if let Some(supertrend_vec) = supertrend_30m_map.get(symbol)
|
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().is_some_and(|a| a.close_time == values.closetime)
|
||||||
&& supertrend_vec.last().unwrap().area == SuperTrendArea::UP
|
&& supertrend_vec.last().unwrap().area == SuperTrendArea::UP
|
||||||
&& supertrend_vec[supertrend_vec.len()-2].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;
|
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 let Some(wpr100_vec) = wpr100_map.get(symbol) {
|
||||||
if wpr100_vec.len() > 15
|
if wpr100_vec.len() > 15
|
||||||
&& wpr100_vec.last().unwrap().close_time > server_epoch
|
&& 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;
|
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;
|
is_sell = true;
|
||||||
} else if element.pure_profit_percent <= element.stoploss_percent {
|
} else if element.pure_profit_percent <= element.stoploss_percent {
|
||||||
is_sell = true;
|
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;
|
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)) {
|
// 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;
|
// is_sell = true;
|
||||||
// } else if server_epoch - element.close_time > 300_000
|
// } else if server_epoch - element.close_time > 300_000
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,8 @@ pub async fn list_up_for_buy(
|
||||||
|
|
||||||
// sma3_close(current) > sma3_open (current), sma3_close(prev) < sma3_open (prev)
|
// sma3_close(current) > sma3_open (current), sma3_close(prev) < sma3_open (prev)
|
||||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
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_open = ema_open(5, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
||||||
let ema10_close = ema(10, &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;
|
let server_epoch = get_server_epoch().await;
|
||||||
for (symbol, values) in &mut filtered_data {
|
for (symbol, values) in &mut filtered_data {
|
||||||
let mut do_buy = false;
|
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)
|
// supertrend(ATR period 30, multiplier: 2.0, 30m close price)
|
||||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
let supertrend_30m_map =
|
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 {
|
for (symbol, values) in &mut filtered_data {
|
||||||
let mut do_buy = false;
|
let mut do_buy = false;
|
||||||
if let Some(supertrend_vec) = supertrend_30m_map.get(symbol)
|
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().is_some_and(|a| a.close_time == values.closetime)
|
||||||
&& supertrend_vec.last().unwrap().area == SuperTrendArea::DOWN
|
&& supertrend_vec.last().unwrap().area == SuperTrendArea::DOWN
|
||||||
&& supertrend_vec[supertrend_vec.len()-2].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;
|
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 let Some(wpr100_vec) = wpr100_map.get(symbol) {
|
||||||
if wpr100_vec.len() > 15
|
if wpr100_vec.len() > 15
|
||||||
&& wpr100_vec.last().unwrap().close_time > server_epoch
|
&& 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;
|
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;
|
is_sell = true;
|
||||||
} else if element.pure_profit_percent <= element.stoploss_percent {
|
} else if element.pure_profit_percent <= element.stoploss_percent {
|
||||||
is_sell = true;
|
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;
|
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)) {
|
// 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;
|
// 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)) {
|
// } 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)) {
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ pub async fn ema_opclo(
|
||||||
ema_prev = sma_for_initial_value;
|
ema_prev = sma_for_initial_value;
|
||||||
|
|
||||||
for element in partial_vec2 {
|
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.ema_value = ema_t;
|
||||||
ema_data.close_time = element.close_time;
|
ema_data.close_time = element.close_time;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user