Integrate functions
This commit is contained in:
parent
f7ee3845d3
commit
12996a4d17
|
|
@ -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::{database_control::*, RUNNING_MODE};
|
||||
use hex::ToHex;
|
||||
use hmac_sha256::HMAC;
|
||||
use reqwest::{Client, ClientBuilder, Response};
|
||||
use rust_decimal::{prelude::ToPrimitive, Decimal};
|
||||
use rust_decimal_macros::dec;
|
||||
use crate::decimal_funcs::*;
|
||||
use serde::Deserialize;
|
||||
use serde_json::Value;
|
||||
use sqlx::{Error, FromRow};
|
||||
|
|
@ -19,24 +21,23 @@ struct AllCoinProfitChangeAvgList {
|
|||
avg_profit: f64,
|
||||
}
|
||||
|
||||
// filter valid USDT trades from all24hstatistics table in database
|
||||
pub async fn collect_valid_usde_trade(
|
||||
valid_usdt_trade_vec: &mut Vec<String>,
|
||||
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
pub async fn initialize_valid_usde_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 fetch_table_name = String::from("all_24h_change");
|
||||
let column_name = String::from("symbol");
|
||||
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 IN (SELECT symbol FROM stop_usdt_trades)");
|
||||
// add unnessesary coins
|
||||
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");
|
||||
// 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'");
|
||||
|
|
@ -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 'ACAUSDT'");
|
||||
condition_build.push_str(" AND symbol NOT LIKE 'ANCUSDT'");
|
||||
|
||||
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 columns = vec!["symbol"];
|
||||
let mut symbol_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();
|
||||
inner_vec.push(element.symbol.clone());
|
||||
value_wrapper.push(inner_vec);
|
||||
symbol_vec.push(element.symbol);
|
||||
}
|
||||
*valid_usdt_trade_vec = symbol_vec;
|
||||
delete_all_rows(&table_name).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
|
||||
// if RUNNING_MODE == TEST || RUNNING_MODE == REAL || RUNNING_MODE == SIMUL {
|
||||
|
|
@ -147,95 +248,6 @@ pub async fn collect_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.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>>
|
||||
{
|
||||
#[derive(Debug, FromRow)]
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user