30个版本 (17个稳定版本)
4.0.2 | 2024年6月11日 |
---|---|
3.0.1 | 2024年6月10日 |
2.5.4 | 2024年6月10日 |
2.5.3 | 2023年3月7日 |
0.6.0 | 2021年3月28日 |
#63 in 数学
每月下载量 36次
在 lfest 中使用
105KB
3K SLoC
⛓️ 可链式树状滑动特性
模块化、可链式滑动窗口,包含各种信号处理函数和技术指标。View
定义了处理传入值并提供输出值的函数。
View
可以通过实现需要两个方法的 Traits 简单地添加
update(&mut self, val: f64)
: 每当您有新值需要更新 View 时调用last(&self) -> f64
: 从 View 中检索最后一个值
这使多个 View
可以串联在一起,利用Rust的无成本抽象,以零开销连续应用多个信号处理函数。
例如,您可能希望创建一个链式函数,首先使用 EMA
平滑输入值,然后应用变化率 ROC
函数,最后应用归一化 HLNormalizer
。这可以这样实现
let mut chain = HLNormalizer::new(ROC:new(EMA::new(Echo::new(), 10), 15), 20);
想象这个过程是一个树,节点(这是更准确的描述)可以合并多个 Views
。例如,Add
节点就是一个这样的组合节点。
这是可视化此链式过程树状特性的一个可能示例。
flowchart TD
A[Echo] --> B[EMA]
C[Echo] --> D[SMA]
B --> E[ROC]
D --> F[RSI]
E --> G[Add]
F --> G
G --> H[HLNormalize]
如何使用
要在您的项目中使用此crate,请在Cargo.toml中添加以下内容:
sliding_features = "2.5.3"
要创建一个新的View,请调用相应的构造函数,如下所示:
let mut rsi = RSI::new(Echo::new(), 16);
这将创建一个窗口长度为16的RSI
指标。请注意,Echo
将始终位于View链的末尾,因为它只是返回最新观察到的值。现在要更新链的值,假设test_values包含f64值
for v in &test_values {
rsi.update(v);
let last = rsi.last();
println!("latest rsi value: {}", last);
}
每个View首先会调用其链式View以获取其最后一个值,然后使用该值更新View的状态。一些View有额外的参数,例如ALMA。
示例
请参阅示例文件夹以获取一些代码思路
cargo run --release --example basic_single_view
cargo run --release --example basic_chainable_view
Views
View定义了处理值更新的函数。目前包括:
- Echo
- 技术指标
- 重力中心
- 网络周期
- 拉格朗日RSI
- 拉格朗日滤波器
- ReFlex
- TrendFlex
- ROC
- RSI
- MyRSI(范围在[-1.0, 1.0]内的RSI)
- NET(使用kendall相关性的John Ehlers噪声消除技术)
- 相关趋势指标(CTI)
- 极化分形效率
- Ehlers Fisher转换
- JohnEhlers的超级平滑器
- JohnEhlers的屋顶滤波器
- 归一化/方差/均值标准化
- HLNormalizer,一个滑动高低正常化器
- 方差稳定转换(VST)
- 方差稳定中心转换(VSCT)
- 移动平均数
- ALMA(Arnaux Legoux移动平均数)
- SMA(简单移动平均数)
- EMA(指数移动平均数)
- View的数学组合
- 添加
- 减去
- 乘以
- 除以
- 数学函数
- 双曲正切
- GTE - 大于等于裁剪函数
- LTE - 小于等于裁剪函数
- 使用WelfordOnlineSliding的滑动窗口标准差估计
- 累计
- 熵
图像
由MathisWellmann/time_series_generator-rs使用标准正态(高斯)过程合成的底层数据。注意,每次运行都使用test_data.rs中的常见测试数据以保持一致性。
待办事项
请随意实现以下功能并创建一个PR以进行一些简单的开源贡献
- FRAMA
- MAMA
- FAMA
- 随机
- 零滞后
- 高斯滤波器
- 相关性周期指标
- 某些指标可以使用固定大小的数组构建,以提高性能
- 为所有添加默认实现
- 甚至可以添加一个泛型数值类型
- 还有更多...
贡献
如果您有一个希望集成的滑动窗口函数或指标,请随意创建一个pull request。任何帮助都深受欢迎。让我们共同构建最伟大的滑动窗口库吧 🤝
捐赠 💰 💸
如果您想支持此crate的开发,请随意发送捐赠
Monero(XMR)地址
47xMvxNKsCKMt2owkDuN1Bci2KMiqGrAFCQFSLijWLs49ua67222Wu3LZryyopDVPYgYmAnYkSZSz9ZW2buaDwdyKTWGwwb
许可证
版权(C)2020 <MathisWellmann [email protected]>
本程序是免费软件:您可以在自由软件基金会发布的GNU Affero通用公共许可证的条款和条件下重新分发和/或修改它,许可证版本为3,或者(根据您的选择)任何较新版本。
本程序以希望它将是有用的方式分发,但没有任何保证;甚至没有关于其适销性或适用于特定目的的暗示保证。有关详细信息,请参阅GNU Affero通用公共许可证。
您应该已经收到了与此程序一起的GNU Affero通用公共许可证副本。如果没有,请参阅https://www.gnu.org/licenses/。
依赖项
~1.5MB
~36K SLoC