Update filtering
This commit is contained in:
parent
c31abbb863
commit
f6dd5730ea
|
|
@ -70,26 +70,6 @@ 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;
|
||||
|
|
@ -131,9 +111,29 @@ pub async fn list_up_for_buy(
|
|||
}
|
||||
remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||
|
||||
// StochRSI (RSI_len: 15, StochRSI_len: 15, K: 3, D: 3) K_current < 70, K_current > d_current
|
||||
// current ADX(15, 15) < 25
|
||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||
let stoch_rsis = stoch_rsi(15, 15, 3, 3, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
||||
let adx_vec = adx(15, 15, &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;
|
||||
|
||||
// StochRSI (RSI_len: 30, StochRSI_len: 30, K: 3, D: 3) K_current < 70, K_current > d_current
|
||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||
let stoch_rsis = stoch_rsi(30, 30, 3, 3, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
||||
for (symbol, values) in &mut filtered_data {
|
||||
if stoch_rsis.contains_key(symbol) {
|
||||
let stoch_rsi_vec = stoch_rsis.get(symbol).unwrap();
|
||||
|
|
@ -212,11 +212,23 @@ pub async fn list_up_for_sell(
|
|||
filtered_symbols.insert(element.symbol.clone(), FilteredDataValue::new());
|
||||
}
|
||||
let supertrend_30m = supertrend(10, 2.0, true, &all_data.rt_price_30m_vec, &filtered_symbols).await?;
|
||||
let dema_30 = dema(30, &all_data.rt_price_30m_vec, &filtered_symbols).await?;
|
||||
let tema_10 = tema(10, &all_data.rt_price_30m_vec, &filtered_symbols).await?;
|
||||
for element in filled_buy_orders {
|
||||
let mut is_sell = false;
|
||||
|
||||
|
||||
let mut is_overturned = false;
|
||||
if element.used_usdt >= dec!(10.0) {
|
||||
if let (Some(dema_vec), Some(tema_vec)) = (dema_30.get(&element.symbol), tema_10.get(&element.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 &&
|
||||
tema_vec.last().unwrap().close_time > server_epoch &&
|
||||
dema_vec.last().unwrap().dema_value > tema_vec.last().unwrap().tema_value &&
|
||||
dema_vec[dema_vec.len()-2].dema_value < tema_vec[tema_vec.len()-2].tema_value {
|
||||
is_overturned = true;
|
||||
}
|
||||
}
|
||||
|
||||
if let (Some(exchange_info), Some(tradefee), Some(supertrend_vec)) =
|
||||
(exchange_info_map.get(&element.symbol), trade_fee_map.get(&element.symbol), supertrend_30m.get(&element.symbol)) {
|
||||
// update stoploss
|
||||
|
|
@ -256,22 +268,39 @@ pub async fn list_up_for_sell(
|
|||
is_sell = true;
|
||||
} else if element.current_price >= element.target_price {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 1 && is_overturned == true {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 5 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (5.0/6.0) <= element.pure_profit_percent) {
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (10.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 6 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (4.0/6.0) <= element.pure_profit_percent) {
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (9.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 7 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (3.0/6.0) <= element.pure_profit_percent) {
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (8.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 8 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (2.0/6.0) <= element.pure_profit_percent) {
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (7.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 9 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (1.0/6.0) <= element.pure_profit_percent) {
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (6.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 10 { // time up selling
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 10 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (5.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 11 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (4.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 12 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (3.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 13 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (2.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 14 &&
|
||||
(target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent * (1.0/11.0) <= element.pure_profit_percent) {
|
||||
is_sell = true;
|
||||
} else if server_epoch - element.transact_time > (1_800_000) * 15 { // time up selling
|
||||
is_sell = true;
|
||||
}
|
||||
// TODO: sell_count가 1일 때 적용하기
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user