diff --git a/src/coex/assets_managing_team.rs b/src/coex/assets_managing_team.rs index c27efff..474ea22 100644 --- a/src/coex/assets_managing_team.rs +++ b/src/coex/assets_managing_team.rs @@ -10,6 +10,7 @@ use rust_decimal::{prelude::ToPrimitive, Decimal, RoundingStrategy}; use rust_decimal_macros::dec; use serde_json::{Result, Value}; use sqlx::FromRow; +use crate::coex::order_team::DBlist; #[derive(Debug, FromRow)] pub struct AssetInfo { @@ -23,6 +24,22 @@ pub struct AssetInfo { pub unit_trade_usdt: Decimal, } +impl DBlist for AssetInfo { + fn new() -> AssetInfo { + let a = AssetInfo { + initial_usdt: Decimal::new(0, 8), + current_total_usdt: Decimal::new(0, 8), + profit: Decimal::new(0, 8), + realtime_expected_total_usdt: 0.0, + realtime_profit: 0.0, + available_usdt: Decimal::new(0, 8), + is_tradable: 0, + unit_trade_usdt: Decimal::new(0, 8), + }; + a + } +} + #[derive(Debug, FromRow)] pub struct WalletInfo { pub asset: String, @@ -30,29 +47,49 @@ pub struct WalletInfo { pub locked: Decimal, } +impl DBlist for WalletInfo { + fn new() -> WalletInfo { + let a = WalletInfo { + asset: String::new(), + free: Decimal::new(0, 8), + locked: Decimal::new(0, 8), + }; + a + } +} + // set unit_trade_usdt pub async fn set_unit_usdt() { let asset_info = select_asset_manage_announcement().await; let mut set_unit_trade_usdt = Decimal::new(0, 8); - // define protect_rate and unit_trade_usdt as high as total_usdt_amount - if dec!(0.0) <= asset_info.current_total_usdt && asset_info.current_total_usdt < dec!(1000.0) { + if RUNNING_MODE == SIMUL { set_unit_trade_usdt = dec!(100.0); // $100 for each trade - // set_unit_trade_usdt = decimal_mul(asset_info.current_total_usdt, dec!(0.8)); // 80% of total usdt - } else if dec!(1000.0) <= asset_info.current_total_usdt - { - // set_unit_trade_usdt = dec!(150.0); // $150 for each trade - set_unit_trade_usdt = decimal_mul(asset_info.current_total_usdt, dec!(0.1)); - let truncated = decimal_mul(decimal_mul(set_unit_trade_usdt, dec!(0.1)).trunc(), dec!(10)); - let difference = decimal_sub(set_unit_trade_usdt, truncated); + } else if RUNNING_MODE == REAL { + // define protect_rate and unit_trade_usdt as high as total_usdt_amount + if dec!(0.0) <= asset_info.current_total_usdt && asset_info.current_total_usdt < dec!(1000.0) { + set_unit_trade_usdt = dec!(50.0); // $100 for each trade + // set_unit_trade_usdt = decimal_mul(asset_info.current_total_usdt, dec!(0.8)); // 80% of total usdt + } else if dec!(1000.0) <= asset_info.current_total_usdt + { + // set_unit_trade_usdt = dec!(150.0); // $150 for each trade + set_unit_trade_usdt = decimal_mul(asset_info.current_total_usdt, dec!(0.05)); + + if set_unit_trade_usdt <= dec!(20) { + set_unit_trade_usdt = dec!(0); + } else { + let truncated = decimal_mul(decimal_mul(set_unit_trade_usdt, dec!(0.1)).trunc(), dec!(10)); + let difference = decimal_sub(set_unit_trade_usdt, truncated); - if difference >= dec!(5) { - set_unit_trade_usdt = decimal_add(truncated, dec!(5)); - } else { - set_unit_trade_usdt = truncated; + if difference >= dec!(5) { + set_unit_trade_usdt = decimal_add(truncated, dec!(5)); + } else { + set_unit_trade_usdt = truncated; + } + } } } - + // update fields in [asset_manage_announcement] table let update_table_name = String::from("asset_manage_announcement"); let update_values = vec![( @@ -396,11 +433,7 @@ pub async fn select_asset_manage_announcement() -> AssetInfo { // fetch free usdt from wallet pub async fn fetch_free_usdt() -> Decimal { - let wallet_info = WalletInfo { - asset: String::new(), - free: Decimal::new(0, 8), - locked: Decimal::new(0, 8), - }; + let wallet_info = WalletInfo::new(); let select_table_name = { if RUNNING_MODE == SIMUL || RUNNING_MODE == REAL { String::from("wallet")