# 贡献指南 感谢您对 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__new(...)` - 更新函数:`tk_update()` 或 `tk__update()` - 如果是多输出,添加结果类型 3. **在 `src/c_api.cpp` 中实现 C API 包装器** - 将 C 函数映射到 C++ 实现 - 处理参数验证 - 返回适当的错误代码 4. **在 `tests/test_.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 参考 - 更新指标清单 ### 指标模板 ```cpp // src/indicators/.cpp #include "techkit/internal/indicator_base.hpp" namespace techkit { class Indicator : public IndicatorBase { public: explicit 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 ``` ## 测试 ### 运行测试 ```bash # 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. **推送到您的 Fork**:`git push origin feature/my-indicator` 9. **创建 Pull Request** ### 提交信息格式 ``` ():