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 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,26 +47,46 @@ 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 difference >= dec!(5) {
set_unit_trade_usdt = decimal_add(truncated, dec!(5));
} else {
set_unit_trade_usdt = truncated;
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;
}
}
}
}
@ -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")