贡献指南
感谢您对 TechKit 的贡献兴趣!本指南将帮助您开始。
代码风格
C/C++ 风格
遵循代码库中现有的代码风格
使用 4 个空格进行缩进
最大行长度:100 个字符
函数和变量使用
snake_case类使用
PascalCase头文件中始终包含头文件保护
Python 风格
遵循 PEP 8
所有函数签名使用类型提示
最大行长度:100 个字符
函数和变量使用
snake_case类使用
PascalCase
添加新指标
实现步骤
在
src/indicators/中创建 C++ 实现遵循现有指标的模式
使用环形缓冲区实现 O(period) 内存
实现增量更新(O(1) 复杂度)
在
include/techkit/techkit_c.h中添加 C API 函数工厂函数:
tk_<name>_new(...)更新函数:
tk_update()或tk_<name>_update()如果是多输出,添加结果类型
在
src/c_api.cpp中实现 C API 包装器将 C 函数映射到 C++ 实现
处理参数验证
返回适当的错误代码
在
tests/test_<name>.cpp中添加测试测试增量更新
测试批量计算
与参考实现(TA-Lib)进行验证
添加 Python 绑定(如适用)
在
bindings/python/techkit/indicators.py中添加类在
bindings/python/techkit/talib_compat.py中添加 TA-Lib 兼容函数
添加 Node.js 绑定(如适用)
在
bindings/wasm/src/中添加工厂函数在
exports_*.txt中导出
更新文档
添加到 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 流程
Fork 仓库
创建功能分支:
git checkout -b feature/my-indicator进行更改
为更改添加测试
运行所有测试以确保没有破坏任何功能
更新文档(如需要)
提交更改:遵循提交信息格式
推送到您的 Fork:
git push origin feature/my-indicator创建 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。