tradingbot/src/strategy_team/strategy_manager.rs
2024-05-30 02:08:26 +09:00

197 lines
7.7 KiB
Rust

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<String, FuturesExchangeInfo>
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// 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<String, ExchangeInfo>,
futures_exchange_info_map: &HashMap<String, FuturesExchangeInfo>,
trade_fee_map: &HashMap<String, TradeFee>,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// 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<String, FilteredDataValue>
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
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<String, FilteredDataValue>
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
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(())
}