|
|
@@ -3,7 +3,7 @@ use std::sync::Arc;
|
|
|
use chrono::{Utc};
|
|
|
use futures_channel::mpsc::UnboundedSender;
|
|
|
use futures_util::StreamExt;
|
|
|
-use reqwest::Client;
|
|
|
+use reqwest::{Client, Error, Response};
|
|
|
use rust_decimal::prelude::*;
|
|
|
use rust_decimal_macros::dec;
|
|
|
use serde_json::{json, Value};
|
|
|
@@ -454,48 +454,52 @@ impl Predictor {
|
|
|
let client = Client::new();
|
|
|
|
|
|
// 发送 GET 请求
|
|
|
- let response = client.post(url)
|
|
|
+ let response_rst = client.post(url)
|
|
|
.json(¶ms)
|
|
|
.send()
|
|
|
- .await
|
|
|
- .unwrap();
|
|
|
-
|
|
|
- // 错误处理
|
|
|
- if response.status().is_success() {
|
|
|
- let response_text = response.text().await.unwrap();
|
|
|
- let parsed: Value = serde_json::from_str(response_text.as_str()).unwrap();
|
|
|
- let msv = parsed["data"]["msv"].clone();
|
|
|
-
|
|
|
- let msv_decimals: Vec<Decimal> = msv.as_array()
|
|
|
- .unwrap() // 确保 parsed 是一个数组
|
|
|
- .iter()
|
|
|
- .filter_map(|item| {
|
|
|
- // 尝试提取第二个值并转换为 Decimal
|
|
|
- if let Some(value) = item.get(1) {
|
|
|
- value.as_str().unwrap_or("0").parse::<Decimal>().ok()
|
|
|
+ .await;
|
|
|
+
|
|
|
+ match response_rst {
|
|
|
+ Ok(response) => {
|
|
|
+ // 错误处理
|
|
|
+ if response.status().is_success() {
|
|
|
+ let response_text = response.text().await.unwrap();
|
|
|
+ let parsed: Value = serde_json::from_str(response_text.as_str()).unwrap();
|
|
|
+ let msv = parsed["data"]["msv"].clone();
|
|
|
+
|
|
|
+ let msv_decimals: Vec<Decimal> = msv.as_array()
|
|
|
+ .unwrap() // 确保 parsed 是一个数组
|
|
|
+ .iter()
|
|
|
+ .filter_map(|item| {
|
|
|
+ // 尝试提取第二个值并转换为 Decimal
|
|
|
+ if let Some(value) = item.get(1) {
|
|
|
+ value.as_str().unwrap_or("0").parse::<Decimal>().ok()
|
|
|
+ } else {
|
|
|
+ None
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .collect();
|
|
|
+
|
|
|
+ let max_abs_value = msv_decimals.iter()
|
|
|
+ .map(|&value| value.abs()) // 获取每个数的绝对值
|
|
|
+ .fold(Decimal::new(0, 0), |a, b| a.max(b)); // 计算最大值
|
|
|
+
|
|
|
+ let prev_open = self.params.open.clone();
|
|
|
+
|
|
|
+ self.params.open = if max_abs_value.is_zero() {
|
|
|
+ panic!("十分钟内毫无波动的行情,停机。")
|
|
|
} else {
|
|
|
- None
|
|
|
- }
|
|
|
- })
|
|
|
- .collect();
|
|
|
-
|
|
|
- let max_abs_value = msv_decimals.iter()
|
|
|
- .map(|&value| value.abs()) // 获取每个数的绝对值
|
|
|
- .fold(Decimal::new(0, 0), |a, b| a.max(b)); // 计算最大值
|
|
|
-
|
|
|
- let prev_open = self.params.open.clone();
|
|
|
+ max_abs_value / Decimal::ONE_HUNDRED
|
|
|
+ };
|
|
|
|
|
|
- self.params.open = if max_abs_value.is_zero() {
|
|
|
- panic!("十分钟内毫无波动的行情,停机。")
|
|
|
- } else {
|
|
|
- max_abs_value / Decimal::ONE_HUNDRED
|
|
|
- };
|
|
|
-
|
|
|
- if self.params.open != prev_open {
|
|
|
- info!("open: {} -> {}", prev_open, self.params.open);
|
|
|
+ if self.params.open != prev_open {
|
|
|
+ info!("open: {} -> {}", prev_open, self.params.open);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ error!("自动参数挂了:{}", response.status());
|
|
|
+ }
|
|
|
}
|
|
|
- } else {
|
|
|
- error!("自动参数挂了:{}", response.status());
|
|
|
+ Err(_) => {}
|
|
|
}
|
|
|
}
|
|
|
}
|