TA-Lib C++金融技术分析库使用初体验

版权声明:原创文章如需转载,请在左侧博主描述栏目扫码联系我并取得授权,谢谢 https://blog.csdn.net/u012234115/article/details/81513747

TA-Lib是一个用于金融技术分析的C++库,可以用来计算MACD,动量,移动均线等常用指标等
本文对TA-Lib做了一个简单的使用初体验

源码下载

地址:ta-lib
注意这里面有多个源码包,选择msvc这个版本(windows和linux编译都用这个版本的源码)

下载后源码目录

根目录ta-lib和ta-lib/c

这里写图片描述 这里写图片描述

编译

使用TA-Lib需要先编译出对应链接库,支持编译静态和动态连接库
本文已编译静态库为例,其中源码解压后根目录为ta-lib

windows

环境:win7 + vs2015
这里编译出x64的lib

打开VS2015 x64 Native Tools Command Prompt命令行执行

cd ta-lib\c\make\cmr\win32\msvc
nmake

注意

  • 这里可能会报gen_code失败,可以忽略,如果有其他问题,可以先nmake clean一下
  • 要确保ta-lib\c\lib这个目录是存在的

编译的结果在 ta-lib/c/lib目录
这里写图片描述

linux

环境:ubuntu14.04 + gcc4.8

命令行执行

cd ta-lib/c/make/cmr/linux/g++
make

编译的结果在 ta-lib/c/lib目录

.
├── libta_abstract_cmr.a
├── libta_common_cmr.a
├── libta_func_cmr.a
└── libta_libc_cmr.a

使用示例

windows

建立vs2015项目talibtest,配置ta-lib的包含头文件和包含库目录以及附加依赖项

  • include目录:D:\Programs\ta-lib\c\include
  • lib目录:D:\Programs\ta-lib\c\lib
  • 附加依赖项:ta_abstract_cmr.lib ta_common_cmr.lib ta_func_cmr.lib ta_libc_cmr.lib

linux

建立cmake项目talibtest,配置cmake文件

project(talibtest)
cmake_minimum_required(VERSION 2.8)
add_definitions(-std=c++11)

include_directories(/home/user/codetest/ta-lib/c/include)

aux_source_directory(. SRC_LIST)

link_directories(/home/user/codetest/ta-lib/c/lib)

add_executable(${PROJECT_NAME} ${SRC_LIST})

# link static library, notice the link sequence
target_link_libraries(${PROJECT_NAME}
                        libta_common_cmr.a
                        libta_libc_cmr.a
                        libta_abstract_cmr.a
                        libta_func_cmr.a)

代码

一个简单计算30天移动平均线的example

#include <iostream>
#include <time.h>
#include <assert.h>
#include "ta_libc.h"

int main()
{
    std::cout << "ta-lib test" << std::endl;

    // init ta-lib context
    TA_RetCode retcode;
    retcode = TA_Initialize();
    assert(retcode == TA_SUCCESS);

    // comput moving average price
    TA_Real    close_price_array[400] = { 0 };
    // construct random price
    srand((unsigned)time(0));
    for (int i = 0; i < 400; i++)
        close_price_array[i] = rand() % 50 + 100;

    TA_Real    out[400] = { 0 };
    TA_Integer out_begin = 0;
    TA_Integer out_nb_element = 0;

    retcode = TA_MA(0, 399,
        &close_price_array[0],
        30, TA_MAType_SMA,
        &out_begin, &out_nb_element, &out[0]);

    assert(retcode == TA_SUCCESS);

    std::cout << "---- compute output ----" << std::endl;
    std::cout << "out_begin_index: " << out_begin << std::endl;
    std::cout << "out_nb_element: " << out_nb_element << std::endl;
    std::cout << "out price array: " << std::endl;
    for (auto &price : out)
        std::cout << price << " ";

    retcode = TA_Shutdown();
    assert(retcode == TA_SUCCESS);

    return 0;
}

结果

ta-lib test
---- compute output ----
out_begin_index: 29
out_nb_element: 371
out price array: 
125.533 125.633 124.367 124.567 123.833 124.833 124.067 122.733 123.367 ...

猜你喜欢

转载自blog.csdn.net/u012234115/article/details/81513747
今日推荐