2

C++の ta-libライブラリを使用して、このデータの技術分析を行おうとしています。問題は、C++ での使用法に関するチュートリアルがほとんどないことです (ほとんどの場合、ドキュメント以外にはありません)。スプレッドシートの値 (3 列目/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' を 'TA_RetCode TA_MA(int, int, const double*, int, TA_MAType, int*, int*, double*) の場合、'std::vector' を 'const double*' に変換できません

4

1 に答える 1

2

さて、あなたのコードは完全に間違っています。

  1. に固執したい場合は、の代わりに TA-Lib の関数にstd::vector渡す必要があります 。vec.data()vec

  2. TA_MA()なぜMA 値を返すと思いますか? それらはすべて 、またはエラー コードで返さTA_RetCodeれます。TA_SUCCESSあなたが提供するエラーメッセージと ドキュメントに記載されています。そして、そのような関数を静的配列で呼び出す方法の良いサンプルがあります。

  3. TA_MA結果が格納される配列へのポインターである最後の 3 つのパラメーターを無視できると思うのはなぜですか(結果は移動する MA とそのインデックスの配列です)。固執したい場合は std::vector<double>、結果に対して1つを宣言し、十分な数の値を事前に入力する必要があります(ストレージ用のメモリを割り当てるため)。その後、再び使用できますstd::vector<double>::data()
于 2016-07-27T13:02:35.517 に答える