Change input pamaneters
This commit is contained in:
parent
5858b97667
commit
c0344961bf
|
|
@ -3,8 +3,8 @@
|
|||
|
||||
use crate::database_control::*;
|
||||
use crate::value_estimation_team::datapoints::price_data::RealtimePriceData;
|
||||
use crate::value_estimation_team::indicators::sma::SmaData;
|
||||
use csv::{DeserializeRecordsIter, StringRecord};
|
||||
use crate::value_estimation_team::indicators::sma::{SmaData, sma};
|
||||
use crate::strategy_team::FilteredData;
|
||||
use futures::future::try_join_all;
|
||||
use serde::Deserialize;
|
||||
use sqlx::FromRow;
|
||||
|
|
@ -33,47 +33,37 @@ impl BollingerBandData {
|
|||
|
||||
// Binance Bollingerband (SMA)
|
||||
pub async fn bollingerband(
|
||||
period: usize, // this value should be same as moving size of sma
|
||||
period: usize,
|
||||
sd_factor: f64,
|
||||
input_sma_data: &Vec<(String, Vec<SmaData>)>,
|
||||
input_rt_data: &Vec<(String, Vec<RealtimePriceData>)>,
|
||||
filtered_symbols: &Vec<(String, i64)>,
|
||||
filtered_symbols: &Vec<FilteredData>,
|
||||
) -> Result<Vec<(String, Vec<BollingerBandData>)>, Box<dyn std::error::Error + Send + Sync>> {
|
||||
if filtered_symbols.is_empty() {
|
||||
Err(("Err"))?;
|
||||
}
|
||||
|
||||
let mut read_rt_data_vec: Vec<(String, Vec<RealtimePriceData>)> = input_rt_data.clone();
|
||||
let mut read_sma_data_vec: Vec<(String, Vec<SmaData>)> = input_sma_data.clone();
|
||||
let mut sma_data_vec: Vec<(String, Vec<SmaData>)> = sma(period, input_rt_data, filtered_symbols).await?;
|
||||
|
||||
let mut bb_data_wrapper: Vec<(String, Vec<BollingerBandData>)> = Vec::new();
|
||||
let mut bb_data_wrapper_arc = Arc::new(Mutex::new(bb_data_wrapper));
|
||||
let mut task_vec = Vec::new();
|
||||
for symbol in filtered_symbols {
|
||||
let symbol_search_result1 = read_rt_data_vec.iter().position(|x| x.0 == *symbol.0);
|
||||
let symbol_search_result2 = read_sma_data_vec.iter().position(|x| x.0 == *symbol.0);
|
||||
|
||||
match symbol_search_result1 {
|
||||
Some(rt_index) => {
|
||||
match symbol_search_result2 {
|
||||
Some(sma_index) => {
|
||||
for filtered_symbol in filtered_symbols {
|
||||
let filtered_symbol_c = filtered_symbol.clone();
|
||||
let rt_data_vec_c: Vec<(String, Vec<RealtimePriceData>)> = input_rt_data.clone();
|
||||
let sma_data_vec_c = sma_data_vec.clone();
|
||||
let bb_data_wrapper_arc_c = Arc::clone(&bb_data_wrapper_arc);
|
||||
task_vec.push(tokio::spawn(async move {
|
||||
let search_result1 = rt_data_vec_c.clone().iter().position(|x| x.0 == *filtered_symbol_c.symbol);
|
||||
let search_result2 = sma_data_vec_c.iter().position(|x| x.0 == *filtered_symbol_c.symbol);
|
||||
|
||||
if search_result1.is_some() && search_result2.is_some() {
|
||||
let mut bb_data = BollingerBandData::new();
|
||||
let mut bb_data_vec: Vec<BollingerBandData> = Vec::new();
|
||||
let read_rt_data_vec_c = read_rt_data_vec.clone();
|
||||
let read_sma_data_vec_c = read_sma_data_vec.clone();
|
||||
let symbol_c = symbol.clone();
|
||||
task_vec.push(tokio::spawn(async move {
|
||||
|
||||
// if the data has shorter than buffer
|
||||
if read_sma_data_vec_c[sma_index].1.len() < period {
|
||||
bb_data.sma = 0.0;
|
||||
bb_data.upperband = 0.0;
|
||||
bb_data.lowerband = 0.0;
|
||||
bb_data.close_time = 0;
|
||||
bb_data_vec.push(bb_data.clone());
|
||||
} else {
|
||||
let result = read_rt_data_vec_c[rt_index].1.binary_search_by_key(
|
||||
&read_sma_data_vec_c[sma_index].1.first().unwrap().close_time,
|
||||
if sma_data_vec_c[search_result2.unwrap()].1.len() > period {
|
||||
let result = rt_data_vec_c[search_result1.unwrap()].1.binary_search_by_key(
|
||||
&sma_data_vec_c[search_result2.unwrap()].1.first().unwrap().close_time,
|
||||
|RealtimePriceData {
|
||||
opclo_price,
|
||||
open_price,
|
||||
|
|
@ -90,12 +80,12 @@ pub async fn bollingerband(
|
|||
Ok(T) => {
|
||||
if T <= period - 1 {
|
||||
let mut read_data_iter =
|
||||
read_sma_data_vec_c[sma_index].1.iter();
|
||||
sma_data_vec_c[search_result2.unwrap()].1.iter();
|
||||
for _ in T..period - 1 {
|
||||
read_data_iter.next();
|
||||
}
|
||||
let window_iter =
|
||||
read_rt_data_vec_c[rt_index].1.windows(period);
|
||||
rt_data_vec_c[search_result1.unwrap()].1.windows(period);
|
||||
for buffer in window_iter {
|
||||
let mut sd_mean = 0.0;
|
||||
let mut standard_deviation = 0.0;
|
||||
|
|
@ -129,16 +119,11 @@ pub async fn bollingerband(
|
|||
}
|
||||
let mut bb_data_wrapper_lock = bb_data_wrapper_arc_c.lock().await;
|
||||
bb_data_wrapper_lock
|
||||
.push((symbol_c.0.clone(), bb_data_vec.clone()));
|
||||
.push((filtered_symbol_c.symbol.clone(), bb_data_vec.clone()));
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
}
|
||||
try_join_all(task_vec).await?;
|
||||
let a = bb_data_wrapper_arc.lock().await.to_owned();
|
||||
Ok(a)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
use crate::database_control::*;
|
||||
use crate::value_estimation_team::datapoints::price_data::RealtimePriceData;
|
||||
use csv::{DeserializeRecordsIter, StringRecord};
|
||||
use crate::strategy_team::FilteredData;
|
||||
use futures::future::try_join_all;
|
||||
use serde::Deserialize;
|
||||
use sqlx::FromRow;
|
||||
|
|
@ -29,7 +29,7 @@ impl SmaData {
|
|||
pub async fn sma(
|
||||
moving_number: usize,
|
||||
input_rt_data: &Vec<(String, Vec<RealtimePriceData>)>,
|
||||
filtered_symbols: &Vec<(String, i64)>,
|
||||
filtered_symbols: &Vec<FilteredData>,
|
||||
) -> Result<Vec<(String, Vec<SmaData>)>, Box<dyn std::error::Error + Send + Sync>> {
|
||||
if filtered_symbols.is_empty() {
|
||||
Err("Err")?;
|
||||
|
|
@ -39,13 +39,13 @@ pub async fn sma(
|
|||
let mut sma_data_wrapper_arc = Arc::new(Mutex::new(sma_data_wrapper));
|
||||
|
||||
let mut task_vec = Vec::new();
|
||||
for symbol in filtered_symbols {
|
||||
let symbol_search_result = input_rt_data.iter().position(|x| x.0 == *symbol.0);
|
||||
for filtered_symbol in filtered_symbols {
|
||||
let symbol_search_result = input_rt_data.iter().position(|x| x.0 == *filtered_symbol.symbol);
|
||||
|
||||
match symbol_search_result {
|
||||
Some(T) => {
|
||||
let sma_data_wrapper_arc_c = Arc::clone(&sma_data_wrapper_arc);
|
||||
let symbol_c = symbol.clone();
|
||||
let symbol_c = filtered_symbol.symbol.clone();
|
||||
let mut sma_data = SmaData::new();
|
||||
let mut sma_data_vec: Vec<SmaData> = Vec::new();
|
||||
let input_rt_data_c = input_rt_data.clone();
|
||||
|
|
@ -69,7 +69,7 @@ pub async fn sma(
|
|||
}
|
||||
}
|
||||
let mut sma_data_wrapper_lock = sma_data_wrapper_arc_c.lock().await;
|
||||
sma_data_wrapper_lock.push((symbol_c.0.clone(), sma_data_vec.clone()));
|
||||
sma_data_wrapper_lock.push((symbol_c.clone(), sma_data_vec.clone()));
|
||||
}));
|
||||
}
|
||||
None => {}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user