Change set_unit_usdt() for Simulation

This commit is contained in:
Sik Yoon 2023-10-04 20:10:05 +09:00
parent 13f1e59e7a
commit 9d7e001860

View File

@ -10,6 +10,7 @@ use rust_decimal::{prelude::ToPrimitive, Decimal, RoundingStrategy};
use rust_decimal_macros::dec; use rust_decimal_macros::dec;
use serde_json::{Result, Value}; use serde_json::{Result, Value};
use sqlx::FromRow; use sqlx::FromRow;
use crate::coex::order_team::DBlist;
#[derive(Debug, FromRow)] #[derive(Debug, FromRow)]
pub struct AssetInfo { pub struct AssetInfo {
@ -23,6 +24,22 @@ pub struct AssetInfo {
pub unit_trade_usdt: Decimal, 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)] #[derive(Debug, FromRow)]
pub struct WalletInfo { pub struct WalletInfo {
pub asset: String, pub asset: String,
@ -30,19 +47,37 @@ pub struct WalletInfo {
pub locked: Decimal, 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 // set unit_trade_usdt
pub async fn set_unit_usdt() { pub async fn set_unit_usdt() {
let asset_info = select_asset_manage_announcement().await; let asset_info = select_asset_manage_announcement().await;
let mut set_unit_trade_usdt = Decimal::new(0, 8); let mut set_unit_trade_usdt = Decimal::new(0, 8);
if RUNNING_MODE == SIMUL {
set_unit_trade_usdt = dec!(100.0); // $100 for each trade
} else if RUNNING_MODE == REAL {
// define protect_rate and unit_trade_usdt as high as total_usdt_amount // 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 dec!(0.0) <= asset_info.current_total_usdt && asset_info.current_total_usdt < dec!(1000.0) {
set_unit_trade_usdt = dec!(100.0); // $100 for each trade 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 // 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 } 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 = dec!(150.0); // $150 for each trade
set_unit_trade_usdt = decimal_mul(asset_info.current_total_usdt, dec!(0.1)); 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 truncated = decimal_mul(decimal_mul(set_unit_trade_usdt, dec!(0.1)).trunc(), dec!(10));
let difference = decimal_sub(set_unit_trade_usdt, truncated); let difference = decimal_sub(set_unit_trade_usdt, truncated);
@ -52,6 +87,8 @@ pub async fn set_unit_usdt() {
set_unit_trade_usdt = truncated; set_unit_trade_usdt = truncated;
} }
} }
}
}
// update fields in [asset_manage_announcement] table // update fields in [asset_manage_announcement] table
let update_table_name = String::from("asset_manage_announcement"); let update_table_name = String::from("asset_manage_announcement");
@ -396,11 +433,7 @@ pub async fn select_asset_manage_announcement() -> AssetInfo {
// fetch free usdt from wallet // fetch free usdt from wallet
pub async fn fetch_free_usdt() -> Decimal { pub async fn fetch_free_usdt() -> Decimal {
let wallet_info = WalletInfo { let wallet_info = WalletInfo::new();
asset: String::new(),
free: Decimal::new(0, 8),
locked: Decimal::new(0, 8),
};
let select_table_name = { let select_table_name = {
if RUNNING_MODE == SIMUL || RUNNING_MODE == REAL { if RUNNING_MODE == SIMUL || RUNNING_MODE == REAL {
String::from("wallet") String::from("wallet")