Change filtering
This commit is contained in:
parent
d559e51c25
commit
5858b97667
|
|
@ -66,6 +66,7 @@ pub struct BuyOrderedCoinList {
|
||||||
pub pure_profit_percent: f64,
|
pub pure_profit_percent: f64,
|
||||||
pub minimum_profit_percent: f64,
|
pub minimum_profit_percent: f64,
|
||||||
pub maximum_profit_percent: f64,
|
pub maximum_profit_percent: f64,
|
||||||
|
pub sell_count: u16,
|
||||||
pub registerer: u16,
|
pub registerer: u16,
|
||||||
pub is_long: u8,
|
pub is_long: u8,
|
||||||
}
|
}
|
||||||
|
|
@ -89,6 +90,7 @@ pub struct SellOrderedCoinList {
|
||||||
pub base_qty_ordered: Decimal,
|
pub base_qty_ordered: Decimal,
|
||||||
pub pure_profit_percent: Decimal,
|
pub pure_profit_percent: Decimal,
|
||||||
pub maximum_profit_percent: f64,
|
pub maximum_profit_percent: f64,
|
||||||
|
pub sell_count: u16,
|
||||||
pub registerer: u16,
|
pub registerer: u16,
|
||||||
pub is_long: u8,
|
pub is_long: u8,
|
||||||
}
|
}
|
||||||
|
|
@ -132,6 +134,7 @@ impl DBlist for SellOrderedCoinList {
|
||||||
base_qty_ordered: Decimal::new(0, 8),
|
base_qty_ordered: Decimal::new(0, 8),
|
||||||
pure_profit_percent: Decimal::new(0, 8),
|
pure_profit_percent: Decimal::new(0, 8),
|
||||||
maximum_profit_percent: 0.0,
|
maximum_profit_percent: 0.0,
|
||||||
|
sell_count: 0,
|
||||||
registerer: 0,
|
registerer: 0,
|
||||||
is_long: 0,
|
is_long: 0,
|
||||||
};
|
};
|
||||||
|
|
@ -160,6 +163,7 @@ impl DBlist for BuyOrderedCoinList {
|
||||||
pure_profit_percent: 0.0,
|
pure_profit_percent: 0.0,
|
||||||
minimum_profit_percent: 0.0,
|
minimum_profit_percent: 0.0,
|
||||||
maximum_profit_percent: 0.0,
|
maximum_profit_percent: 0.0,
|
||||||
|
sell_count: 0,
|
||||||
registerer: 0,
|
registerer: 0,
|
||||||
is_long: 0,
|
is_long: 0,
|
||||||
};
|
};
|
||||||
|
|
@ -326,6 +330,7 @@ pub async fn limit_order_buy(
|
||||||
"pure_profit_percent",
|
"pure_profit_percent",
|
||||||
"minimum_profit_percent",
|
"minimum_profit_percent",
|
||||||
"maximum_profit_percent",
|
"maximum_profit_percent",
|
||||||
|
"sell_count",
|
||||||
"registerer",
|
"registerer",
|
||||||
"is_long",
|
"is_long",
|
||||||
];
|
];
|
||||||
|
|
@ -350,6 +355,7 @@ pub async fn limit_order_buy(
|
||||||
insert_value_container.push(0.0.to_string()); // pure_profit_percent
|
insert_value_container.push(0.0.to_string()); // pure_profit_percent
|
||||||
insert_value_container.push(0.0.to_string()); // minimum_profit_percent
|
insert_value_container.push(0.0.to_string()); // minimum_profit_percent
|
||||||
insert_value_container.push(0.0.to_string()); // maximum_profit_percent
|
insert_value_container.push(0.0.to_string()); // maximum_profit_percent
|
||||||
|
insert_value_container.push(0.to_string()); // registerer
|
||||||
insert_value_container.push(element.registerer.to_string()); // registerer
|
insert_value_container.push(element.registerer.to_string()); // registerer
|
||||||
insert_value_container.push(0.to_string()); // is_long
|
insert_value_container.push(0.to_string()); // is_long
|
||||||
|
|
||||||
|
|
@ -480,6 +486,7 @@ pub async fn limit_order_buy(
|
||||||
insert_value_container.push(0.0.to_string()); // pure_profit_percent
|
insert_value_container.push(0.0.to_string()); // pure_profit_percent
|
||||||
insert_value_container.push(0.0.to_string()); // minimum_profit_percent
|
insert_value_container.push(0.0.to_string()); // minimum_profit_percent
|
||||||
insert_value_container.push(0.0.to_string()); // maximum_profit_percent
|
insert_value_container.push(0.0.to_string()); // maximum_profit_percent
|
||||||
|
insert_value_container.push(0.to_string()); // sell_count
|
||||||
insert_value_container.push(element.registerer.to_string()); // registerer
|
insert_value_container.push(element.registerer.to_string()); // registerer
|
||||||
insert_value_container.push(0.to_string()); // is_long
|
insert_value_container.push(0.to_string()); // is_long
|
||||||
|
|
||||||
|
|
@ -718,6 +725,7 @@ pub async fn limit_order_sell(
|
||||||
"base_qty_ordered",
|
"base_qty_ordered",
|
||||||
"pure_profit_percent",
|
"pure_profit_percent",
|
||||||
"maximum_profit_percent",
|
"maximum_profit_percent",
|
||||||
|
"sell_count",
|
||||||
"registerer",
|
"registerer",
|
||||||
"is_long",
|
"is_long",
|
||||||
];
|
];
|
||||||
|
|
@ -1337,6 +1345,7 @@ pub async fn cancel_sell_order(
|
||||||
"pure_profit_percent",
|
"pure_profit_percent",
|
||||||
"minimum_profit_percent",
|
"minimum_profit_percent",
|
||||||
"maximum_profit_percent",
|
"maximum_profit_percent",
|
||||||
|
"sell_count",
|
||||||
"registerer",
|
"registerer",
|
||||||
"is_long",
|
"is_long",
|
||||||
];
|
];
|
||||||
|
|
@ -1381,6 +1390,7 @@ pub async fn cancel_sell_order(
|
||||||
insert_value_container.push(0.0.to_string()); // pure_profit_percent
|
insert_value_container.push(0.0.to_string()); // pure_profit_percent
|
||||||
insert_value_container.push(0.0.to_string()); // minimum_profit_percent
|
insert_value_container.push(0.0.to_string()); // minimum_profit_percent
|
||||||
insert_value_container.push(order.maximum_profit_percent.to_string()); // maximum_profit_percent
|
insert_value_container.push(order.maximum_profit_percent.to_string()); // maximum_profit_percent
|
||||||
|
insert_value_container.push(order.sell_count.to_string()); // sell_count
|
||||||
insert_value_container.push(order.registerer.to_string()); // registerer
|
insert_value_container.push(order.registerer.to_string()); // registerer
|
||||||
insert_value_container.push(order.is_long.to_string()); // is_long
|
insert_value_container.push(order.is_long.to_string()); // is_long
|
||||||
|
|
||||||
|
|
@ -1531,6 +1541,7 @@ pub async fn cancel_sell_order(
|
||||||
insert_value_container.push(0.0.to_string()); // pure_profit_percent
|
insert_value_container.push(0.0.to_string()); // pure_profit_percent
|
||||||
insert_value_container.push(0.0.to_string()); // minimum_profit_percent
|
insert_value_container.push(0.0.to_string()); // minimum_profit_percent
|
||||||
insert_value_container.push(0.0.to_string()); // maximum_profit_percent
|
insert_value_container.push(0.0.to_string()); // maximum_profit_percent
|
||||||
|
insert_value_container.push(order.sell_count.to_string()); // sell_count
|
||||||
insert_value_container.push(order.registerer.to_string()); // registerer
|
insert_value_container.push(order.registerer.to_string()); // registerer
|
||||||
insert_value_container.push(order.is_long.to_string()); // is_long
|
insert_value_container.push(order.is_long.to_string()); // is_long
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ use super::{
|
||||||
dec, decimal_add, decimal_sub, ema, exists_record, insert_pre_suggested_coins,
|
dec, decimal_add, decimal_sub, ema, exists_record, insert_pre_suggested_coins,
|
||||||
limit_order_sell, rsi, select_filled_buy_orders, stoch_rsi, supertrend, try_join_all, AllData,
|
limit_order_sell, rsi, select_filled_buy_orders, stoch_rsi, supertrend, try_join_all, AllData,
|
||||||
Arc, Client, ClientBuilder, Decimal, EmaData, ExchangeInfo, FilteredData, Mutex,
|
Arc, Client, ClientBuilder, Decimal, EmaData, ExchangeInfo, FilteredData, Mutex,
|
||||||
RealtimePriceData, RoundingStrategy, RsiData, StochRsiData, SupertrendData, TradeFee, update_record3, adx, AdxData, server_epoch
|
RealtimePriceData, RoundingStrategy, RsiData, StochRsiData, SupertrendData, TradeFee, update_record3, adx, AdxData, server_epoch, MacdData, ema_macd
|
||||||
};
|
};
|
||||||
|
|
||||||
// Triple SuperTrend strategy
|
// Triple SuperTrend strategy
|
||||||
|
|
@ -168,42 +168,32 @@ pub async fn list_up_for_buy(
|
||||||
}
|
}
|
||||||
try_join_all(task_vec).await?;
|
try_join_all(task_vec).await?;
|
||||||
|
|
||||||
// 4th filtering: supertrend(ATR period 3, multiplier: 1.05, 1d close price), the area should be in UP area.
|
// 4th filtering: MACD 1d (fast:3, slow:7, smoothing:3) MACD > signal
|
||||||
let filtered_data_3rd = filtered_data_3rd_arc.lock().await.clone();
|
let filtered_data_3rd = filtered_data_3rd_arc.lock().await.clone();
|
||||||
let mut filtered_data_4th: Vec<FilteredData> = Vec::new();
|
let mut filtered_data_4th: Vec<FilteredData> = Vec::new();
|
||||||
let mut filtered_data_4th_arc: Arc<Mutex<Vec<FilteredData>>> =
|
let mut filtered_data_4th_arc: Arc<Mutex<Vec<FilteredData>>> =
|
||||||
Arc::new(Mutex::new(filtered_data_4th));
|
Arc::new(Mutex::new(filtered_data_4th));
|
||||||
let mut task_vec = Vec::new();
|
let mut task_vec = Vec::new();
|
||||||
let valid_symbol_vec_c = alldata.valid_symbol_vec.clone();
|
let macd_vec = ema_macd(3, 7, 3, &alldata.rt_price_1d_vec, &filtered_data_3rd).await?;
|
||||||
for element in filtered_data_3rd {
|
for element in filtered_data_3rd {
|
||||||
let mut opclo_1d_vec: Vec<RealtimePriceData> = Vec::new();
|
let mut opclo_1d_vec: Vec<RealtimePriceData> = Vec::new();
|
||||||
let mut supertrend_vec: Vec<SupertrendData> = Vec::new();
|
let mut supertrend_vec: Vec<SupertrendData> = Vec::new();
|
||||||
let rt_price_1d_vec_c = alldata.rt_price_1d_vec.clone();
|
let macd_vec_c = macd_vec.clone();
|
||||||
let filtered_data_4th_arc_c = Arc::clone(&filtered_data_4th_arc);
|
let filtered_data_4th_arc_c = Arc::clone(&filtered_data_4th_arc);
|
||||||
task_vec.push(tokio::spawn(async move {
|
task_vec.push(tokio::spawn(async move {
|
||||||
let supertrend_option_1d =
|
let search_result = macd_vec_c.iter().position(|x| x.0 == element.symbol);
|
||||||
supertrend(&element.symbol, &rt_price_1d_vec_c, 3, 1.05, true).await;
|
|
||||||
|
|
||||||
if supertrend_option_1d.is_some() {
|
if search_result.is_some_and(|a| macd_vec_c[a].1.last().unwrap().macd_value > macd_vec_c[a].1.last().unwrap().signal_value) {
|
||||||
supertrend_vec = supertrend_option_1d.unwrap();
|
let mut filtered_4th_symbols_lock =
|
||||||
|
filtered_data_4th_arc_c.lock().await;
|
||||||
|
let mut filtered_data = FilteredData::new();
|
||||||
|
filtered_data.symbol = element.symbol.clone();
|
||||||
|
filtered_data.closetime = element.closetime;
|
||||||
|
filtered_data.current_price = element.current_price;
|
||||||
|
filtered_data.stoploss = element.stoploss;
|
||||||
|
filtered_data.target_price = element.target_price;
|
||||||
|
|
||||||
if supertrend_vec.len() >= 3 {
|
filtered_4th_symbols_lock.push(filtered_data);
|
||||||
if supertrend_vec.last().unwrap()
|
|
||||||
.area
|
|
||||||
.contains("UP")
|
|
||||||
{
|
|
||||||
let mut filtered_4th_symbols_lock =
|
|
||||||
filtered_data_4th_arc_c.lock().await;
|
|
||||||
let mut filtered_data = FilteredData::new();
|
|
||||||
filtered_data.symbol = element.symbol.clone();
|
|
||||||
filtered_data.closetime = element.closetime;
|
|
||||||
filtered_data.current_price = element.current_price;
|
|
||||||
filtered_data.stoploss = element.stoploss;
|
|
||||||
filtered_data.target_price = element.target_price;
|
|
||||||
|
|
||||||
filtered_4th_symbols_lock.push(filtered_data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ use super::{
|
||||||
dec, decimal_add, decimal_sub, ema, exists_record, insert_pre_suggested_coins,
|
dec, decimal_add, decimal_sub, ema, exists_record, insert_pre_suggested_coins,
|
||||||
limit_order_sell, rsi, select_filled_buy_orders, stoch_rsi, supertrend, try_join_all, AllData,
|
limit_order_sell, rsi, select_filled_buy_orders, stoch_rsi, supertrend, try_join_all, AllData,
|
||||||
Arc, Client, ClientBuilder, Decimal, EmaData, ExchangeInfo, FilteredData, Mutex,
|
Arc, Client, ClientBuilder, Decimal, EmaData, ExchangeInfo, FilteredData, Mutex,
|
||||||
RealtimePriceData, RoundingStrategy, RsiData, StochRsiData, SupertrendData, TradeFee, update_record3, adx, AdxData, server_epoch
|
RealtimePriceData, RoundingStrategy, RsiData, StochRsiData, SupertrendData, TradeFee, update_record3, adx, AdxData, server_epoch, MacdData, ema_macd
|
||||||
};
|
};
|
||||||
|
|
||||||
// Triple SuperTrend strategy
|
// Triple SuperTrend strategy
|
||||||
|
|
@ -176,42 +176,32 @@ pub async fn list_up_for_buy(
|
||||||
}
|
}
|
||||||
try_join_all(task_vec).await?;
|
try_join_all(task_vec).await?;
|
||||||
|
|
||||||
// 4th filtering: supertrend(ATR period 3, multiplier: 1.05, 1d close price), the area should be in UP area.
|
// 4th filtering: MACD 1d (fast:3, slow:7, smoothing:3) MACD > signal
|
||||||
let filtered_data_3rd = filtered_data_3rd_arc.lock().await.clone();
|
let filtered_data_3rd = filtered_data_3rd_arc.lock().await.clone();
|
||||||
let mut filtered_data_4th: Vec<FilteredData> = Vec::new();
|
let mut filtered_data_4th: Vec<FilteredData> = Vec::new();
|
||||||
let mut filtered_data_4th_arc: Arc<Mutex<Vec<FilteredData>>> =
|
let mut filtered_data_4th_arc: Arc<Mutex<Vec<FilteredData>>> =
|
||||||
Arc::new(Mutex::new(filtered_data_4th));
|
Arc::new(Mutex::new(filtered_data_4th));
|
||||||
let mut task_vec = Vec::new();
|
let mut task_vec = Vec::new();
|
||||||
let valid_symbol_vec_c = alldata.valid_symbol_vec.clone();
|
let macd_vec = ema_macd(3, 7, 3, &alldata.rt_price_1d_vec, &filtered_data_3rd).await?;
|
||||||
for element in filtered_data_3rd {
|
for element in filtered_data_3rd {
|
||||||
let mut opclo_1d_vec: Vec<RealtimePriceData> = Vec::new();
|
let mut opclo_1d_vec: Vec<RealtimePriceData> = Vec::new();
|
||||||
let mut supertrend_vec: Vec<SupertrendData> = Vec::new();
|
let mut supertrend_vec: Vec<SupertrendData> = Vec::new();
|
||||||
let rt_price_1d_vec_c = alldata.rt_price_1d_vec.clone();
|
let macd_vec_c = macd_vec.clone();
|
||||||
let filtered_data_4th_arc_c = Arc::clone(&filtered_data_4th_arc);
|
let filtered_data_4th_arc_c = Arc::clone(&filtered_data_4th_arc);
|
||||||
task_vec.push(tokio::spawn(async move {
|
task_vec.push(tokio::spawn(async move {
|
||||||
let supertrend_option_1d =
|
let search_result = macd_vec_c.iter().position(|x| x.0 == element.symbol);
|
||||||
supertrend(&element.symbol, &rt_price_1d_vec_c, 3, 1.05, true).await;
|
|
||||||
|
|
||||||
if supertrend_option_1d.is_some() {
|
if search_result.is_some_and(|a| macd_vec_c[a].1.last().unwrap().macd_value > macd_vec_c[a].1.last().unwrap().signal_value) {
|
||||||
supertrend_vec = supertrend_option_1d.unwrap();
|
let mut filtered_4th_symbols_lock =
|
||||||
|
filtered_data_4th_arc_c.lock().await;
|
||||||
|
let mut filtered_data = FilteredData::new();
|
||||||
|
filtered_data.symbol = element.symbol.clone();
|
||||||
|
filtered_data.closetime = element.closetime;
|
||||||
|
filtered_data.current_price = element.current_price;
|
||||||
|
filtered_data.stoploss = element.stoploss;
|
||||||
|
filtered_data.target_price = element.target_price;
|
||||||
|
|
||||||
if supertrend_vec.len() >= 3 {
|
filtered_4th_symbols_lock.push(filtered_data);
|
||||||
if supertrend_vec.last().unwrap()
|
|
||||||
.area
|
|
||||||
.contains("UP")
|
|
||||||
{
|
|
||||||
let mut filtered_4th_symbols_lock =
|
|
||||||
filtered_data_4th_arc_c.lock().await;
|
|
||||||
let mut filtered_data = FilteredData::new();
|
|
||||||
filtered_data.symbol = element.symbol.clone();
|
|
||||||
filtered_data.closetime = element.closetime;
|
|
||||||
filtered_data.current_price = element.current_price;
|
|
||||||
filtered_data.stoploss = element.stoploss;
|
|
||||||
filtered_data.target_price = element.target_price;
|
|
||||||
|
|
||||||
filtered_4th_symbols_lock.push(filtered_data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ pub async fn execute_list_up_for_buy(
|
||||||
// let all_data_c4 = all_data.clone();
|
// let all_data_c4 = all_data.clone();
|
||||||
let all_data_c5 = all_data.clone();
|
let all_data_c5 = all_data.clone();
|
||||||
let all_data_c6 = all_data.clone();
|
let all_data_c6 = all_data.clone();
|
||||||
let all_data_ct = all_data.clone();
|
|
||||||
// strategist_001(all_data).await?;
|
// strategist_001(all_data).await?;
|
||||||
// strategist_002(all_data).await?;
|
// strategist_002(all_data).await?;
|
||||||
// task_vec.push(tokio::spawn(async move {
|
// task_vec.push(tokio::spawn(async move {
|
||||||
|
|
@ -52,9 +52,10 @@ pub async fn execute_list_up_for_buy(
|
||||||
task_vec.push(tokio::spawn(async move {
|
task_vec.push(tokio::spawn(async move {
|
||||||
crate::strategy_team::strategy_006::list_up_for_buy(all_data_c6).await;
|
crate::strategy_team::strategy_006::list_up_for_buy(all_data_c6).await;
|
||||||
}));
|
}));
|
||||||
task_vec.push(tokio::spawn(async move {
|
// let all_data_ct = all_data.clone();
|
||||||
crate::strategy_team::strategy_test::strategist_test(all_data_ct).await;
|
// task_vec.push(tokio::spawn(async move {
|
||||||
}));
|
// crate::strategy_team::strategy_test::strategist_test(all_data_ct).await;
|
||||||
|
// }));
|
||||||
|
|
||||||
try_join_all(task_vec).await?;
|
try_join_all(task_vec).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user