New sell filtering
This commit is contained in:
parent
c0c2aba90e
commit
f9f5cc53b7
|
|
@ -163,6 +163,40 @@ pub async fn list_up_for_sell(
|
||||||
}
|
}
|
||||||
let supertrend_1d = supertrend(14, 1.2, true, &all_data.rt_price_1d_vec, &filtered_symbols).await?;
|
let supertrend_1d = supertrend(14, 1.2, true, &all_data.rt_price_1d_vec, &filtered_symbols).await?;
|
||||||
for element in filled_buy_orders {
|
for element in filled_buy_orders {
|
||||||
|
let opclo_sample_length: usize = 10; // 10 candle samsples
|
||||||
|
let mut target_profit_percent = 0.0;
|
||||||
|
if let Some(price_1d_vec) = all_data
|
||||||
|
.rt_price_1d_vec
|
||||||
|
.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 mut sum_amplitude_candles = 0.0;
|
||||||
|
let mut sum_ratio_amp_body = 0.0;
|
||||||
|
for element in price_1d_vec {
|
||||||
|
sum_amplitude_candles +=
|
||||||
|
((element.high_price / element.low_price) - 1.0) * 100.0;
|
||||||
|
sum_ratio_amp_body += (element.close_price - element.open_price).abs()
|
||||||
|
/ (element.high_price - element.low_price);
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
for element in price_1d_vec {
|
||||||
|
amplitude_variance += ((((element.high_price / element.low_price) - 1.0)
|
||||||
|
* 100.0)
|
||||||
|
- average_amplitude)
|
||||||
|
.powi(2);
|
||||||
|
}
|
||||||
|
amplitude_variance = amplitude_variance / (opclo_sample_length - 1) as f64;
|
||||||
|
let standard_deviation_amplitude = amplitude_variance.sqrt();
|
||||||
|
|
||||||
|
// let target_profit_percent = average_amplitude + (standard_deviation_amplitude * (average_ratio_amp_body));
|
||||||
|
target_profit_percent =
|
||||||
|
2.0 * (average_amplitude - standard_deviation_amplitude);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if element.used_usdt >= dec!(10.0) {
|
if element.used_usdt >= dec!(10.0) {
|
||||||
if let (Some(exchange_info), Some(tradefee), Some(supertrend_vec)) =
|
if let (Some(exchange_info), Some(tradefee), Some(supertrend_vec)) =
|
||||||
(exchange_info_map.get(&element.symbol), trade_fee_map.get(&element.symbol), supertrend_1d.get(&element.symbol)) {
|
(exchange_info_map.get(&element.symbol), trade_fee_map.get(&element.symbol), supertrend_1d.get(&element.symbol)) {
|
||||||
|
|
@ -221,6 +255,16 @@ pub async fn list_up_for_sell(
|
||||||
&trade_fee_map,
|
&trade_fee_map,
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
} else if target_profit_percent != 0.0 && target_profit_percent.is_sign_positive() && target_profit_percent <= element.pure_profit_percent {
|
||||||
|
limit_order_sell(
|
||||||
|
&element,
|
||||||
|
element.current_price,
|
||||||
|
base_qty_to_be_ordered,
|
||||||
|
&client,
|
||||||
|
&exchange_info_map,
|
||||||
|
&trade_fee_map,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
// TODO: sell_count가 1일 때 적용하기
|
// TODO: sell_count가 1일 때 적용하기
|
||||||
// else if (supertrend_vec
|
// else if (supertrend_vec
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user