Ta-lib 函数一览

import tkinter as tk

from tkinter import ttk

import matplotlib.pyplot as plt

import numpy as np

import talib as ta

series = np.random.choice([1, -1], size=200)

close = np.cumsum(series).astype(float)

# 重叠指标

def overlap_process(event):

    print(event.widget.get())

    overlap = event.widget.get()


    upperband, middleband, lowerband = ta.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)

    fig, axes = plt.subplots(2, 1, sharex=True)

    ax1, ax2 = axes[0], axes[1]

    axes[0].plot(close, 'rd-', markersize=3)

    axes[0].plot(upperband, 'y-')

    axes[0].plot(middleband, 'b-')

    axes[0].plot(lowerband, 'y-')

    axes[0].set_title(overlap, fontproperties="SimHei")


    if overlap == '布林线':

        pass

    elif overlap == '双指数移动平均线':

        real = ta.DEMA(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    elif overlap == '指数移动平均线 ':

        real = ta.EMA(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    elif overlap == '希尔伯特变换——瞬时趋势线':

        real = ta.HT_TRENDLINE(close)

        axes[1].plot(real, 'r-')

    elif overlap == '考夫曼自适应移动平均线':

        real = ta.KAMA(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    elif overlap == '移动平均线':

        real = ta.MA(close, timeperiod=30, matype=0)

        axes[1].plot(real, 'r-')

    elif overlap == 'MESA自适应移动平均':

        mama, fama = ta.MAMA(close, fastlimit=0, slowlimit=0)

        axes[1].plot(mama, 'r-')

        axes[1].plot(fama, 'g-')

    elif overlap == '变周期移动平均线':

        real = ta.MAVP(close, periods, minperiod=2, maxperiod=30, matype=0)

        axes[1].plot(real, 'r-')

    elif overlap == '简单移动平均线':

        real = ta.SMA(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    elif overlap == '三指数移动平均线(T3)':

        real = ta.T3(close, timeperiod=5, vfactor=0)

        axes[1].plot(real, 'r-')

    elif overlap == '三指数移动平均线':

        real = ta.TEMA(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    elif overlap == '三角形加权法 ':

        real = ta.TRIMA(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    elif overlap == '加权移动平均数':

        real = ta.WMA(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    plt.show()

# 动量指标

def momentum_process(event):

    print(event.widget.get())

    momentum = event.widget.get()


    upperband, middleband, lowerband = ta.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)

    fig, axes = plt.subplots(2, 1, sharex=True)

    ax1, ax2 = axes[0], axes[1]

    axes[0].plot(close, 'rd-', markersize=3)

    axes[0].plot(upperband, 'y-')

    axes[0].plot(middleband, 'b-')

    axes[0].plot(lowerband, 'y-')

    axes[0].set_title(momentum, fontproperties="SimHei")


    if momentum == '绝对价格振荡器':

        real = ta.APO(close, fastperiod=12, slowperiod=26, matype=0)

        axes[1].plot(real, 'r-')

    elif momentum == '钱德动量摆动指标':

        real = ta.CMO(close, timeperiod=14)

        axes[1].plot(real, 'r-')

    elif momentum == '移动平均收敛/散度':

        macd, macdsignal, macdhist = ta.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)

        axes[1].plot(macd, 'r-')

        axes[1].plot(macdsignal, 'g-')

        axes[1].plot(macdhist, 'b-')

    elif momentum == '带可控MA类型的MACD':

        macd, macdsignal, macdhist = ta.MACDEXT(close, fastperiod=12, fastmatype=0, slowperiod=26, slowmatype=0, signalperiod=9, signalmatype=0)

        axes[1].plot(macd, 'r-')

        axes[1].plot(macdsignal, 'g-')

        axes[1].plot(macdhist, 'b-')

    elif momentum == '移动平均收敛/散度 固定 12/26':

        macd, macdsignal, macdhist = ta.MACDFIX(close, signalperiod=9)

        axes[1].plot(macd, 'r-')

        axes[1].plot(macdsignal, 'g-')

        axes[1].plot(macdhist, 'b-')

    elif momentum == '动量':

        real = ta.MOM(close, timeperiod=10)

        axes[1].plot(real, 'r-')

    elif momentum == '比例价格振荡器':

        real = ta.PPO(close, fastperiod=12, slowperiod=26, matype=0)

        axes[1].plot(real, 'r-')

    elif momentum == '变化率':

        real = ta.ROC(close, timeperiod=10)

        axes[1].plot(real, 'r-')

    elif momentum == '变化率百分比':

        real = ta.ROCP(close, timeperiod=10)

        axes[1].plot(real, 'r-')

    elif momentum == '变化率的比率':

        real = ta.ROCR(close, timeperiod=10)

        axes[1].plot(real, 'r-')

    elif momentum == '变化率的比率100倍':

        real = ta.ROCR100(close, timeperiod=10)

        axes[1].plot(real, 'r-')

    elif momentum == '相对强弱指数':

        real = ta.RSI(close, timeperiod=14)

        axes[1].plot(real, 'r-')

    elif momentum == '随机相对强弱指标':

        fastk, fastd = ta.STOCHRSI(close, timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)

        axes[1].plot(fastk, 'r-')

        axes[1].plot(fastd, 'r-')

    elif momentum == '三重光滑EMA的日变化率':

        real = ta.TRIX(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    plt.show()


# 周期指标

def cycle_process(event):

    print(event.widget.get())

    cycle = event.widget.get()


    upperband, middleband, lowerband = ta.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)

    fig, axes = plt.subplots(2, 1, sharex=True)

    ax1, ax2 = axes[0], axes[1]

    axes[0].plot(close, 'rd-', markersize=3)

    axes[0].plot(upperband, 'y-')

    axes[0].plot(middleband, 'b-')

    axes[0].plot(lowerband, 'y-')

    axes[0].set_title(cycle, fontproperties="SimHei")


    if cycle == '希尔伯特变换——主要的循环周期':

        real = ta.HT_DCPERIOD(close)

        axes[1].plot(real, 'r-')

    elif cycle == '希尔伯特变换,占主导地位的周期阶段':

        real = ta.HT_DCPHASE(close)

        axes[1].plot(real, 'r-')

    elif cycle == '希尔伯特变换——相量组件':

        inphase, quadrature = ta.HT_PHASOR(close)

        axes[1].plot(inphase, 'r-')

        axes[1].plot(quadrature, 'g-')

    elif cycle == '希尔伯特变换——正弦曲线':

        sine, leadsine = ta.HT_SINE(close)

        axes[1].plot(sine, 'r-')

        axes[1].plot(leadsine, 'g-')

    elif cycle == '希尔伯特变换——趋势和周期模式':

        integer = ta.HT_TRENDMODE(close)

        axes[1].plot(integer, 'r-')


    plt.show()



# 统计功能

def statistic_process(event):

    print(event.widget.get())

    statistic = event.widget.get()


    upperband, middleband, lowerband = ta.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)

    fig, axes = plt.subplots(2, 1, sharex=True)

    ax1, ax2 = axes[0], axes[1]

    axes[0].plot(close, 'rd-', markersize=3)

    axes[0].plot(upperband, 'y-')

    axes[0].plot(middleband, 'b-')

    axes[0].plot(lowerband, 'y-')

    axes[0].set_title(statistic, fontproperties="SimHei")


    if statistic == '线性回归':

        real = ta.LINEARREG(close, timeperiod=14)

        axes[1].plot(real, 'r-')

    elif statistic == '线性回归角度':

        real = ta.LINEARREG_ANGLE(close, timeperiod=14)

        axes[1].plot(real, 'r-')

    elif statistic == '线性回归截距':

        real = ta.LINEARREG_INTERCEPT(close, timeperiod=14)

        axes[1].plot(real, 'r-')

    elif statistic == '线性回归斜率':

        real = ta.LINEARREG_SLOPE(close, timeperiod=14)

        axes[1].plot(real, 'r-')

    elif statistic == '标准差':

        real = ta.STDDEV(close, timeperiod=5, nbdev=1)

        axes[1].plot(real, 'r-')

    elif statistic == '时间序列预测':

        real = ta.TSF(close, timeperiod=14)

        axes[1].plot(real, 'r-')

    elif statistic == '方差':

        real = ta.VAR(close, timeperiod=5, nbdev=1)

        axes[1].plot(real, 'r-')

    plt.show()


# 数学变换

def math_transform_process(event):

    print(event.widget.get())

    math_transform = event.widget.get()


    upperband, middleband, lowerband = ta.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)

    fig, axes = plt.subplots(2, 1, sharex=True)

    ax1, ax2 = axes[0], axes[1]

    axes[0].plot(close, 'rd-', markersize=3)

    axes[0].plot(upperband, 'y-')

    axes[0].plot(middleband, 'b-')

    axes[0].plot(lowerband, 'y-')

    axes[0].set_title(math_transform, fontproperties="SimHei")


    if math_transform == '反余弦':

        real = ta.ACOS(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '反正弦':

        real = ta.ASIN(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '反正切':

        real = ta.ATAN(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '向上取整':

        real = ta.CEIL(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '余弦':

        real = ta.COS(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '双曲余弦':

        real = ta.COSH(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '指数':

        real = ta.EXP(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '向下取整':

        real = ta.FLOOR(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '自然对数':

        real = ta.LN(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '常用对数':

        real = ta.LOG10(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '正弦':

        real = ta.SIN(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '双曲正弦':

        real = ta.SINH(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '平方根':

        real = ta.SQRT(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '正切':

        real = ta.TAN(close)

        axes[1].plot(real, 'r-')

    elif math_transform == '双曲正切':

        real = ta.TANH(close)

        axes[1].plot(real, 'r-')


    plt.show()


# 数学操作

def math_operator_process(event):

    print(event.widget.get())

    math_operator = event.widget.get()


    upperband, middleband, lowerband = ta.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)

    fig, axes = plt.subplots(2, 1, sharex=True)

    ax1, ax2 = axes[0], axes[1]

    axes[0].plot(close, 'rd-', markersize=3)

    axes[0].plot(upperband, 'y-')

    axes[0].plot(middleband, 'b-')

    axes[0].plot(lowerband, 'y-')

    axes[0].set_title(math_operator, fontproperties="SimHei")



    if math_operator == '指定的期间的最大值':

        real = ta.MAX(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    elif math_operator == '指定的期间的最大值的索引':

        integer = ta.MAXINDEX(close, timeperiod=30)

        axes[1].plot(integer, 'r-')

    elif math_operator == '指定的期间的最小值':

        real = ta.MIN(close, timeperiod=30)

        axes[1].plot(real, 'r-')

    elif math_operator == '指定的期间的最小值的索引':

        integer = ta.MININDEX(close, timeperiod=30)

        axes[1].plot(integer, 'r-')

    elif math_operator == '指定的期间的最小和最大值':

        min, max = ta.MINMAX(close, timeperiod=30)

        axes[1].plot(min, 'r-')

        axes[1].plot(max, 'r-')

    elif math_operator == '指定的期间的最小和最大值的索引':

        minidx, maxidx = ta.MINMAXINDEX(close, timeperiod=30)

        axes[1].plot(minidx, 'r-')

        axes[1].plot(maxidx, 'r-')

    elif math_operator == '合计':

        real = ta.SUM(close, timeperiod=30)

        axes[1].plot(real, 'r-')


    plt.show()



root = tk.Tk()

# 第一行:重叠指标

rowframe1 = tk.Frame(root)

rowframe1.pack(side=tk.TOP, ipadx=3, ipady=3)

tk.Label(rowframe1, text="重叠指标").pack(side=tk.LEFT)

overlap_indicator = tk.StringVar() # 重叠指标

combobox1 = ttk.Combobox(rowframe1, textvariable=overlap_indicator)

combobox1['values'] = ['布林线','双指数移动平均线','指数移动平均线 ','希尔伯特变换——瞬时趋势线',

                      '考夫曼自适应移动平均线','移动平均线','MESA自适应移动平均','变周期移动平均线',

                      '简单移动平均线','三指数移动平均线(T3)','三指数移动平均线','三角形加权法 ','加权移动平均数']

combobox1.current(0)

combobox1.pack(side=tk.LEFT)

combobox1.bind('<<ComboboxSelected>>', overlap_process)

# 第二行:动量指标

rowframe2 = tk.Frame(root)

rowframe2.pack(side=tk.TOP, ipadx=3, ipady=3)

tk.Label(rowframe2, text="动量指标").pack(side=tk.LEFT)

momentum_indicator = tk.StringVar() # 动量指标

combobox2 = ttk.Combobox(rowframe2, textvariable=momentum_indicator)

combobox2['values'] = ['绝对价格振荡器','钱德动量摆动指标','移动平均收敛/散度','带可控MA类型的MACD',

                      '移动平均收敛/散度 固定 12/26','动量','比例价格振荡器','变化率','变化率百分比',

                      '变化率的比率','变化率的比率100倍','相对强弱指数','随机相对强弱指标','三重光滑EMA的日变化率']

combobox2.current(0)

combobox2.pack(side=tk.LEFT)

combobox2.bind('<<ComboboxSelected>>', momentum_process)

# 第三行:周期指标

rowframe3 = tk.Frame(root)

rowframe3.pack(side=tk.TOP, ipadx=3, ipady=3)

tk.Label(rowframe3, text="周期指标").pack(side=tk.LEFT)

cycle_indicator = tk.StringVar() # 周期指标

combobox3 = ttk.Combobox(rowframe3, textvariable=cycle_indicator)

combobox3['values'] = ['希尔伯特变换——主要的循环周期','希尔伯特变换——主要的周期阶段','希尔伯特变换——相量组件',

                      '希尔伯特变换——正弦曲线','希尔伯特变换——趋势和周期模式']

combobox3.current(0)

combobox3.pack(side=tk.LEFT)

combobox3.bind('<<ComboboxSelected>>', cycle_process)

# 第四行:统计功能

rowframe4 = tk.Frame(root)

rowframe4.pack(side=tk.TOP, ipadx=3, ipady=3)

tk.Label(rowframe4, text="统计功能").pack(side=tk.LEFT)

statistic_indicator = tk.StringVar() # 统计功能

combobox4 = ttk.Combobox(rowframe4, textvariable=statistic_indicator)

combobox4['values'] = ['贝塔系数;投资风险与股市风险系数','皮尔逊相关系数','线性回归','线性回归角度',

                      '线性回归截距','线性回归斜率','标准差','时间序列预测','方差']

combobox4.current(0)

combobox4.pack(side=tk.LEFT)

combobox4.bind('<<ComboboxSelected>>', statistic_process)

# 第五行:数学变换

rowframe5 = tk.Frame(root)

rowframe5.pack(side=tk.TOP, ipadx=3, ipady=3)

tk.Label(rowframe5, text="数学变换").pack(side=tk.LEFT)

math_transform = tk.StringVar() # 数学变换

combobox5 = ttk.Combobox(rowframe5, textvariable=math_transform_process)

combobox5['values'] = ['反余弦','反正弦','反正切','向上取整','余弦','双曲余弦','指数','向下取整',

                      '自然对数','常用对数','正弦','双曲正弦','平方根','正切','双曲正切']

combobox5.current(0)

combobox5.pack(side=tk.LEFT)

combobox5.bind('<<ComboboxSelected>>', math_transform_process)

# 第六行:数学操作

rowframe6 = tk.Frame(root)

rowframe6.pack(side=tk.TOP, ipadx=3, ipady=3)

tk.Label(rowframe6, text="数学操作").pack(side=tk.LEFT)

math_operator = tk.StringVar() # 数学操作

combobox6 = ttk.Combobox(rowframe6, textvariable=math_operator_process)

combobox6['values'] = ['指定期间的最大值','指定期间的最大值的索引','指定期间的最小值','指定期间的最小值的索引',

                      '指定期间的最小和最大值','指定期间的最小和最大值的索引','合计']

combobox6.current(0)

combobox6.pack(side=tk.LEFT)

combobox6.bind('<<ComboboxSelected>>', math_operator_process)

root.mainloop()


原文地址

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 今天我去考了教师资格证,很早就过去了,过去的时候先去了一个大厅等待。 先是发了一个信笺,里面是编号,然后按照顺序抽...
    子木曦雨阅读 364评论 0 0
  • 文/小玲 快八个月的小柠檬头发已经很长了,我计划着带他去剪头发。心里已想好了无数个喜欢的发型,最最钟爱的还是军剪头...
    小玲00阅读 257评论 0 1
  • 从小到大,总不间断地做着同一类型的梦,梦里凶恶的小动物,张着嘴咆哮着扑我而来,撕咬。我极度恐怖,害怕地与之搏动,有...
    一心jiang阅读 250评论 0 0
  • 在伯凡.日知录里听到一个关于学习计划的实验研究结论,与之前我自己在经验贴里总结的不谋而合,窃喜之余也介绍给大家,希...
    暖暖的小南阅读 158评论 0 0
  • 村居 清 高鼎 草长莺飞二月天, 拂堤杨柳醉春烟。 儿童散学归来早, 忙趁东风放纸鸢。 【译文】 二月时节,草儿长...
    Ice的零度空间阅读 839评论 0 0