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

ta lib - How to use ta-lib library for technical analysis with C++

本文关键字:技术 C++ lib 何使用 ta-lib ta      更新时间:2023-10-16

我正在尝试使用 C++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. 如果你想坚持std::vector你需要通过 vec.data() TA-Lib 的功能而不是vec .

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

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