use crate::coex::exchange_team::*; use crate::coex::order_team::*; use crate::future::Position; use csv::{DeserializeRecordsIter, StringRecord}; use rust_decimal::prelude::ToPrimitive; use rust_decimal::Decimal; use serde::Deserialize; use crate::future::FuturesExchangeInfo; // use super::strategy_test; use super::{ exists_record, insert_one_record, try_join_all, try_select_record, AllData, ExchangeInfo, FilteredDataValue, FromRow, HashMap, RealtimePriceData, TradeFee, }; use crate::signal_association::signal_decision::*; use tokio::time::{sleep, Duration, Instant}; #[derive(Debug, FromRow)] struct ServerEpoch { server_epoch: u64, } #[derive(Debug, FromRow)] struct Record { symbol: String, suggested_price: Decimal, close_time: u64, registered_server_epoch: u64, registerer: u16, is_long: u8, } pub async fn execute_list_up_for_buy( all_data: &AllData, future_exchange_info_map: &HashMap ) -> Result<(), Box> { // crate::strategy_team::strategy_001::list_up_for_buy(all_data).await; // crate::strategy_team::strategy_002::list_up_for_buy(all_data).await; // crate::strategy_team::strategy_003::list_up_for_buy(all_data).await; // crate::strategy_team::strategy_004::list_up_for_buy(all_data).await; // crate::strategy_team::strategy_005::list_up_for_buy(all_data).await; // crate::strategy_team::strategy_006::list_up_for_buy(all_data).await; // crate::strategy_team::strategy_007::list_up_for_buy(all_data).await; // crate::strategy_team::strategy_008::list_up_for_buy(all_data).await; // crate::strategy_team::strategy_009::list_up_for_buy(all_data).await; crate::strategy_team::future_strategy_long::list_up_for_buy(all_data, &future_exchange_info_map).await; crate::strategy_team::future_strategy_short::list_up_for_buy(all_data, &future_exchange_info_map).await; Ok(()) } pub async fn execute_list_up_for_sell( all_data: &AllData, exchange_info_map: &HashMap, futures_exchange_info_map: &HashMap, trade_fee_map: &HashMap, ) -> Result<(), Box> { // crate::strategy_team::strategy_001::list_up_for_sell(&all_data, &exchange_info_map, &trade_fee_map).await; // crate::strategy_team::strategy_002::list_up_for_sell(&all_data, &exchange_info_map, &trade_fee_map).await; // crate::strategy_team::strategy_003::list_up_for_sell(&all_data, &exchange_info_map, &trade_fee_map).await; // crate::strategy_team::strategy_004::list_up_for_sell(&all_data, &exchange_info_map, &trade_fee_map).await; // crate::strategy_team::strategy_005::list_up_for_sell(&all_data, &exchange_info_map, &trade_fee_map).await; // crate::strategy_team::strategy_006::list_up_for_sell( // &all_data, // &exchange_info_map, // &trade_fee_map, // ) // .await; // crate::strategy_team::strategy_007::list_up_for_sell( // &all_data, // &exchange_info_map, // &trade_fee_map, // ) // .await; // crate::strategy_team::strategy_008::list_up_for_sell( // &all_data, // &exchange_info_map, // &trade_fee_map, // ) // .await; // crate::strategy_team::strategy_009::list_up_for_sell( // &all_data, // &exchange_info_map, // &trade_fee_map, // ) // .await; crate::strategy_team::future_strategy_long::list_up_for_sell(&all_data, futures_exchange_info_map).await; crate::strategy_team::future_strategy_short::list_up_for_sell(&all_data, futures_exchange_info_map).await; Ok(()) } pub async fn insert_pre_suggested_coins( registerer: i32, is_long: bool, filtered_coins: &HashMap ) -> Result<(), Box> { let mut insert_table_name = String::from("pre_suggested_coin_list"); let insert_columns = vec![ "symbol", "close_time", "suggested_price", "current_price", "stoploss", "target_price", "registered_server_epoch", "profit_percent", "minimum_profit_percent", "maximum_profit_percent", "registerer", "is_long", ]; for (symbol, filtered_data) in filtered_coins { let mut insert_values = vec![ symbol.clone(), // symbol filtered_data.closetime.to_string(), // close_time filtered_data.current_price.to_string(), // suggested_price filtered_data.current_price.to_string(), // current_price filtered_data.stoploss.to_string(), // stoploss filtered_data.target_price.to_string(), // target_price get_server_epoch().await.to_string(), // registered_server_epoch 0.0.to_string(), // profit_percent 0.0.to_string(), // minimum_profit_percent 0.0.to_string(), // maximum_profit_percent registerer.to_string(), // registerer ]; if is_long == true { insert_values.push(1.to_string()); // is_long } else { insert_values.push(0.to_string()); // is_long } insert_one_record(&insert_table_name, &insert_columns, &insert_values).await; } Ok(()) } pub async fn insert_future_coins( position: Position, server_epoch: i64, filtered_coins: &HashMap ) -> Result<(), Box> { let mut insert_table_name = String::from("future_ordered_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 (symbol, filtered_data) in filtered_coins { let mut insert_values = vec![ String::from("POSITIONING"), // order_type String::from("LISTUP"), // status symbol.clone(), // symbol 0.to_string(), // order_id position.to_string(), // position server_epoch.to_string(), // registered_server_epoch 0.to_string(), // transact_time filtered_data.closetime.to_string(), // close_time 0.0.to_string(), // used_usdt 0.0.to_string(), // expected_get_usdt 0.0.to_string(), // pnl 0.0.to_string(), // entry_price 0.0.to_string(), // current_price filtered_data.target_price.to_string(), // target_percent filtered_data.stoploss.to_string(), // stoploss_percent 0.0.to_string(), // base_qty_ordered 0.0.to_string(), // pure_profit_percent 0.0.to_string(), // minimum_profit_percent 0.0.to_string(), // maximum_profit_percent ]; insert_one_record(&insert_table_name, &insert_columns, &insert_values).await; } Ok(()) }