Implement test code of closing query

This commit is contained in:
Sik Yoon 2024-05-21 14:40:52 +09:00
parent a3675db92d
commit 1e06080ce6

View File

@ -336,7 +336,7 @@ pub async fn limit_order_close(
let mut update_values = vec![]; let mut update_values = vec![];
update_values.push((String::from("order_type"), (String::from("CLOSING")))); update_values.push((String::from("order_type"), (String::from("CLOSING"))));
update_values.push((String::from("order_id"), T.get("orderId").unwrap().as_u64().unwrap().to_string())); update_values.push((String::from("order_id"), T.get("orderId").unwrap().as_u64().unwrap().to_string()));
update_values.push((String::from("transact_time"), server_epoch.to_string())); update_values.push((String::from("registered_server_epoch"), server_epoch.to_string()));
// status // status
if T.get("status").unwrap().as_str().unwrap() == "NEW" { if T.get("status").unwrap().as_str().unwrap() == "NEW" {
@ -423,6 +423,21 @@ pub async fn monitoring_unfilled_order(
let open_closing_orders = select_open_closing_orders().await; let open_closing_orders = select_open_closing_orders().await;
if !open_closing_orders.is_empty() { if !open_closing_orders.is_empty() {
let server_epoch = get_server_epoch().await;
for element in open_closing_orders {
query_open_closing_order(&element, &client).await;
}
// let orders_outdated = open_closing_orders
// .iter()
// .filter(|&element| server_epoch - element.registered_server_epoch >= 30_000)
// .collect::<Vec<&PositionCoinList>>(); // wait up to 30 secs
// let orders_to_be_queried = open_closing_orders
// .iter()
// .filter(|&element| server_epoch - element.registered_server_epoch < 30_000)
// .collect::<Vec<&PositionCoinList>>();
} }
Ok(()) Ok(())
@ -670,6 +685,117 @@ pub async fn query_open_positioning_order(
Ok(()) Ok(())
} }
pub async fn query_open_closing_order(
order: &PositionCoinList,
client: &Client,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// building URL and API-keys
let mut url = String::new();
let mut api_key = String::new();
unsafe {
if RUNNING_MODE == TEST {
url.push_str(FUTURES_URL_TEST);
api_key = API_KEY_TESTNET.to_string();
} else if RUNNING_MODE == REAL {
url.push_str(FUTURES_URL);
api_key = API_KEY.to_string();
}
}
let endpoint_url = "/fapi/v1/order?";
url.push_str(endpoint_url);
let mut url_build = String::new();
// add parameters into URL
url_build.push_str("&symbol=");
url_build.push_str(&order.symbol);
url_build.push_str("&orderId=");
url_build.push_str(order.order_id.to_string().as_str());
hmac_signature(&mut url_build).await;
url.push_str(&url_build);
let res = client
.get(&url)
.header("X-MBX-APIKEY", api_key)
.send()
.await?;
let body = res.text_with_charset("utf-8").await.unwrap();
println!("body: {}", body);
// deserialize JSON and then update record in table
let v = serde_json::from_str::<Value>(body.as_str());
// match v {
// Ok(T) => {
// if T.get("status")
// .is_some_and(|a| a.as_str().unwrap() == "FILLED")
// || T.get("status")
// .is_some_and(|a| a.as_str().unwrap() == "PARTIALLY_FILLED")
// {
// if exchange_info_map.contains_key(&order.symbol)
// && trade_fee_map.contains_key(&order.symbol)
// {
// let quote_asset_precision = exchange_info_map
// .get(&order.symbol)
// .unwrap()
// .quote_asset_precision;
// let trade_fee = trade_fee_map.get(&order.symbol).unwrap().takercommission;
// let get_usdt = rust_decimal::prelude::FromStr::from_str(
// T.get("cummulativeQuoteQty").unwrap().as_str().unwrap(),
// )
// .unwrap();
// let get_usdt_fee_adjusted =
// decimal_mul(get_usdt, decimal_sub(dec!(1), trade_fee))
// .round_dp_with_strategy(
// quote_asset_precision,
// RoundingStrategy::ToZero,
// );
// let ordered_base_qty = rust_decimal::prelude::FromStr::from_str(
// T.get("executedQty").unwrap().as_str().unwrap(),
// )
// .unwrap();
// let sell_price = decimal_div(get_usdt, ordered_base_qty)
// .round_dp_with_strategy(quote_asset_precision, RoundingStrategy::ToZero);
// let pure_profit_percent = decimal_mul(
// decimal_sub(decimal_div(get_usdt_fee_adjusted, order.used_usdt), dec!(1)),
// dec!(100),
// )
// .round_dp(2);
// let table_name = String::from("sell_ordered_coin_list");
// let mut value_build = String::from("\'");
// value_build.push_str(T.get("status").unwrap().as_str().unwrap());
// value_build.push('\'');
// let update_values = vec![
// (String::from("status"), value_build),
// (String::from("get_usdt"), get_usdt.to_string()),
// (
// String::from("get_usdt_fee_adjusted"),
// get_usdt_fee_adjusted.to_string(),
// ),
// (String::from("sell_price"), sell_price.to_string()),
// (
// String::from("pure_profit_percent"),
// pure_profit_percent.to_string(),
// ),
// ];
// let update_condition = vec![(String::from("id"), order.id.to_string())];
// update_record3(&table_name, &update_values, &update_condition)
// .await
// .unwrap();
// }
// }
// }
// Err(e) => {
// log::warn!("query sell order failed!: {}", body);
// }
// }
Ok(())
}
// //
pub async fn set_initial_leverage(symbol: &String, leverage_ratio: i32, client: &Client) -> Result<(), Box<dyn std::error::Error + Send + Sync>> { pub async fn set_initial_leverage(symbol: &String, leverage_ratio: i32, client: &Client) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// building URL and API-keys // building URL and API-keys