我正在尝试使用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 *)
答案 0 :(得分:1)
嗯,你的代码是完全错误的。
如果你想坚持std::vector
,你需要通过
vec.data()
使用TA-Lib的功能代替vec
。
为什么您认为TA_MA()
会返回MA值?他们都回来了
TA_RetCode
TA_SUCCESS
或错误代码。它的陈述是错误的
您提供的信息
documentation。
并且有一个很好的示例,说明如何使用静态调用此类函数
阵列。
TA_MA
的最后3个参数
指向数组的指针,其中应存储结果(结果是数组
移动MA及其索引)?如果你想坚持下去
std::vector<double>
您必须声明一个结果和预填充
它具有足够数量的值(为存储分配内存)。
然后,您可以再次使用std::vector<double>::data()
。