如何使用TA-LIB进行技术分析?

来源:互联网 发布:徐老师淘宝店叫什么 编辑:程序博客网 时间:2024/05/28 18:42

想要不依赖于商业软件或量化平台做技术分析,可以尝试使用本文中介绍的TA-LIB的C++库,全称为Technical Analysis Library。使用这个库可以与C++的回测框架做无缝连接,同时省去很多开发底层技术指标需要“浪费”的时间。而且,公开的库已经被充分地被用于实战检验,存在bug的几率小。


废话不多说,我们直接上一段入门代码:


TA_Initialize(); // 初始化TA-LIB,确保只调用一次TA_Integer startIdx = 0;TA_Integer endIdx = size - 1;TA_Integer outBegin;TA_Integer outNbElement;TA_Integer optPeriod = 30;TA_Integer allocationSize = 0;TA_Integer lookback = TA_SMA_Lookback(optPeriod);TA_Integer temp = max(lookback, startIdx);if (temp > endIdx) {    allocationSize = 0; // No output} else {    allocationSize = endIdx - temp +1;}TA_Real outMA[allocationSize];TA_RetCode retCode = TA_MA(startIdx, endIdx,                           &closePrice[0],                           optPeriod, TA_MAType_SMA,                           &outBegin, &outNbElement, &outMA[0]);for (int i=0; i < outNbElement; i++) {    printf("%s: %d = %f\n", updateTime[outBegin+i], outBegin+i, outMA[i]);}TA_Shutdown();


以上代码段是计算周期为30日、收盘价的简单移动平均线。一般地,技术指标序列要短于行情序列,比如30日均线必须要等到有30个交易日的收盘价才能计算第一个均值,如果使用行情序列的size作为输出数组的size,就会存在内存空间的浪费。Line7-Line16,利用TA_SMA_Lookback精确地计算需要的输出空间,其他策略有注入TA_XX_Lookback形式的函数可以使用。当然不计较内存的话,直接用endIdx-startIdx+1也是可以的。


TA_RetCode retCode = TA_MA(startIdx, endIdx,                            &closePrice[0],                            optPeriod, TA_MAType_SMA,                            &outBegin, &outNbElement, &outMA[0]);

核心函数是TA_MA,前两个参数startIdx和endIdx指定了由第三个参数&closePrice为起始内存地址的区间[startIdx, endIdx)的收盘价作为计算目标,optPeriod和TA_MAType_SMA分别为指标周期和指标类型。

outBegin是策略计算的开始地址,跟Line8中TA_SMA_Lookback()的返回值是一致地。outNbElement是输出的元素个数,等于max(0, endIdx-startIdx-optPeriod)。最后一个参数是输出计算结果的保存地址。


计算其他的技术指标类似,具体在使用的时候去参照头文件中的函数定义,参见ta_func.h。