贡献指南

感谢您对 TechKit 的贡献兴趣!本指南将帮助您开始。

代码风格

C/C++ 风格

  • 遵循代码库中现有的代码风格

  • 使用 4 个空格进行缩进

  • 最大行长度:100 个字符

  • 函数和变量使用 snake_case

  • 类使用 PascalCase

  • 头文件中始终包含头文件保护

Python 风格

  • 遵循 PEP 8

  • 所有函数签名使用类型提示

  • 最大行长度:100 个字符

  • 函数和变量使用 snake_case

  • 类使用 PascalCase

添加新指标

实现步骤

  1. src/indicators/ 中创建 C++ 实现

    • 遵循现有指标的模式

    • 使用环形缓冲区实现 O(period) 内存

    • 实现增量更新(O(1) 复杂度)

  2. include/techkit/techkit_c.h 中添加 C API 函数

    • 工厂函数:tk_<name>_new(...)

    • 更新函数:tk_update()tk_<name>_update()

    • 如果是多输出,添加结果类型

  3. src/c_api.cpp 中实现 C API 包装器

    • 将 C 函数映射到 C++ 实现

    • 处理参数验证

    • 返回适当的错误代码

  4. tests/test_<name>.cpp 中添加测试

    • 测试增量更新

    • 测试批量计算

    • 与参考实现(TA-Lib)进行验证

  5. 添加 Python 绑定(如适用)

    • bindings/python/techkit/indicators.py 中添加类

    • bindings/python/techkit/talib_compat.py 中添加 TA-Lib 兼容函数

  6. 添加 Node.js 绑定(如适用)

    • bindings/wasm/src/ 中添加工厂函数

    • exports_*.txt 中导出

  7. 更新文档

    • 添加到 API 参考

    • 更新指标清单

指标模板

// src/indicators/<name>.cpp
#include "techkit/internal/indicator_base.hpp"

namespace techkit {

class <Name>Indicator : public IndicatorBase {
public:
    explicit <Name>Indicator(int period) 
        : IndicatorBase(period), period_(period) {
        // Initialize state
    }
    
    void reset() override {
        IndicatorBase::reset();
        // Reset internal state
    }
    
    tk_result update(double value) override {
        // Incremental update logic
        // Return {value, valid}
    }
    
    int lookback() const override {
        return period_ - 1;  // Adjust based on algorithm
    }
    
private:
    int period_;
    // Internal state
};

} // namespace techkit

测试

运行测试

# C++ tests
cd build
cmake ..
make
ctest --output-on-failure

# Python tests
cd bindings/python
python -m pytest tests/

# Node.js tests
cd bindings/packages/techkit
npm test

编写测试

  • 测试增量和批量两种模式

  • 与 TA-Lib 或其他参考实现进行验证

  • 测试边界情况(空输入、无效参数)

  • 测试预热期行为

Pull Request 流程

  1. Fork 仓库

  2. 创建功能分支git checkout -b feature/my-indicator

  3. 进行更改

  4. 为更改添加测试

  5. 运行所有测试以确保没有破坏任何功能

  6. 更新文档(如需要)

  7. 提交更改:遵循提交信息格式

  8. 推送到您的 Forkgit push origin feature/my-indicator

  9. 创建 Pull Request

提交信息格式

<type>(<scope>): <subject>

<body>

<footer>

类型:

  • feat:新指标或功能

  • fix:Bug 修复

  • docs:文档更改

  • test:测试添加或更改

  • refactor:代码重构

  • perf:性能改进

示例:

feat(indicators): Add XYZ indicator

Implements XYZ indicator with O(1) incremental updates.
Validated against TA-Lib with < 1e-10 error tolerance.

Closes #123

代码审查指南

  • 所有 PR 需要至少一个批准

  • 确保测试通过

  • 检查代码风格合规性

  • 验证文档已更新

  • 确认没有内存泄漏(使用 valgrind)

有问题?

如有问题或想讨论贡献相关事宜,请随时创建 Issue。