Compare commits
10 Commits
98a29873b9
...
6dfdc719c3
| Author | SHA1 | Date | |
|---|---|---|---|
| 6dfdc719c3 | |||
| 35d008450d | |||
| 7ea865ef54 | |||
| 3d821c7ec3 | |||
| eae8a367dd | |||
| 73e72bdd3c | |||
| 6bb2b2df8e | |||
| c0cef48c50 | |||
| 64f1ef7851 | |||
| 805d8c87e8 |
|
|
@ -36,13 +36,19 @@ pub async fn list_up_for_buy(
|
||||||
// current lr > prev lr, current r_squared <= 0.01
|
// current lr > prev lr, current r_squared <= 0.01
|
||||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
let lr_map = linear_regression(10, 0, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
let lr_map = linear_regression(10, 0, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
||||||
|
let sma_map = sma(10, &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(lr_vec), Some(current_info)) = (lr_map.get(symbol), get_current_price_decimal(&symbol, &alldata.rt_price_30m_vec).await) {
|
if let (Some(lr_vec), Some(sma_vec), Some(current_info)) = (lr_map.get(symbol), sma_map.get(symbol), get_current_price_decimal(&symbol, &alldata.rt_price_30m_vec).await) {
|
||||||
if lr_vec.len() > 10
|
if lr_vec.len() > 10
|
||||||
|
&& sma_vec.len() > 10
|
||||||
&& lr_vec.last().is_some_and(|x| x.close_time > server_epoch)
|
&& lr_vec.last().is_some_and(|x| x.close_time > server_epoch)
|
||||||
|
&& sma_vec.last().is_some_and(|x| x.close_time > server_epoch)
|
||||||
&& lr_vec[lr_vec.len()-1].lr_value > lr_vec[lr_vec.len()-2].lr_value
|
&& lr_vec[lr_vec.len()-1].lr_value > lr_vec[lr_vec.len()-2].lr_value
|
||||||
&& lr_vec.last().unwrap().r_squared <= 0.01
|
&& lr_vec[lr_vec.len()-2].lr_value > lr_vec[lr_vec.len()-3].lr_value
|
||||||
|
&& lr_vec.last().unwrap().r_squared <= 0.15
|
||||||
|
&& lr_vec[lr_vec.len()-1].lr_value >= sma_vec[sma_vec.len()-1].sma_value
|
||||||
|
&& lr_vec[lr_vec.len()-2].lr_value <= sma_vec[sma_vec.len()-2].sma_value
|
||||||
{
|
{
|
||||||
values.closetime = current_info.1;
|
values.closetime = current_info.1;
|
||||||
do_buy = true;
|
do_buy = true;
|
||||||
|
|
@ -108,26 +114,26 @@ pub async fn list_up_for_buy(
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// 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_1m_map =
|
||||||
// supertrend(100, 1.5, true, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
supertrend(100, 2.5, true, &alldata.rt_price_1m_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_1m_map.get(symbol)
|
||||||
// {
|
{
|
||||||
// if supertrend_vec.len() > 10
|
if supertrend_vec.len() > 10
|
||||||
// && supertrend_vec.last().is_some_and(|a| a.close_time == values.closetime)
|
&& supertrend_vec.last().is_some_and(|a| a.close_time > server_epoch)
|
||||||
// && 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 {
|
||||||
// do_buy = true;
|
do_buy = true;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if do_buy == false {
|
if do_buy == false {
|
||||||
// keys_to_remove.insert(symbol.clone());
|
keys_to_remove.insert(symbol.clone());
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// set target_price and stop_loss
|
// set target_price and stop_loss
|
||||||
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
|
|
@ -161,7 +167,7 @@ pub async fn list_up_for_buy(
|
||||||
// }
|
// }
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// Wiliams -50 > %R(100)
|
// Wiliams -60 > %R(100)
|
||||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
let mut wpr100_map = wiliams_percent_r(100, &alldata.rt_price_1m_vec, &filtered_data).await?;
|
let mut wpr100_map = wiliams_percent_r(100, &alldata.rt_price_1m_vec, &filtered_data).await?;
|
||||||
let server_epoch = get_server_epoch().await;
|
let server_epoch = get_server_epoch().await;
|
||||||
|
|
@ -170,7 +176,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 < -70.0 {
|
||||||
do_buy = true;
|
do_buy = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -237,38 +243,39 @@ pub async fn list_up_for_buy(
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// Heatmap volume: filtering close price with Extra High is over the previous candle from 30 previous candles
|
// Heatmap volume: filtering close price with Extra High is over the previous candle from 30 previous candles
|
||||||
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
// let heatmap_volumes = heatmap_volume(
|
let heatmap_volumes = heatmap_volume(
|
||||||
// 30,
|
30,
|
||||||
// 30,
|
30,
|
||||||
// 4.0,
|
4.0,
|
||||||
// 1.5,
|
1.5,
|
||||||
// 0.5,
|
0.5,
|
||||||
// -0.5,
|
-0.5,
|
||||||
// &filtered_data,
|
&filtered_data,
|
||||||
// &alldata.rt_price_1m_vec,
|
&alldata.rt_price_30m_vec,
|
||||||
// )
|
)
|
||||||
// .await?;
|
.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 = true;
|
||||||
// if let Some(heatmap_volume_vec) = heatmap_volumes.get(symbol) {
|
if let (Some(heatmap_volume_vec), Some(rt_price_vec)) = (heatmap_volumes.get(symbol), alldata.rt_price_30m_vec.get(symbol)) {
|
||||||
// if heatmap_volume_vec.len() > 100
|
if heatmap_volume_vec.len() > 100
|
||||||
// && heatmap_volume_vec.last().unwrap().close_time > server_epoch
|
&& heatmap_volume_vec.last().unwrap().close_time > server_epoch
|
||||||
// && (heatmap_volume_vec.last().unwrap().heatmap_level == HeatMapLevel::ExtraHigh || heatmap_volume_vec.last().unwrap().heatmap_level == HeatMapLevel::High
|
&& ((heatmap_volume_vec.last().unwrap().heatmap_level == HeatMapLevel::ExtraHigh && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec.last().unwrap().close_time).is_some_and(|x| x.candle_type == CandleType::UP))
|
||||||
// || heatmap_volume_vec[heatmap_volume_vec.len()-2].heatmap_level == HeatMapLevel::ExtraHigh || heatmap_volume_vec[heatmap_volume_vec.len()-2].heatmap_level == HeatMapLevel::High
|
|| (heatmap_volume_vec[heatmap_volume_vec.len()-2].heatmap_level == HeatMapLevel::ExtraHigh && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec[heatmap_volume_vec.len()-2].close_time).is_some_and(|x| x.candle_type == CandleType::UP))
|
||||||
// || heatmap_volume_vec[heatmap_volume_vec.len()-3].heatmap_level == HeatMapLevel::ExtraHigh || heatmap_volume_vec[heatmap_volume_vec.len()-3].heatmap_level == HeatMapLevel::High
|
|| (heatmap_volume_vec[heatmap_volume_vec.len()-3].heatmap_level == HeatMapLevel::ExtraHigh && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec[heatmap_volume_vec.len()-3].close_time).is_some_and(|x| x.candle_type == CandleType::UP))
|
||||||
// || heatmap_volume_vec[heatmap_volume_vec.len()-4].heatmap_level == HeatMapLevel::ExtraHigh || heatmap_volume_vec[heatmap_volume_vec.len()-4].heatmap_level == HeatMapLevel::High)
|
|| (heatmap_volume_vec[heatmap_volume_vec.len()-4].heatmap_level == HeatMapLevel::ExtraHigh && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec[heatmap_volume_vec.len()-4].close_time).is_some_and(|x| x.candle_type == CandleType::UP))
|
||||||
// {
|
|| (heatmap_volume_vec[heatmap_volume_vec.len()-5].heatmap_level == HeatMapLevel::ExtraHigh) && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec[heatmap_volume_vec.len()-5].close_time).is_some_and(|x| x.candle_type == CandleType::UP))
|
||||||
// do_buy = true;
|
{
|
||||||
// }
|
do_buy = false;
|
||||||
// }
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// if do_buy == false {
|
if do_buy == false {
|
||||||
// keys_to_remove.insert(symbol.clone());
|
keys_to_remove.insert(symbol.clone());
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
// let server_epoch = get_server_epoch().await;
|
// let server_epoch = get_server_epoch().await;
|
||||||
|
|
@ -393,12 +400,24 @@ pub async fn list_up_for_sell(all_data: &AllData, futures_exchange_info_map: &Ha
|
||||||
// is_sell = true;
|
// is_sell = true;
|
||||||
// } else
|
// } else
|
||||||
|
|
||||||
if lr_vec.last().unwrap().r_squared >= 0.55 {
|
if element.pure_profit_percent.is_sign_positive() && lr_vec[lr_vec.len()-2].r_squared >= 0.60 {
|
||||||
|
is_sell = true;
|
||||||
|
} else if server_epoch - element.close_time > 900_000
|
||||||
|
&& lr_vec[lr_vec.len()-1].lr_value < lr_vec[lr_vec.len()-2].lr_value {
|
||||||
|
is_sell = true;
|
||||||
|
} else if server_epoch - element.close_time > 900_000
|
||||||
|
&& lr_vec[lr_vec.len()-1].r_squared < lr_vec[lr_vec.len()-2].r_squared
|
||||||
|
&& lr_vec[lr_vec.len()-2].r_squared > lr_vec[lr_vec.len()-3].r_squared
|
||||||
|
&& lr_vec[lr_vec.len()-3].r_squared > lr_vec[lr_vec.len()-4].r_squared {
|
||||||
|
is_sell = true;
|
||||||
|
} else if element.pure_profit_percent <= -0.8 {
|
||||||
|
is_sell = true;
|
||||||
|
} else if element.pure_profit_percent >= 2.0 {
|
||||||
is_sell = true;
|
is_sell = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let minimum_candles = 5;
|
let minimum_candles = 5;
|
||||||
let maximum_candles = 6;
|
let maximum_candles = 20;
|
||||||
// for count_candles in minimum_candles..=maximum_candles {
|
// for count_candles in minimum_candles..=maximum_candles {
|
||||||
// if count_candles < maximum_candles
|
// if count_candles < maximum_candles
|
||||||
// && server_epoch - element.transact_time
|
// && server_epoch - element.transact_time
|
||||||
|
|
|
||||||
|
|
@ -36,13 +36,20 @@ pub async fn list_up_for_buy(
|
||||||
// current lr < prev lr, current r_squared <= 0.01
|
// current lr < prev lr, current r_squared <= 0.01
|
||||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
let lr_map = linear_regression(10, 0, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
let lr_map = linear_regression(10, 0, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
||||||
|
let sma10_map = sma(10, &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(lr_vec), Some(current_info)) = (lr_map.get(symbol), get_current_price_decimal(&symbol, &alldata.rt_price_30m_vec).await) {
|
if let (Some(lr_vec), Some(sma_vec), Some(current_info)) = (lr_map.get(symbol), sma10_map.get(symbol), get_current_price_decimal(&symbol, &alldata.rt_price_30m_vec).await) {
|
||||||
if lr_vec.len() > 10
|
if lr_vec.len() > 10
|
||||||
|
&& sma_vec.len() > 10
|
||||||
&& lr_vec.last().is_some_and(|x| x.close_time > server_epoch)
|
&& lr_vec.last().is_some_and(|x| x.close_time > server_epoch)
|
||||||
|
&& sma_vec.last().is_some_and(|x| x.close_time > server_epoch)
|
||||||
&& lr_vec[lr_vec.len()-1].lr_value < lr_vec[lr_vec.len()-2].lr_value
|
&& lr_vec[lr_vec.len()-1].lr_value < lr_vec[lr_vec.len()-2].lr_value
|
||||||
&& lr_vec.last().unwrap().r_squared <= 0.01
|
&& lr_vec[lr_vec.len()-2].lr_value < lr_vec[lr_vec.len()-3].lr_value
|
||||||
|
&& lr_vec.last().unwrap().r_squared <= 0.15
|
||||||
|
&& lr_vec[lr_vec.len()-1].lr_value <= sma_vec[sma_vec.len()-1].sma_value
|
||||||
|
&& lr_vec[lr_vec.len()-2].lr_value >= sma_vec[sma_vec.len()-2].sma_value
|
||||||
|
|
||||||
{
|
{
|
||||||
values.closetime = current_info.1;
|
values.closetime = current_info.1;
|
||||||
do_buy = true;
|
do_buy = true;
|
||||||
|
|
@ -106,26 +113,26 @@ pub async fn list_up_for_buy(
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// 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_1m_map =
|
||||||
// supertrend(100, 1.5, true, &alldata.rt_price_30m_vec, &filtered_data).await?;
|
supertrend(100, 2.5, true, &alldata.rt_price_1m_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_1m_map.get(symbol)
|
||||||
// {
|
{
|
||||||
// if supertrend_vec.len() > 10
|
if supertrend_vec.len() > 10
|
||||||
// && supertrend_vec.last().is_some_and(|a| a.close_time == values.closetime)
|
&& supertrend_vec.last().is_some_and(|a| a.close_time > server_epoch)
|
||||||
// && 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 {
|
||||||
// do_buy = true;
|
do_buy = true;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if do_buy == false {
|
if do_buy == false {
|
||||||
// keys_to_remove.insert(symbol.clone());
|
keys_to_remove.insert(symbol.clone());
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// set target_price and stop_loss
|
// set target_price and stop_loss
|
||||||
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
|
|
@ -159,7 +166,7 @@ pub async fn list_up_for_buy(
|
||||||
// }
|
// }
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// Wiliams -50.0 < %R(100)
|
// Wiliams -40.0 < %R(100)
|
||||||
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
let mut wpr100_map = wiliams_percent_r(100, &alldata.rt_price_1m_vec, &filtered_data).await?;
|
let mut wpr100_map = wiliams_percent_r(100, &alldata.rt_price_1m_vec, &filtered_data).await?;
|
||||||
let server_epoch = get_server_epoch().await;
|
let server_epoch = get_server_epoch().await;
|
||||||
|
|
@ -168,7 +175,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 > -30.0 {
|
||||||
do_buy = true;
|
do_buy = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -235,38 +242,39 @@ pub async fn list_up_for_buy(
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// Heatmap volume: filtering close price with Extra High is over the previous candle from 30 previous candles
|
// Heatmap volume: filtering close price with Extra High is over the previous candle from 30 previous candles
|
||||||
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
// let heatmap_volumes = heatmap_volume(
|
let heatmap_volumes = heatmap_volume(
|
||||||
// 30,
|
30,
|
||||||
// 30,
|
30,
|
||||||
// 4.0,
|
4.0,
|
||||||
// 1.5,
|
1.5,
|
||||||
// 0.5,
|
0.5,
|
||||||
// -0.5,
|
-0.5,
|
||||||
// &filtered_data,
|
&filtered_data,
|
||||||
// &alldata.rt_price_1m_vec,
|
&alldata.rt_price_30m_vec,
|
||||||
// )
|
)
|
||||||
// .await?;
|
.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 = true;
|
||||||
// if let Some(heatmap_volume_vec) = heatmap_volumes.get(symbol) {
|
if let (Some(heatmap_volume_vec), Some(rt_price_vec)) = (heatmap_volumes.get(symbol), alldata.rt_price_30m_vec.get(symbol)) {
|
||||||
// if heatmap_volume_vec.len() > 100
|
if heatmap_volume_vec.len() > 100
|
||||||
// && heatmap_volume_vec.last().unwrap().close_time > server_epoch
|
&& heatmap_volume_vec.last().unwrap().close_time > server_epoch
|
||||||
// && (heatmap_volume_vec.last().unwrap().heatmap_level == HeatMapLevel::ExtraHigh || heatmap_volume_vec.last().unwrap().heatmap_level == HeatMapLevel::High
|
&& ((heatmap_volume_vec.last().unwrap().heatmap_level == HeatMapLevel::ExtraHigh && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec.last().unwrap().close_time).is_some_and(|x| x.candle_type == CandleType::DOWN))
|
||||||
// || heatmap_volume_vec[heatmap_volume_vec.len()-2].heatmap_level == HeatMapLevel::ExtraHigh || heatmap_volume_vec[heatmap_volume_vec.len()-2].heatmap_level == HeatMapLevel::High
|
|| (heatmap_volume_vec[heatmap_volume_vec.len()-2].heatmap_level == HeatMapLevel::ExtraHigh && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec[heatmap_volume_vec.len()-2].close_time).is_some_and(|x| x.candle_type == CandleType::DOWN))
|
||||||
// || heatmap_volume_vec[heatmap_volume_vec.len()-3].heatmap_level == HeatMapLevel::ExtraHigh || heatmap_volume_vec[heatmap_volume_vec.len()-3].heatmap_level == HeatMapLevel::High
|
|| (heatmap_volume_vec[heatmap_volume_vec.len()-3].heatmap_level == HeatMapLevel::ExtraHigh && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec[heatmap_volume_vec.len()-3].close_time).is_some_and(|x| x.candle_type == CandleType::DOWN))
|
||||||
// || heatmap_volume_vec[heatmap_volume_vec.len()-4].heatmap_level == HeatMapLevel::ExtraHigh || heatmap_volume_vec[heatmap_volume_vec.len()-4].heatmap_level == HeatMapLevel::High)
|
|| (heatmap_volume_vec[heatmap_volume_vec.len()-4].heatmap_level == HeatMapLevel::ExtraHigh && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec[heatmap_volume_vec.len()-4].close_time).is_some_and(|x| x.candle_type == CandleType::DOWN))
|
||||||
// {
|
|| (heatmap_volume_vec[heatmap_volume_vec.len()-5].heatmap_level == HeatMapLevel::ExtraHigh) && rt_price_vec.iter().find(|x| x.close_time == heatmap_volume_vec[heatmap_volume_vec.len()-5].close_time).is_some_and(|x| x.candle_type == CandleType::DOWN))
|
||||||
// do_buy = true;
|
{
|
||||||
// }
|
do_buy = false;
|
||||||
// }
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// if do_buy == false {
|
if do_buy == false {
|
||||||
// keys_to_remove.insert(symbol.clone());
|
keys_to_remove.insert(symbol.clone());
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// remove_keys(&mut filtered_data, keys_to_remove).await;
|
remove_keys(&mut filtered_data, keys_to_remove).await;
|
||||||
|
|
||||||
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
// let mut keys_to_remove: HashSet<String> = HashSet::new();
|
||||||
// let server_epoch = get_server_epoch().await;
|
// let server_epoch = get_server_epoch().await;
|
||||||
|
|
@ -397,12 +405,24 @@ pub async fn list_up_for_sell(all_data: &AllData, futures_exchange_info_map: &Ha
|
||||||
// } 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
|
// } else
|
||||||
if lr_vec.last().unwrap().r_squared >= 0.55 {
|
if element.pure_profit_percent.is_sign_positive() && lr_vec[lr_vec.len()-2].r_squared >= 0.60 {
|
||||||
|
is_sell = true;
|
||||||
|
} else if server_epoch - element.close_time > 900_000
|
||||||
|
&& lr_vec[lr_vec.len()-1].lr_value > lr_vec[lr_vec.len()-2].lr_value {
|
||||||
|
is_sell = true;
|
||||||
|
} else if server_epoch - element.close_time > 900_000
|
||||||
|
&& lr_vec[lr_vec.len()-1].r_squared < lr_vec[lr_vec.len()-2].r_squared
|
||||||
|
&& lr_vec[lr_vec.len()-2].r_squared > lr_vec[lr_vec.len()-3].r_squared
|
||||||
|
&& lr_vec[lr_vec.len()-3].r_squared > lr_vec[lr_vec.len()-4].r_squared {
|
||||||
|
is_sell = true;
|
||||||
|
} else if element.pure_profit_percent <= -0.8 {
|
||||||
|
is_sell = true;
|
||||||
|
} else if element.pure_profit_percent >= 2.0 {
|
||||||
is_sell = true;
|
is_sell = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let minimum_candles = 5;
|
let minimum_candles = 5;
|
||||||
let maximum_candles = 6;
|
let maximum_candles = 20;
|
||||||
// for count_candles in minimum_candles..=maximum_candles {
|
// for count_candles in minimum_candles..=maximum_candles {
|
||||||
// if count_candles < maximum_candles
|
// if count_candles < maximum_candles
|
||||||
// && server_epoch - element.transact_time
|
// && server_epoch - element.transact_time
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user