Fix calculation of amplitude

This commit is contained in:
Sik Yoon 2024-03-12 00:51:45 +09:00
parent bd24ffe455
commit b95a194e84

View File

@ -176,31 +176,27 @@ pub async fn list_up_for_sell(
.rt_price_1d_vec .rt_price_1d_vec
.get(&element.symbol) .get(&element.symbol)
{ {
if let Some(partial_price_vec) = price_1d_vec.get(price_1d_vec.len()-opclo_sample_length+1..price_1d_vec.len()-1) { let vec_len = price_1d_vec.len();
if let Some(candles) = price_1d_vec.get(vec_len-opclo_sample_length-2..vec_len-1) {
let windows = candles.windows(2);
let mut sum_amplitude_candles = 0.0; let mut sum_amplitude_candles = 0.0;
let mut sum_ratio_amp_body = 0.0; let mut sum_ratio_amp_body = 0.0;
for element in price_1d_vec { let mut average_amplitude = 0.0;
sum_amplitude_candles +=
((element.high_price / element.low_price) - 1.0) * 100.0; for window in windows {
sum_ratio_amp_body += (element.close_price - element.open_price).abs() sum_amplitude_candles += ((window.last().unwrap().high_price - window.last().unwrap().low_price) * 100.0) / window.first().unwrap().close_price;
/ (element.high_price - element.low_price);
} }
let average_amplitude = sum_amplitude_candles / opclo_sample_length as f64; // percent unit let average_amplitude = sum_amplitude_candles / opclo_sample_length as f64; // percent unit
let average_ratio_amp_body = sum_ratio_amp_body / opclo_sample_length as f64;
let mut amplitude_variance = 0.0; let mut amplitude_variance = 0.0;
for element in price_1d_vec {
amplitude_variance += ((((element.high_price / element.low_price) - 1.0) let windows = candles.windows(2);
* 100.0) for window in windows {
- average_amplitude) amplitude_variance += ((((window.last().unwrap().high_price - window.last().unwrap().low_price) * 100.0) / window.first().unwrap().close_price) - average_amplitude).powi(2);;
.powi(2);
} }
amplitude_variance = amplitude_variance / (opclo_sample_length - 1) as f64; amplitude_variance = amplitude_variance / (opclo_sample_length - 1) as f64;
let standard_deviation_amplitude = amplitude_variance.sqrt(); let standard_deviation_amplitude = amplitude_variance.sqrt();
// let target_profit_percent = average_amplitude + (standard_deviation_amplitude * (average_ratio_amp_body)); }
target_profit_percent = (average_amplitude - standard_deviation_amplitude);
}
} }
if element.used_usdt >= dec!(10.0) { if element.used_usdt >= dec!(10.0) {