diff --git a/src/coex/exchange_team.rs b/src/coex/exchange_team.rs index c518b74..88dcb2e 100644 --- a/src/coex/exchange_team.rs +++ b/src/coex/exchange_team.rs @@ -160,9 +160,6 @@ pub async fn buy_coin( if !filtered_suggested_coin_vec.is_empty() { let available_usdt = get_available_usdt().await; let vec_len = Decimal::new(filtered_suggested_coin_vec.len() as i64, 0); - let weighted_unit_usdt = - (((available_usdt / vec_len).trunc() / unit_trade_usdt).trunc() * unit_trade_usdt) - .trunc(); 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); @@ -197,110 +194,50 @@ 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 order_price = element.suggested_price; - if filtered_suggested_coin_vec.len() >= 10 - && weighted_unit_usdt > unit_trade_usdt - { - // adjust regulared_unit_usdt if available number of trade are over 5. - base_qty_ordered = decimal_div(weighted_unit_usdt, order_price) + base_qty_ordered = decimal_div(unit_trade_usdt, element.suggested_price) + .round_dp_with_strategy( + lot_step_size.normalize().scale(), + RoundingStrategy::ToZero, + ); + base_qty_fee_adjusted = + decimal_mul(base_qty_ordered, decimal_sub(dec!(1), trade_fee)) .round_dp_with_strategy( - lot_step_size.normalize().scale(), + base_commission_precision, RoundingStrategy::ToZero, ); - base_qty_fee_adjusted = - decimal_mul(base_qty_ordered, decimal_sub(dec!(1), trade_fee)) + 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( + decimal_div( + decimal_mul(base_qty_fee_adjusted, element.suggested_price) .round_dp_with_strategy( - base_commission_precision, + tick_size.normalize().scale(), RoundingStrategy::ToZero, - ); - used_usdt = decimal_mul(base_qty_ordered, order_price) - .round_dp_with_strategy( - tick_size.normalize().scale(), - RoundingStrategy::ToZero, - ); - expected_pure_profit_percent = decimal_sub( - decimal_div( - decimal_mul(base_qty_fee_adjusted, order_price) - .round_dp_with_strategy( - tick_size.normalize().scale(), - RoundingStrategy::ToZero, - ), - used_usdt, - ), - dec!(1), - ) - .to_f64() - .unwrap() - * 100.0; - - if (element.registerer == 5 || element.registerer == 6) - && expected_pure_profit_percent < -0.5 - { - } else { - // order the symbol based on base_qty_ordered and current_price - limit_order_buy( - element, - exchange_info_vec, - trade_fee, - TimeInForce::Gtc, - order_price, - base_qty_ordered, - used_usdt, - &base_qty_fee_adjusted.to_string(), - &client, - ) - .await; - } - } else { - base_qty_ordered = decimal_div(unit_trade_usdt, order_price) - .round_dp_with_strategy( - lot_step_size.normalize().scale(), - RoundingStrategy::ToZero, - ); - base_qty_fee_adjusted = - decimal_mul(base_qty_ordered, decimal_sub(dec!(1), trade_fee)) - .round_dp_with_strategy( - base_commission_precision, - RoundingStrategy::ToZero, - ); - used_usdt = decimal_mul(base_qty_ordered, order_price) - .round_dp_with_strategy( - tick_size.normalize().scale(), - RoundingStrategy::ToZero, - ); - expected_pure_profit_percent = decimal_sub( - decimal_div( - decimal_mul(base_qty_fee_adjusted, order_price) - .round_dp_with_strategy( - tick_size.normalize().scale(), - RoundingStrategy::ToZero, - ), - used_usdt, - ), - dec!(1), - ) - .to_f64() - .unwrap() - * 100.0; - if (element.registerer == 5 || element.registerer == 6) - && expected_pure_profit_percent < -0.5 - { - } else { - // order the symbol based on base_qty_ordered and current_price - limit_order_buy( - element, - exchange_info_vec, - trade_fee, - TimeInForce::Gtc, - order_price, - base_qty_ordered, - used_usdt, - &base_qty_fee_adjusted.to_string(), - &client, - ) - .await; - } - } + ), + used_usdt, + ), + dec!(1), + ) + .to_f64() + .unwrap() + * 100.0; + + // order the symbol based on base_qty_ordered and current_price + limit_order_buy( + element, + exchange_info_vec, + trade_fee, + TimeInForce::Gtc, + element.suggested_price, + base_qty_ordered, + used_usdt, + &base_qty_fee_adjusted.to_string(), + &client, + ) + .await; set_is_tradable().await; is_tradable = get_is_tradable().await;