Integrate functions

This commit is contained in:
Sik Yoon 2023-11-18 21:19:03 +09:00
parent f7ee3845d3
commit 12996a4d17

View File

@ -1,10 +1,12 @@
use crate::coin_health_check_team::request_candles::*; use crate::coin_health_check_team::{request_candles::*, request_others::ExchangeInfo};
use crate::RunningMode::*; use crate::RunningMode::*;
use crate::{database_control::*, RUNNING_MODE}; use crate::{database_control::*, RUNNING_MODE};
use hex::ToHex; use hex::ToHex;
use hmac_sha256::HMAC; use hmac_sha256::HMAC;
use reqwest::{Client, ClientBuilder, Response}; use reqwest::{Client, ClientBuilder, Response};
use rust_decimal::{prelude::ToPrimitive, Decimal}; use rust_decimal::{prelude::ToPrimitive, Decimal};
use rust_decimal_macros::dec;
use crate::decimal_funcs::*;
use serde::Deserialize; use serde::Deserialize;
use serde_json::Value; use serde_json::Value;
use sqlx::{Error, FromRow}; use sqlx::{Error, FromRow};
@ -19,24 +21,23 @@ struct AllCoinProfitChangeAvgList {
avg_profit: f64, avg_profit: f64,
} }
// filter valid USDT trades from all24hstatistics table in database pub async fn initialize_valid_usde_trade() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
pub async fn collect_valid_usde_trade(
valid_usdt_trade_vec: &mut Vec<String>,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
#[derive(Debug, FromRow)] #[derive(Debug, FromRow)]
struct UsdtTrades { struct UsdtTrades {
symbol: String, symbol: String,
} }
let mut usdt_trades = UsdtTrades { symbol: String::new()}; let mut usdt_trades = UsdtTrades { symbol: String::new()};
let fetch_table_name = String::from("all_24h_change"); let fetch_table_name = String::from("all_24h_change");
let column_name = String::from("symbol"); let column_name = String::from("symbol");
let mut condition_build = String::from("WHERE symbol LIKE '%USDT' AND symbol NOT LIKE '%DOWNUSDT'"); let mut condition_build = String::from("WHERE symbol LIKE '%USDT' AND symbol NOT LIKE '%DOWNUSDT'");
condition_build.push_str(" AND symbol NOT LIKE '%UPUSDT' AND firstId >= 0 AND lastId >= 0"); condition_build.push_str(" AND symbol NOT LIKE '%UPUSDT' AND firstId >= 0 AND lastId >= 0");
condition_build.push_str(" AND symbol NOT IN (SELECT symbol FROM stop_usdt_trades)"); condition_build.push_str(" AND bidPrice > 0");
// add unnessesary coins condition_build.push_str(" AND bidQty > 0");
condition_build.push_str(" AND askPrice > 0");
condition_build.push_str(" AND askQty > 0");
// add fiat and unnessesary coins
condition_build.push_str(" AND symbol NOT LIKE 'BUSDUSDT'"); condition_build.push_str(" AND symbol NOT LIKE 'BUSDUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'USTCUSDT'"); condition_build.push_str(" AND symbol NOT LIKE 'USTCUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'FDUSDUSDT'"); condition_build.push_str(" AND symbol NOT LIKE 'FDUSDUSDT'");
@ -57,24 +58,124 @@ pub async fn collect_valid_usde_trade(
condition_build.push_str(" AND symbol NOT LIKE 'BTCSTUSDT'"); condition_build.push_str(" AND symbol NOT LIKE 'BTCSTUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'ACAUSDT'"); condition_build.push_str(" AND symbol NOT LIKE 'ACAUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'ANCUSDT'"); condition_build.push_str(" AND symbol NOT LIKE 'ANCUSDT'");
let condition = Some(condition_build); let condition = Some(condition_build);
let select_result = select_record(&fetch_table_name, &column_name, &condition, &usdt_trades).await?; // get valid usdt trades
let usdt_trades = select_record(&fetch_table_name, &column_name, &condition, &usdt_trades).await?;
// update valid usdt trades
let table_name = String::from("valid_usdt_trades"); let table_name = String::from("valid_usdt_trades");
let columns = vec!["symbol"]; let columns = vec!["symbol"];
let mut symbol_vec: Vec<String> = Vec::new();
let mut value_wrapper: Vec<Vec<String>> = Vec::new(); let mut value_wrapper: Vec<Vec<String>> = Vec::new();
for element in select_result { for element in &usdt_trades {
let mut inner_vec: Vec<String> = Vec::new(); let mut inner_vec: Vec<String> = Vec::new();
inner_vec.push(element.symbol.clone()); inner_vec.push(element.symbol.clone());
value_wrapper.push(inner_vec); value_wrapper.push(inner_vec);
symbol_vec.push(element.symbol);
} }
*valid_usdt_trade_vec = symbol_vec;
delete_all_rows(&table_name).await?; delete_all_rows(&table_name).await?;
insert_records(&table_name, &columns, &value_wrapper).await?; insert_records(&table_name, &columns, &value_wrapper).await?;
Ok(())
}
// filter valid USDT trades from all24hstatistics table in database
pub async fn collect_valid_usde_trade(
valid_usdt_trade_vec: &mut Vec<String>,
exchange_info_vec: &Vec<ExchangeInfo>,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
#[derive(Debug, FromRow)]
struct UsdtTrades {
symbol: String,
weightedavgprice: f64
}
let mut usdt_trades = UsdtTrades { symbol: String::new(), weightedavgprice:0.0 };
let fetch_table_name = String::from("all_24h_change");
let column_name = String::from("symbol, weightedAvgPrice");
let mut condition_build = String::from("WHERE symbol LIKE '%USDT' AND symbol NOT LIKE '%DOWNUSDT'");
condition_build.push_str(" AND symbol NOT LIKE '%UPUSDT' AND firstId >= 0 AND lastId >= 0");
condition_build.push_str(" AND bidPrice > 0");
condition_build.push_str(" AND bidQty > 0");
condition_build.push_str(" AND askPrice > 0");
condition_build.push_str(" AND askQty > 0");
// condition_build.push_str(" AND symbol NOT IN (SELECT symbol FROM stop_usdt_trades)");
// add fiat and unnessesary coins
condition_build.push_str(" AND symbol NOT LIKE 'BUSDUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'USTCUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'FDUSDUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'TUSDUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'USDPUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'SUSDUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'AUDUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'EURUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'GBPUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'USDCUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'BZRXUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'USTUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'NBTUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'VGXUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'RAMPUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'TORNUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'BTTCUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'BTCSTUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'ACAUSDT'");
condition_build.push_str(" AND symbol NOT LIKE 'ANCUSDT'");
let condition = Some(condition_build);
// get valid usdt trades
let usdt_trades = select_record(&fetch_table_name, &column_name, &condition, &usdt_trades).await?;
// filtering usdt trades
let mut filtered_usdt_trades: Vec<String> = Vec::new();
let mut excluded_usdt_trades: Vec<String> = Vec::new();
for usdt_trade in usdt_trades {
// build update values
let step_size_result = exchange_info_vec
.iter()
.position(|ExchangeInfo| ExchangeInfo.symbol == usdt_trade.symbol);
if step_size_result.is_some() {
let avg_price: Decimal = rust_decimal::prelude::FromPrimitive::from_f64(usdt_trade.weightedavgprice).unwrap();
let step_size = exchange_info_vec[step_size_result.unwrap()].stepsize;
let step_price = decimal_mul(step_size, avg_price);
let unit_trade_usdt = crate::coex::assets_managing_team::get_unit_trade_usdt().await;
// exclude USDT trades whose step_price is over than 1% of unit_trade_usdt
if step_price > decimal_mul(unit_trade_usdt, dec!(0.01)) {
excluded_usdt_trades.push(usdt_trade.symbol.clone());
} else {
filtered_usdt_trades.push(usdt_trade.symbol.clone());
}
}
}
// update valid usdt trades
let table_name = String::from("valid_usdt_trades");
let columns = vec!["symbol"];
let mut value_wrapper: Vec<Vec<String>> = Vec::new();
for symbol in &filtered_usdt_trades {
let mut inner_vec: Vec<String> = Vec::new();
inner_vec.push(symbol.clone());
value_wrapper.push(inner_vec);
}
*valid_usdt_trade_vec = filtered_usdt_trades;
delete_all_rows(&table_name).await?;
insert_records(&table_name, &columns, &value_wrapper).await?;
// update stop usdt trades
let table_name = String::from("stop_usdt_trades");
let columns = vec!["symbol"];
let mut value_wrapper: Vec<Vec<String>> = Vec::new();
for symbol in excluded_usdt_trades {
let mut inner_vec: Vec<String> = Vec::new();
inner_vec.push(symbol.clone());
value_wrapper.push(inner_vec);
}
delete_all_rows(&table_name).await?;
insert_records(&table_name, &columns, &value_wrapper).await?;
// major trades // major trades
// if RUNNING_MODE == TEST || RUNNING_MODE == REAL || RUNNING_MODE == SIMUL { // if RUNNING_MODE == TEST || RUNNING_MODE == REAL || RUNNING_MODE == SIMUL {
@ -147,95 +248,6 @@ pub async fn collect_valid_usde_trade(
Ok(()) Ok(())
} }
// async fn detect_new_valid_usdt_trade() -> Result<(), Box<dyn std::error::Error + Send + Sync>>{
// #[derive(Debug, FromRow)]
// struct UsdtTrades {
// symbol: String,
// }
// let mut usdt_trades = UsdtTrades { symbol: String::new() };
// let table_name = String::from("valid_usdt_trades");
// let column_name = String::from("valid_usdt_trades.symbol");
// let condition = Some(String::from("LEFT OUTER JOIN prev_valid_usdt_trades ON valid_usdt_trades.symbol = prev_valid_usdt_trades.symbol WHERE prev_valid_usdt_trades.symbol is null"));
// let select_result = try_select_record(&table_name, &column_name, &condition, &usdt_trades).await.unwrap();
// if !select_result.is_empty() {
// let intervals = vec![String::from("1m"), String::from("30m"), String::from("1d"), String::from("1w"), String::from("1mon")];
// let symbol_vec: Vec<String> = select_result.into_iter().map(|element| element.symbol).collect();
// for interval in intervals{
// for element in &symbol_vec {
// create_candle_table(element, &interval).await.unwrap();
// }
// request_candlestick_initial(&symbol_vec, &interval).await.unwrap();
// }
// println!("detect_new_valid_usde_trade 완료");
// }
// Ok(())
// }
async fn detect_new_valid_usdt_trade() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
#[derive(Debug, FromRow)]
struct UsdtTrades {
symbol: String,
}
let mut usdt_trades = UsdtTrades {
symbol: String::new(),
};
let table_name = String::from("valid_usdt_trades");
let column_name = String::from("valid_usdt_trades.symbol");
let condition = Some(String::from("LEFT OUTER JOIN prev_valid_usdt_trades ON valid_usdt_trades.symbol = prev_valid_usdt_trades.symbol WHERE prev_valid_usdt_trades.symbol is null"));
let select_result =
try_select_record(&table_name, &column_name, &condition, &usdt_trades).await?;
if !select_result.is_empty() {
let intervals = vec![
String::from("1m"),
String::from("30m"),
String::from("1d"),
String::from("1w"),
String::from("1mon"),
];
for interval in intervals {
for element in &select_result {
create_candle_table(&element.symbol, &interval).await?;
request_candlestick_initial(element.symbol.clone(), &interval).await?;
}
}
// println!("detect_new_valid_usde_trade 완료");
}
Ok(())
}
async fn deceased_usdt_trade() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
#[derive(Debug, FromRow)]
struct UsdtTrades {
symbol: String,
}
let mut usdt_trades = UsdtTrades {
symbol: String::new(),
};
let insert_table_name = String::from("deceased_usdt_trades");
let table_name = String::from("valid_usdt_trades");
let column_name = String::from("prev_valid_usdt_trades.symbol");
let condition = Some(String::from("RIGHT OUTER JOIN prev_valid_usdt_trades ON valid_usdt_trades.symbol = prev_valid_usdt_trades.symbol WHERE valid_usdt_trades.symbol is null"));
let select_result =
try_select_record(&table_name, &column_name, &condition, &usdt_trades).await?;
if !select_result.is_empty() {
let columns = vec!["symbol"];
let mut value_wrapper: Vec<Vec<String>> = Vec::new();
for element in select_result {
let mut inner_vec: Vec<String> = Vec::new();
inner_vec.push(element.symbol);
value_wrapper.push(inner_vec);
}
insert_records(&insert_table_name, &columns, &value_wrapper).await?;
// println!("deceased_usde_trade 완료");
}
Ok(())
}
pub async fn total_24h_change_profit_index() -> Result<(), Box<dyn std::error::Error + Send + Sync>> pub async fn total_24h_change_profit_index() -> Result<(), Box<dyn std::error::Error + Send + Sync>>
{ {
#[derive(Debug, FromRow)] #[derive(Debug, FromRow)]