ta lib — Как использовать библиотеку ta-lib для технического анализа с помощью Stack Overflow

Я пытаюсь сделать некоторый технический анализ эти данные с помощью та Пб библиотека в C ++. Проблема с ta-lib в том, что существует очень мало (скорее всего, нет, кроме документации) учебников по их использованию в C ++. Я преобразовал open значения (третий / C-й столбец) в электронной таблице к вектору double vec размером 124. Я хочу использовать этот вектор для расчета EMA и RSI 10-дневного периода. Это

    //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

Решение

Ну, твой код совершенно неверный.

  1. Если вы хотите придерживаться std::vector тебе нужно пройти
    vec.data() к функциям TA-Lib вместо vec,

  2. Почему вы думаете TA_MA() возвращает значение МА? Они все возвращаются
    TA_RetCode с TA_SUCCESS или код ошибки. Заявлено по ошибке
    сообщение, которое вы предоставляете и в
    документация.
    И есть хороший пример того, как вызвать такую ​​функцию со статическим
    массивы.

  3. Почему вы думаете, что можете игнорировать последние 3 параметра TA_MA который является
    указатель на массив, где должны храниться результаты (результат — массив
    движущиеся МА и его индексы)? Если вы хотите придерживаться
    std::vector<double> Вы должны объявить один для результатов и предварительно заполнить
    это с достаточным количеством значений (выделить память для хранения).
    Тогда вы можете использовать std::vector<double>::data() снова.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]