From fdd2623fba149762191cafa9ac10a47b03a9bc0f Mon Sep 17 00:00:00 2001 From: Sik Yoon Date: Wed, 4 Oct 2023 20:13:22 +0900 Subject: [PATCH] Refactor code --- src/coex/exchange_team.rs | 210 ++++++++++++++++++++++---------------- 1 file changed, 120 insertions(+), 90 deletions(-) diff --git a/src/coex/exchange_team.rs b/src/coex/exchange_team.rs index 113907d..8663cef 100644 --- a/src/coex/exchange_team.rs +++ b/src/coex/exchange_team.rs @@ -29,6 +29,24 @@ struct PreSuggestedCoin { registerer: u16, } +impl DBlist for PreSuggestedCoin { + fn new() -> PreSuggestedCoin { + let a = PreSuggestedCoin { + id: 0, + symbol: String::new(), + close_time: 0, + suggested_price: Decimal::new(0, 8), + current_price: Decimal::new(0, 8), + registered_server_epoch: 0, + profit_percent: 0.0, + minimum_profit_percent: 0.0, + maximum_profit_percent: 0.0, + registerer: 0, + }; + a + } +} + #[derive(Debug, FromRow)] pub struct SuggestedCoin { pub id: u64, @@ -41,6 +59,22 @@ pub struct SuggestedCoin { pub already_buy: u8, } +impl DBlist for SuggestedCoin { + fn new() -> SuggestedCoin { + let a = SuggestedCoin { + id: 0, + symbol: String::new(), + suggested_price: Decimal::new(0, 8), + close_time: 0, + registered_server_epoch: 0, + registerer: 0, + is_long: 0, + already_buy: 0, + }; + a + } +} + #[derive(Debug, FromRow)] pub struct ServerEpoch { server_epoch: u64, @@ -73,6 +107,27 @@ pub struct ScoreboardList { pub neg_liquidation_signal: u32, } +impl DBlist for ScoreboardList { + fn new() -> ScoreboardList { + let a = ScoreboardList { + id: 0, + total_number_of_coin: 0, + pos_profit_number: 0, + neg_profit_number: 0, + total_used_usdt: 0.0, + pos_used_usdt: 0.0, + neg_used_usdt: 0.0, + total_pos_profit_usdt: 0.0, + total_neg_profit_usdt: 0.0, + maximum_total_pos_profit_usdt: 0.0, + avg_neg_profit_percent: 0.0, + pos_liquidation_signal: 0, + neg_liquidation_signal: 0, + }; + a + } +} + #[derive(Debug, FromRow)] pub struct EvaluationList { id: u64, @@ -90,6 +145,18 @@ pub struct IndexList { pub total_price_down_dist_index: f64, } +impl DBlist for IndexList { + fn new() -> IndexList { + let a = IndexList { + server_epoch: 0, + total_24h_change_profit_index: 0.0, + usdt_24h_change_profit_index: 0.0, + total_price_down_dist_index: 0.0, + }; + a + } +} + #[derive(Debug, FromRow)] pub struct FilteredIndexList { pub server_epoch: u64, @@ -100,6 +167,20 @@ pub struct FilteredIndexList { pub total_price_down_dist_index_flag: i32, } +impl DBlist for FilteredIndexList { + fn new() -> FilteredIndexList { + let a = FilteredIndexList { + server_epoch: 0, + total_24h_change_profit_index: 0.0, + usdt_24h_change_profit_index: 0.0, + total_price_down_dist_index: 0.0, + total_price_down_dist_index_maximum: 0.0, + total_price_down_dist_index_flag: 0, + }; + a + } +} + #[derive(Debug, FromRow, Clone)] pub struct MarketCapIndex { pub market_cap_index: f64, @@ -111,6 +192,21 @@ pub struct MarketCapIndex { pub transition_buy_signal: i8, } +impl DBlist for MarketCapIndex { + fn new() -> MarketCapIndex { + let a = MarketCapIndex { + market_cap_index: 0.0, + minimum: 0.0, + maximum: 0.0, + transition_point: 0.0, + liquidation_signal: 0, + negative_buy_signal: 0, + transition_buy_signal: 0, + }; + a + } +} + // buy coin pub async fn buy_coin( exchange_info_vec: &Vec, @@ -118,6 +214,14 @@ pub async fn buy_coin( ) -> Result<(), Box> { let mut suggested_coin = get_suggested_coin_list().await; + if exchange_info_vec.len() == 0 { + println!("exchange_info_vec length is zero in buy coin"); + } + + if trade_fee_vec.len() == 0 { + println!("trade_fee_vec length is zero in buy coin"); + } + if !suggested_coin.is_empty() && exchange_info_vec.len() != 0 && trade_fee_vec.len() != 0 { let server_epoch = server_epoch().await; let mut filtered_suggested_coin_vec: Vec<&SuggestedCoin> = Vec::new(); @@ -144,14 +248,6 @@ pub async fn buy_coin( if is_tradable == true && !filtered_suggested_coin_vec.is_empty() { let unit_trade_usdt = get_unit_trade_usdt().await; - let available_usdt = get_available_usdt().await; - let vec_len = Decimal::new(filtered_suggested_coin_vec.len() as i64, 0); - let mut used_usdt = Decimal::new(0, 8); - let mut base_qty_ordered = Decimal::new(0, 8); - let mut base_qty_fee_adjusted = Decimal::new(0, 8); - let mut expected_pure_profit_percent = 0.0; - let insert_table_name = String::from("buy_ordered_coin_list"); - let client = ClientBuilder::new() .timeout(tokio::time::Duration::from_millis(3000)) .build() @@ -184,23 +280,28 @@ pub async fn buy_coin( let trade_fee = trade_fee_result.unwrap().takercommission; // buy the suggested coin and transfer it into [buy_ordered_coin_list] + let mut base_qty_ordered = Decimal::new(0, 8); base_qty_ordered = decimal_div(unit_trade_usdt, element.suggested_price) .round_dp_with_strategy( lot_step_size.normalize().scale(), RoundingStrategy::ToZero, ); + + let mut base_qty_fee_adjusted = Decimal::new(0, 8); base_qty_fee_adjusted = decimal_mul(base_qty_ordered, decimal_sub(dec!(1), trade_fee)) .round_dp_with_strategy( base_commission_precision, RoundingStrategy::ToZero, ); + + let mut used_usdt = Decimal::new(0, 8); used_usdt = decimal_mul(base_qty_ordered, element.suggested_price) .round_dp_with_strategy( tick_size.normalize().scale(), RoundingStrategy::ToZero, ); - expected_pure_profit_percent = decimal_sub( + let expected_pure_profit_percen: f64 = decimal_sub( decimal_div( decimal_mul(base_qty_fee_adjusted, element.suggested_price) .round_dp_with_strategy( @@ -252,9 +353,11 @@ pub async fn buy_coin( delete_condition.pop(); delete_condition.push(';'); let suggested_coin_list_table_name = String::from("suggested_coin_list"); + println!("delete suggested coin list"); delete_record(&suggested_coin_list_table_name, &delete_condition) .await .unwrap(); + println!("deletion done"); } } @@ -489,7 +592,7 @@ pub async fn monitoring_scoreboard( let mut update_condition: Vec<(String, String)> = Vec::new(); let mut update_condition2: Vec<(String, String)> = Vec::new(); - let filled_buy_orders = select_filled_buy_orders().await; + let filled_buy_orders = select_filled_buy_orders().await?; if filled_buy_orders.is_empty() { // initialization of table @@ -824,18 +927,7 @@ async fn select_pre_suggested_coin_list() -> Vec { let select_table_name = String::from("pre_suggested_coin_list"); let select_columns = String::from("*"); let select_condition = None; - let select_data_structure = PreSuggestedCoin { - id: 0, - symbol: String::new(), - close_time: 0, - suggested_price: Decimal::new(0, 8), - current_price: Decimal::new(0, 8), - registered_server_epoch: 0, - profit_percent: 0.0, - minimum_profit_percent: 0.0, - maximum_profit_percent: 0.0, - registerer: 0, - }; + let select_data_structure = PreSuggestedCoin::new(); let pre_suggested_coin_list = try_select_record( &select_table_name, &select_columns, @@ -852,16 +944,7 @@ async fn get_suggested_coin_list() -> Vec { let table_name = String::from("suggested_coin_list"); let columns = String::from("*"); let condition = None; - let mut suggested_coin = SuggestedCoin { - id: 0, - symbol: String::new(), - suggested_price: Decimal::new(0, 8), - close_time: 0, - registered_server_epoch: 0, - registerer: 0, - is_long: 0, - already_buy: 0, - }; + let mut suggested_coin = SuggestedCoin::new(); let select_result = try_select_record(&table_name, &columns, &condition, &suggested_coin) .await @@ -887,26 +970,7 @@ async fn select_buy_ordered_coins() -> Vec { let table_name = String::from("buy_ordered_coin_list"); let columns = String::from("*"); let condition = None; - let mut ordered_coin = BuyOrderedCoinList { - id: 0, - symbol: String::new(), - order_id: 0, - transact_time: 0, - close_time: 0, - status: String::new(), - used_usdt: Decimal::new(0, 8), - expected_get_usdt: 0.0, - expected_usdt_profit: 0.0, - buy_price: Decimal::new(0, 8), - current_price: Decimal::new(0, 8), - base_qty_ordered: Decimal::new(0, 8), - base_qty_fee_adjusted: Decimal::new(0, 8), - pure_profit_percent: 0.0, - minimum_profit_percent: 0.0, - maximum_profit_percent: 0.0, - registerer: 0, - is_long: 0, - }; + let mut ordered_coin = BuyOrderedCoinList::new(); let select_result = select_record(&table_name, &columns, &condition, &ordered_coin) .await @@ -915,12 +979,7 @@ async fn select_buy_ordered_coins() -> Vec { } pub async fn select_indices() -> IndexList { - let mut index_list = IndexList { - server_epoch: 0, - total_24h_change_profit_index: 0.0, - usdt_24h_change_profit_index: 0.0, - total_price_down_dist_index: 0.0, - }; + let mut index_list = IndexList::new(); let select_table_name = String::from("indices"); let select_columns_name = String::from("*"); let select_condition = None; @@ -942,14 +1001,7 @@ pub async fn select_indices() -> IndexList { } pub async fn select_filtered_indices() -> FilteredIndexList { - let mut index_list = FilteredIndexList { - server_epoch: 0, - total_24h_change_profit_index: 0.0, - usdt_24h_change_profit_index: 0.0, - total_price_down_dist_index: 0.0, - total_price_down_dist_index_maximum: 0.0, - total_price_down_dist_index_flag: 0, - }; + let mut index_list = FilteredIndexList::new(); let select_table_name = String::from("filtered_indices"); let select_columns_name = String::from("*"); let select_condition = None; @@ -973,15 +1025,7 @@ pub async fn select_filtered_indices() -> FilteredIndexList { } pub async fn select_marketcap() -> Vec { - let mut market_cap_list = MarketCapIndex { - market_cap_index: 0.0, - minimum: 0.0, - maximum: 0.0, - transition_point: 0.0, - liquidation_signal: 0, - negative_buy_signal: 0, - transition_buy_signal: 0, - }; + let mut market_cap_list = MarketCapIndex::new(); let select_table_name = String::from("market_cap_index"); let select_columns_name = String::from("*"); let select_condition = None; @@ -1001,21 +1045,7 @@ pub async fn select_scoreboard() -> Vec { let select_table_name = String::from("scoreboard"); let select_columns = String::from("*"); let select_condition = None; - let mut select_data_structure = ScoreboardList { - id: 0, - total_number_of_coin: 0, - pos_profit_number: 0, - neg_profit_number: 0, - total_used_usdt: 0.0, - pos_used_usdt: 0.0, - neg_used_usdt: 0.0, - total_pos_profit_usdt: 0.0, - total_neg_profit_usdt: 0.0, - maximum_total_pos_profit_usdt: 0.0, - avg_neg_profit_percent: 0.0, - pos_liquidation_signal: 0, - neg_liquidation_signal: 0, - }; + let mut select_data_structure = ScoreboardList::new(); let scoreboard_list = select_record( &select_table_name, &select_columns,