Make closed positions moved to new table
This commit is contained in:
parent
62fad62a4d
commit
65f523eee1
|
|
@ -339,3 +339,92 @@ pub async fn select_listuped_positions() -> Result<Vec<PositionCoinList>, Box<dy
|
||||||
Err("error")?
|
Err("error")?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn select_closed_positions() -> Result<Vec<PositionCoinList>, Box<dyn std::error::Error + Send + Sync>> {
|
||||||
|
let select_table_name = String::from("future_ordered_coin_list");
|
||||||
|
let select_columns = String::from("*");
|
||||||
|
let mut select_condition_build = String::from("WHERE order_type = 'CLOSING' AND status = 'FILLED'");
|
||||||
|
|
||||||
|
let select_condition = Some(select_condition_build);
|
||||||
|
|
||||||
|
let data_struct = PositionCoinList::new();
|
||||||
|
|
||||||
|
let select_result = try_select_record(
|
||||||
|
&select_table_name,
|
||||||
|
&select_columns,
|
||||||
|
&select_condition,
|
||||||
|
&data_struct,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
if select_result.is_ok() {
|
||||||
|
Ok(select_result.unwrap())
|
||||||
|
} else {
|
||||||
|
eprint!("select_listup_positions() error!");
|
||||||
|
Err("error")?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn move_closed_positions() {
|
||||||
|
let closed_positions = select_closed_positions().await.unwrap();
|
||||||
|
|
||||||
|
if closed_positions.len() != 0 {
|
||||||
|
let delete_table_name = String::from("future_ordered_coin_list");
|
||||||
|
let insert_table_name = String::from("future_closed_coin_list");
|
||||||
|
let insert_columns = vec![
|
||||||
|
"order_type",
|
||||||
|
"status",
|
||||||
|
"symbol",
|
||||||
|
"order_id",
|
||||||
|
"position",
|
||||||
|
"registered_server_epoch",
|
||||||
|
"transact_time",
|
||||||
|
"close_time",
|
||||||
|
"used_usdt",
|
||||||
|
"expected_get_usdt",
|
||||||
|
"pnl",
|
||||||
|
"entry_price",
|
||||||
|
"current_price",
|
||||||
|
"target_percent",
|
||||||
|
"stoploss_percent",
|
||||||
|
"base_qty_ordered",
|
||||||
|
"pure_profit_percent",
|
||||||
|
"minimum_profit_percent",
|
||||||
|
"maximum_profit_percent",
|
||||||
|
];
|
||||||
|
|
||||||
|
for element in closed_positions {
|
||||||
|
let mut insert_values = vec![
|
||||||
|
element.order_type.to_string(), // order_type
|
||||||
|
element.status, // status
|
||||||
|
element.symbol, // symbol
|
||||||
|
element.order_id.to_string(), // order_id
|
||||||
|
element.position.to_string(), // position
|
||||||
|
element.registered_server_epoch.to_string(),// registered_server_epoch
|
||||||
|
element.transact_time.to_string(), // transact_time
|
||||||
|
element.close_time.to_string(), // close_time
|
||||||
|
element.used_usdt.to_string(), // used_usdt
|
||||||
|
element.expected_get_usdt.to_string(), // expected_get_usdt
|
||||||
|
element.pnl.to_string(), // pnl
|
||||||
|
element.entry_price.to_string(), // entry_price
|
||||||
|
element.current_price.to_string(), // current_price
|
||||||
|
element.target_percent.to_string(), // target_percent
|
||||||
|
element.stoploss_percent.to_string(), // stoploss_percent
|
||||||
|
element.base_qty_ordered.to_string(), // base_qty_ordered
|
||||||
|
element.pure_profit_percent.to_string(), // pure_profit_percent
|
||||||
|
element.minimum_profit_percent.to_string(), // minimum_profit_percent
|
||||||
|
element.maximum_profit_percent.to_string(), // maximum_profit_percent
|
||||||
|
];
|
||||||
|
|
||||||
|
insert_one_record(&insert_table_name, &insert_columns, &insert_values).await;
|
||||||
|
|
||||||
|
let mut condition_build = String::from("WHERE id = ");
|
||||||
|
condition_build.push_str(element.id.to_string().as_str());
|
||||||
|
// condition_build.push_str(" AND symbol = \'");
|
||||||
|
// condition_build.push_str(element.symbol.as_str());
|
||||||
|
// condition_build.push('\'');
|
||||||
|
delete_record(&delete_table_name, &condition_build).await;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
26
src/main.rs
26
src/main.rs
|
|
@ -1569,6 +1569,32 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Task#XX: move closed positions
|
||||||
|
tokio::task::spawn(async move {
|
||||||
|
sleep(Duration::from_secs(20)).await;
|
||||||
|
let mut elapsed_time = 0;
|
||||||
|
loop {
|
||||||
|
let instant = Instant::now();
|
||||||
|
|
||||||
|
let result = future::table_mgmt::move_closed_positions().await;
|
||||||
|
|
||||||
|
// send Task#0 a message to notify running on
|
||||||
|
// match result {
|
||||||
|
// Ok(T) => {
|
||||||
|
// }
|
||||||
|
// Err(E) => {}
|
||||||
|
// }
|
||||||
|
|
||||||
|
// sleep as much as the loop recurs per 1 second if all operation finished within 1 second.
|
||||||
|
elapsed_time = instant.elapsed().as_millis();
|
||||||
|
|
||||||
|
if 100 > elapsed_time {
|
||||||
|
sleep(Duration::from_millis((100 - elapsed_time) as u64)).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
loop {}
|
loop {}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user