TA-Lib C++金融技術分析庫使用初體驗

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 ...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章