使用C++ TA-Lib 计算移动平均线

  1. 下载C++ TA-Lib 源码并编译静态库: https://ta-lib.org/hdr_dw.html
  2. 编码
#include <vector>
#include "ta_libc.h"

std::vector<double> lastPriceVec;
double sma5[11];
double sma10[11];

void onTick(double lastPrice)
{
    lastPriceVec.push_back(lastPrice);
    if(lastPriceVec.size() < 10){
        // There must be at least ten items,
        // otherwise, it would raise an error when we calculate SMA10.
        return;
    }

    int outBegIdx = 0;
    int outNbElement = 0;
    int startIdx = lastPriceVec.size()-10;
    int endIdx = lastPriceVec.size()-1;

    TA_RetCode ret = TA_SMA(endIdx, endIdx, lastPriceVec.data(), 5, &outBegIdx,
        &outNbElement, sma5+startIdx);
    if(ret != TA_SUCCESS){
        printf("TA_SMA5 ERROR: %d\n", ret);
    } else {
        printf("TA_SMA5 outBegIdx:%d, outNbElement:%d, %f\n", outBegIdx, outNbElement, sma5[startIdx]);
    }

    ret = TA_SMA(endIdx, endIdx, lastPriceVec.data(), 10, &outBegIdx,
        &outNbElement, sma10+startIdx);
    if(ret != TA_SUCCESS){
        printf("TA_SMA10 ERROR: %d\n", ret);
    } else {
        printf("TA_SMA10 outBegIdx:%d, outNbElement:%d, %f\n", outBegIdx, outNbElement, sma10[startIdx]);
    }

    printf("sma5: %f, sma10: %f\n"
           "-----------------------------------------\n",
           sma5[startIdx], sma10[startIdx]);
}

int main()
{
    // i=1,2,3,...20
    for(int i = 1; i < 21; i++)
    {
        onTick(i);
    }
    return 0;
}
  1. 编译运行:
g++ -g -o ./bin/smatest ./src/smatest.cpp -I lib/ta-lib-0.4.0/include/ lib/ta-lib-0.4.0/lib/libta_lib.a
TA_SMA5 outBegIdx:9, outNbElement:1, 8.000000
TA_SMA10 outBegIdx:9, outNbElement:1, 5.500000
sma5: 8.000000, sma10: 5.500000
-----------------------------------------
TA_SMA5 outBegIdx:10, outNbElement:1, 9.000000
TA_SMA10 outBegIdx:10, outNbElement:1, 6.500000
sma5: 9.000000, sma10: 6.500000
-----------------------------------------
TA_SMA5 outBegIdx:11, outNbElement:1, 10.000000
TA_SMA10 outBegIdx:11, outNbElement:1, 7.500000
sma5: 10.000000, sma10: 7.500000
-----------------------------------------
TA_SMA5 outBegIdx:12, outNbElement:1, 11.000000
TA_SMA10 outBegIdx:12, outNbElement:1, 8.500000
sma5: 11.000000, sma10: 8.500000
-----------------------------------------
TA_SMA5 outBegIdx:13, outNbElement:1, 12.000000
TA_SMA10 outBegIdx:13, outNbElement:1, 9.500000
sma5: 12.000000, sma10: 9.500000
-----------------------------------------
TA_SMA5 outBegIdx:14, outNbElement:1, 13.000000
TA_SMA10 outBegIdx:14, outNbElement:1, 10.500000
sma5: 13.000000, sma10: 10.500000
-----------------------------------------
TA_SMA5 outBegIdx:15, outNbElement:1, 14.000000
TA_SMA10 outBegIdx:15, outNbElement:1, 11.500000
sma5: 14.000000, sma10: 11.500000
-----------------------------------------
TA_SMA5 outBegIdx:16, outNbElement:1, 15.000000
TA_SMA10 outBegIdx:16, outNbElement:1, 12.500000
sma5: 15.000000, sma10: 12.500000
-----------------------------------------
TA_SMA5 outBegIdx:17, outNbElement:1, 16.000000
TA_SMA10 outBegIdx:17, outNbElement:1, 13.500000
sma5: 16.000000, sma10: 13.500000
-----------------------------------------
TA_SMA5 outBegIdx:18, outNbElement:1, 17.000000
TA_SMA10 outBegIdx:18, outNbElement:1, 14.500000
sma5: 17.000000, sma10: 14.500000
-----------------------------------------
TA_SMA5 outBegIdx:19, outNbElement:1, 18.000000
TA_SMA10 outBegIdx:19, outNbElement:1, 15.500000
sma5: 18.000000, sma10: 15.500000
-----------------------------------------

在windows 7 x64下安装ta-lib包 python 2.7 x86,32位 anaconda2 4.0.0-32位(Anaconda2-4.4.0-Windows-x86) 如果Python,或者anaconda是3.5以上,64位,可以直接:conda install ta-lib或者pip install ta-lib即可。 以下主要说明32位python安装ta-lib的步骤和错误解决。 一、下载Microsoft Visual C++ Compiler for Python 2.7 https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266 VCForPython27.msi(80多MB,请自己下载吧) 双击VCForPython27.msi安装 二、下载ta-lib源码包: http://http//prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-msvc.zip【本教程有提供,可以不用下载】 MSVC是微软windows版的talib 解压到C:\ta-lib 这时候,我们继续执行pip install TA-Lib,很可能你就安装成功了。但如果你是64位的系统,可能还是会遇到问题 common.obj : error LNK2019: unresolved external symbol TA_Initialize referenced in function __pyx_pf_5talib_6common_2_ta_initialize 这个问题有点高级,看起来说是链接错误,很多人到这就不知道怎么办了,网上也没有很好的办法。这个问题的来由是,我们下载的ta-lib除了头文件外,还有编译好的库,但是这个库是32位系统编译好的,所以我们需要在64位系统下面重新编译它。还好,我们下载的ta-lib就包含了源码,而编译工具就是之前安装的Microsoft Visual C++ Compiler for Python 2.7。 打开【开始菜单】》【Microsoft Visual C++ Compiler Package for Python 2.7】》【Visual C++ 2008 64-bit Command Prompt】,然后在控制台里面进入到目录C:\ta-lib\c\make\cdr\win32\msvc。执行nmake,一段时间后,新的64位库就编译好了 三、下载ta-lib的python包【本教程有提供,可以不用下载】 Python Extension Packages for Windows - Christoph Gohlke http://www.lfd.uci.edu/~gohlke/pythonlibs/ TA-Lib, a wrapper for the TA-LIB Technical Analysis Library. TA_Lib‑0.4.10‑cp27‑cp27m‑win32.whl 继续在刚才这个Visual C++ 2008 64-bit Command Prompt下执行pip install c:\downloads\TA_Lib‑0.4.10‑cp27‑cp27m‑win32.whl 提示:successful xxxx。 在python下import talib,没报错,成功了。 四、报错注意: 步骤三如果使用pip install TA-Lib。。。有可能还会报下边的错: common.c talib\common.c(240) : fatal error C1083: Cannot open include file: 'ta_libc.h': No such file or directory 使用上面提到的whl文件,pip install ***.whl即可。 参考内容: python27在windows环境安装talib的方法 - kuailelife - 优快云博客 http://blog.youkuaiyun.com/kuaile20/article/details/68594755 Windows下安装TA-Lib - AegisRC的专栏 - 优快云博客 http://blog.youkuaiyun.com/yiigel/article/details/54353758 Windows 10 安装TA-Lib python库 - 哈鲁曼 - 博客园 http://www.cnblogs.com/Hanuman/p/5943608.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值