#信号处理 #滑动窗口 #指标 #模块化 #技术分析

sliding_features

具有各种信号处理函数和技术指标的模块化滑动窗口

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

monero

许可证

版权(C)2020 <MathisWellmann [email protected]>

本程序是免费软件:您可以在自由软件基金会发布的GNU Affero通用公共许可证的条款和条件下重新分发和/或修改它,许可证版本为3,或者(根据您的选择)任何较新版本。

本程序以希望它将是有用的方式分发,但没有任何保证;甚至没有关于其适销性或适用于特定目的的暗示保证。有关详细信息,请参阅GNU Affero通用公共许可证。

您应该已经收到了与此程序一起的GNU Affero通用公共许可证副本。如果没有,请参阅https://www.gnu.org/licenses/

GNU AGPLv3

依赖项

~1.5MB
~36K SLoC