TA-Lib是开源的金融时间序列技术指标计算库,支持多语言,多平台,支持包含基本向量计算和各种常用技术指标的计算以及K线形态的识别功能,支持C/C++,C#,java,python和excel。
在VS中使用TA-Lib
下载msvc源码http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-msvc.zip
解压后打开\ta-lib-0.4.0-msvc\ta-lib\c\ide\vs2005\lib_proj\ta_lib.sln编译,编译完成后运行ta_regtest.exe,位于ta-lib/c/bin目录,以确认dll调用无误。即可配置include和link路径。
不过需要注意不同编译配置选项,要与调用ta lib的主程序一致,否则会直接crash
静态库名称 | 使用运行时DLL | 多线程 | 包含调试信息 |
ta_libc_csr.lib | - | - | - |
ta_libc_csd.lib | - | - | 是 |
ta_libc_cmr.lib | - | 是 | - |
ta_libc_cmd.lib | - | 是 | 是 |
ta_libc_cdr.lib | 是 | 是 | - |
ta_libc_cdd.lib | 是 | 是 | 是 |
调用TA-Lib只需include一个头文件ta_libc.h,在调用指标计算函数前,调用且仅调用一次TA_Initialize函数
所有TA-Lib函数体均为如下形式
TA_RetCode TA_MAX( int startIdx, int endIdx, const double inReal[], int optInTimePeriod, /* From 2 to 100000 */ int *outBegIdx, int *outNBElement, double outReal[] );
startIdx和endIdx:输入数据计算范围,函数只计算从startIdx 到 endIdx参数范围内的输入数据;
inReal:输入数组,有的指标不止一个输入数组,所有的输入数组名都已“in”开头;
optInTimePeriod:opt开头的为可选输入,一般就是指标的参数。如果不关心以“optIn”开头的参数,只需指定TA_INTEGER_DEFAULT或TA_REAL_DEFAULT(取决于参数类型);
outReal:输出数组,有的指标不止一个输出数组,输出数组名都以“out”开头
outBegIdx:指定输出结果的起始index,这个index不是输出数组的index,输出的index都是从0开始
outNbElement:指定输出结果的个数,最后一个有效输出即
outReal[outNbElement-1]
每个TA_XXXX函数都有对应的TA_S_XXXX版本,区别仅仅是输入参数类型为float
另外,因为输出数组往往比输入数组小,为优化内存资源管理,TA-Lib提供TA_XXXX_Lookback函数用以内存分配,因此outReal数据内存分配有三种方式
allocationSize = endIdx + 1;
优点:指定从0到endIdx。易于理解和实现
缺点:指定范围很小时,可能会浪费很多空间
allocationSize = endIdx - startIdx + 1;
优点:指定从startIdx到endIdx,易于实现
缺点:分配略大于需要。例如,计算区间为30的SMA,由于需要回溯(lookback),会浪费29个元素的存储空间。
lookback = TA_XXXX_Lookback( ... ) ; temp = max( lookback, startIdx ); if( temp > endIdx ) allocationSize = 0; // No output else allocationSize = endIdx - temp + 1;
优点:优化分配空间算法;
缺点:实现略显复杂
例如TA_MAX_Lookback(10)将返回9,即前9个元素不产生输出
文章评论