我如何在 C++ 中调用 talib macd?
how can i call talib macd in c++?
我可以在 python 中正确使用 talib MACD 函数,但在 c++ 中失败。
talib 在 python 中易于使用,我可以将其用作:
MACD(close, 12, 26,9) # close is a pandas series
但是当我在 C++ 中使用它时,它让我对参数感到困惑。
我有一个函数可以一次更新一个收盘价,所以我将收盘价序列保存在一个向量中,如下所示:
std::vector<double> close_price;
void f(double new_close) {
close_price.push_back(new_close);
std::vector<TA_Real> a(655360, 0.0);
std::vector<TA_Real> b(655360, 0.0);
std::vector<TA_Real> c(655360, 0.0);
int s, n;
TA_RetCode retCode = TA_MACD(0, close_price.size(), close_price.data(), 3, 12, 1, &s, &n, a.data(), b.data(), c.data());
assert(retCode == TA_SUCCESS);
}
但断言总是失败,错误消息是:
Error 5119(TA_INTERNAL_ERROR): Unexpected Internal Error - Contact TA-Lib.org
我错过了什么吗?我想我将参数作为 talib 提供的示例传递。
endIdx
是最后一个索引,不是大小。因此,您需要将其称为:
TA_MACD(..., close_price.size() - 1, ...);
我可以在 python 中正确使用 talib MACD 函数,但在 c++ 中失败。
talib 在 python 中易于使用,我可以将其用作:
MACD(close, 12, 26,9) # close is a pandas series
但是当我在 C++ 中使用它时,它让我对参数感到困惑。
我有一个函数可以一次更新一个收盘价,所以我将收盘价序列保存在一个向量中,如下所示:
std::vector<double> close_price;
void f(double new_close) {
close_price.push_back(new_close);
std::vector<TA_Real> a(655360, 0.0);
std::vector<TA_Real> b(655360, 0.0);
std::vector<TA_Real> c(655360, 0.0);
int s, n;
TA_RetCode retCode = TA_MACD(0, close_price.size(), close_price.data(), 3, 12, 1, &s, &n, a.data(), b.data(), c.data());
assert(retCode == TA_SUCCESS);
}
但断言总是失败,错误消息是:
Error 5119(TA_INTERNAL_ERROR): Unexpected Internal Error - Contact TA-Lib.org
我错过了什么吗?我想我将参数作为 talib 提供的示例传递。
endIdx
是最后一个索引,不是大小。因此,您需要将其称为:
TA_MACD(..., close_price.size() - 1, ...);