2

我正在尝试使用 C++ 中的 ta-lib 库对这些数据进行一些技术分析。问题在于,关于它们在 C++ 中的使用的教程很少(除了文档之外几乎没有)。我将电子表格中的值(第三/第 C 列)转换为大小为 124 的向量 double。我想使用此向量计算 10 天周期的 EMA 和 RSI。这是ta-libopenvec

    //headers used
    #include <vector>
    #include <ta-lib/ta_libc.h>
    std::vector <double> vec;

    //Technical analysis part of the code
    int n=vec.size();  //size of the vector
    std::cout <<"size "<< n  << ' ';
    TA_RetCode retCode;
    retCode = TA_Initialize( );
    if( retCode != TA_SUCCESS )
        std::cout<<"Cannot initialize TA-Lib !\n"<< retCode <"\n";
    else
    {
        std::cout<<"TA-Lib correctly initialized.\n" ;

        /* ... other TA-Lib functions can be used here. */
        double ma=TA_MA(0,n,vec,10,TA_MAType_EMA);
        double rsi=TA_RSI(0,n,vec,10);
        std::cout <<"EMA "<< ma <<"\n";
        std::cout <<"RSI "<< rsi <<"\n";
        TA_Shutdown();
    }

错误是

错误:无法将参数 '3' 的 'std::vector' 转换为 'const double*' 到 'TA_RetCode TA_MA(int, int, const double*, int, TA_MAType, int*, int*, double*)

4

1 回答 1

2

好吧,您的代码完全错误。

  1. 如果你想坚持下去,std::vector你需要传递 vec.data()给 TA-Lib 的函数而不是vec.

  2. 为什么你认为TA_MA()返回 MA 值?TA_RetCode它们都返回 TA_SUCCESS错误代码或错误代码。它在您提供的错误消息和 文档中进行了说明。并且有一个很好的示例说明如何使用静态数组调用此类函数。

  3. 为什么你认为你可以忽略最后 3 个参数,TA_MA其中的最后 3 个参数是指向应该存储结果的数组的指针(结果是移动 MA 及其索引的数组)?如果你想坚持, std::vector<double>你必须为结果声明一个,并用足够数量的值预填充它(为存储分配内存)。然后你可以std::vector<double>::data()再次使用。
于 2016-07-27T13:02:35.517 回答