Skip to content

Commit

Permalink
feat.trade_sys: 添加 SG_Add 等函数避免 alternate 问题
Browse files Browse the repository at this point in the history
由于 SG 的 alternate 默认为 True, 在使用如  "sg1 + sg2 + sg3"
的形式时,容易忽略 sg1 + sg2 的 alternate 属性,故添加 SG_Add 等函数
建议使用: SG_Add(sg1, sg2, False) + sg3 来避免 alternate 的问题

- 新增 SG_Add、SG_Sub、SG_Mul、SG_Div 函数
- 在 Python 接口中导出新增的函数
- 更新文档说明新函数的使用方法和注意事项
  • Loading branch information
fasiondog committed Feb 23, 2025
1 parent 2e0ed3a commit c4b746f
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
29 changes: 29 additions & 0 deletions hikyuu_cpp/hikyuu/trade_sys/signal/crt/SG_Logic.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,33 @@ inline SignalPtr operator|(const SignalPtr& sg1, const SignalPtr& sg2) {
return sg1 + sg2;
}

//------------------------------------------------------------------
// 由于 SG 的 alternate 默认为 True, 在使用如 "sg1 + sg2 + sg3"
// 的形式时,容易忽略 sg1 + sg2 的 alternate 属性,故添加 SG_Add 等函数
// 建议使用: SG_Add(sg1, sg2, False) + sg3 来避免 alternate 的问题
//------------------------------------------------------------------
inline SignalPtr SG_Add(const SignalPtr& sg1, const SignalPtr& sg2, bool alternate) {
auto sg = sg1 + sg2;
sg->setParam<bool>("alternate", alternate);
return sg;
}

inline SignalPtr SG_Sub(const SignalPtr& sg1, const SignalPtr& sg2, bool alternate) {
auto sg = sg1 - sg2;
sg->setParam<bool>("alternate", alternate);
return sg;
}

inline SignalPtr SG_Mul(const SignalPtr& sg1, const SignalPtr& sg2, bool alternate) {
auto sg = sg1 * sg2;
sg->setParam<bool>("alternate", alternate);
return sg;
}

inline SignalPtr SG_Div(const SignalPtr& sg1, const SignalPtr& sg2, bool alternate) {
auto sg = sg1 / sg2;
sg->setParam<bool>("alternate", alternate);
return sg;
}

} // namespace hku
50 changes: 50 additions & 0 deletions hikyuu_pywrap/trade_sys/_Signal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -269,4 +269,54 @@ void export_Signal(py::module& m) {
:param Indicator ind: 输入指标
:return: 信号指示器)");

m.def("SG_Add", SG_Add, py::arg("sg1"), py::arg("sg2"), py::arg("alternate"),
R"(SG_Add(sg1, sg2, alternate)
生成两个指标之和的信号
由于 SG 的 alternate 默认为 True, 在使用如 "sg1 + sg2 + sg3" 的形式时,容易忽略 sg1 + sg2 的 alternate 属性
建议使用: SG_Add(sg1, sg2, False) + sg3 来避免 alternate 的问题
:param SignalBase sg1: 输入信号1
:param SignalBase sg2: 输入信号2
:param bool alternate: 是否交替买入卖出,默认为True
:return: 信号指示器)");

m.def("SG_Sub", SG_Sub, py::arg("sg1"), py::arg("sg2"), py::arg("alternate"),
R"(SG_Sub(sg1, sg2, alternate)
生成两个指标之差的信号
由于 SG 的 alternate 默认为 True, 在使用如 "sg1 + sg2 + sg3" 的形式时,容易忽略 sg1 + sg2 的 alternate 属性
建议使用: SG_Add(sg1, sg2, False) + sg3 来避免 alternate 的问题
:param SignalBase sg1: 输入信号1
:param SignalBase sg2: 输入信号2
:param bool alternate: 是否交替买入卖出,默认为True
:return: 信号指示器)");

m.def("SG_Mul", SG_Mul, py::arg("sg1"), py::arg("sg2"), py::arg("alternate"),
R"(SG_Mul(sg1, sg2, alternate)
生成两个指标之差的信号
由于 SG 的 alternate 默认为 True, 在使用如 "sg1 + sg2 + sg3" 的形式时,容易忽略 sg1 + sg2 的 alternate 属性
建议使用: SG_Add(sg1, sg2, False) + sg3 来避免 alternate 的问题
:param SignalBase sg1: 输入信号1
:param SignalBase sg2: 输入信号2
:param bool alternate: 是否交替买入卖出,默认为True)");

m.def("SG_Div", SG_Div, py::arg("sg1"), py::arg("sg2"), py::arg("alternate"),
R"(SG_Div(sg1, sg2, alternate)
生成两个指标之差的信号
由于 SG 的 alternate 默认为 True, 在使用如 "sg1 + sg2 + sg3" 的形式时,容易忽略 sg1 + sg2 的 alternate 属性
建议使用: SG_Add(sg1, sg2, False) + sg3 来避免 alternate 的问题
:param SignalBase sg1: 输入信号1
:param SignalBase sg2: 输入信号2
:param bool alternate: 是否交替买入卖出,默认为True)");
}

0 comments on commit c4b746f

Please sign in to comment.