|
|
@@ -198,7 +198,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
let mut sigma = sigma_square.sqrt().unwrap();
|
|
|
sigma.rescale(6);
|
|
|
// 计算过去至多100个sigma值的平均值
|
|
|
- if sigma_data.len() > 0 {
|
|
|
+ let sigma_ma = if sigma_data.len() > 0 {
|
|
|
let mut sigma_ma_index = sigma_data.len();
|
|
|
let mut sigma_total = Decimal::ZERO;
|
|
|
let mut sigma_count = Decimal::ZERO;
|
|
|
@@ -215,10 +215,10 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
let mut sigma_ma = sigma_total / sigma_count;
|
|
|
sigma_ma.rescale(6);
|
|
|
|
|
|
- sigma_data.push(vec![trade.time, sigma, sigma_ma]);
|
|
|
+ sigma_ma
|
|
|
} else {
|
|
|
- sigma_data.push(vec![trade.time, sigma, sigma]);
|
|
|
- }
|
|
|
+ sigma
|
|
|
+ };
|
|
|
|
|
|
// ==================== 波动逻辑计算 ====================
|
|
|
let last_price = trade.price;
|
|
|
@@ -255,14 +255,19 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
|
|
|
epr_data.remove(epr_data.len() - 1);
|
|
|
epr_data.push(vec![trade.time, epr]);
|
|
|
+
|
|
|
+ sigma_data.remove(sigma_data.len() - 1);
|
|
|
+ sigma_data.push(vec![trade.time, sigma, sigma_ma]);
|
|
|
}
|
|
|
} else {
|
|
|
msv_data.push(vec![trade.time, rate, dissociation]);
|
|
|
epr_data.push(vec![trade.time, epr]);
|
|
|
+ sigma_data.push(vec![trade.time, sigma, sigma_ma]);
|
|
|
}
|
|
|
} else {
|
|
|
msv_data.push(vec![trade.time, rate, dissociation]);
|
|
|
epr_data.push(vec![trade.time, epr]);
|
|
|
+ sigma_data.push(vec![trade.time, sigma, sigma_ma]);
|
|
|
}
|
|
|
}
|
|
|
|