如何使用ta-lib库进行C ++技术分析

时间:2016-07-26 10:59:46

标签: c++ ta-lib technical-indicator

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

    //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();
    }

错误是

  

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

1 个答案:

答案 0 :(得分:1)

嗯,你的代码是完全错误的。

  1. 如果你想坚持std::vector,你需要通过 vec.data()使用TA-Lib的功能代替vec

  2. 为什么您认为TA_MA()会返回MA值?他们都回来了 TA_RetCode TA_SUCCESS或错误代码。它的陈述是错误的 您提供的信息 documentation。 并且有一个很好的示例,说明如何使用静态调用此类函数 阵列。

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