linux端口聚合tema,量化工具TA-Lib 使用例子

转发自:http://30daydo.com/article/196

TA-Lib主要用来计算一些股市中常见的指标。 比如MACD,BOLL,均线等参数。

#-*-coding=utf-8-*-

import Tkinter as tk

from Tkinter import *

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, '', markersize=3)

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

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

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

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

if overlap == '布林线':

pass

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

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

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

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

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

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

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

real = ta.HT_TRENDLINE(close)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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, '', markersize=3)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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, '')

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

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

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

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

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

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

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

elif momentum == '动量':

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

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

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

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

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

elif momentum == '变化率':

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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, '', markersize=3)

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

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

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

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

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

real = ta.HT_DCPERIOD(close)

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

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

real = ta.HT_DCPHASE(close)

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

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

inphase, quadrature = ta.HT_PHASOR(close)

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

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

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

sine, leadsine = ta.HT_SINE(close)

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

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

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

integer = ta.HT_TRENDMODE(close)

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

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, '', markersize=3)

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

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

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

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

if statistic == '线性回归':

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

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

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

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

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

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

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

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

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

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

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

elif statistic == '标准差':

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

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

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

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

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

elif statistic == '方差':

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

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

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, '', markersize=3)

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

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

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

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

if math_transform == '反余弦':

real = ta.ACOS(close)

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

elif math_transform == '反正弦':

real = ta.ASIN(close)

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

elif math_transform == '反正切':

real = ta.ATAN(close)

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

elif math_transform == '向上取整':

real = ta.CEIL(close)

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

elif math_transform == '余弦':

real = ta.COS(close)

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

elif math_transform == '双曲余弦':

real = ta.COSH(close)

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

elif math_transform == '指数':

real = ta.EXP(close)

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

elif math_transform == '向下取整':

real = ta.FLOOR(close)

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

elif math_transform == '自然对数':

real = ta.LN(close)

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

elif math_transform == '常用对数':

real = ta.LOG10(close)

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

elif math_transform == '正弦':

real = ta.SIN(close)

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

elif math_transform == '双曲正弦':

real = ta.SINH(close)

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

elif math_transform == '平方根':

real = ta.SQRT(close)

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

elif math_transform == '正切':

real = ta.TAN(close)

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

elif math_transform == '双曲正切':

real = ta.TANH(close)

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

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, '', markersize=3)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

elif math_operator == '合计':

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

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

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('<>', 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('<>', 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('<>', 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('<>', 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('<>', 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('<>', math_operator_process)

root.mainloop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用AngularJs编写的简单 益智游戏(附源代码)  这是一个简单的 javascript 项目。这是一个拼图游戏,也包含一个填字游戏。这个游戏玩起来很棒。有两个不同的版本可以玩这个游戏。你也可以玩填字游戏。 关于游戏 这款游戏的玩法很简单。如上所述,它包含拼图和填字游戏。您可以通过移动图像来玩滑动拼图。您还可以选择要在滑动面板中拥有的列数和网格数。 另一个是填字游戏。在这里你只需要找到浏览器左侧提到的那些单词。 要运行此游戏,您需要在系统上安装浏览器。下载并在代码编辑器中打开此项目。然后有一个 index.html 文件可供您修改。在命令提示符中运行该文件,或者您可以直接运行索引文件。使用 Google Chrome 或 FireFox 可获得更好的用户体验。此外,这是一款多人游戏,双方玩家都是人类。 这个游戏包含很多 JavaScript 验证。这个游戏很有趣,如果你能用一点 CSS 修改它,那就更好了。 总的来说,这个项目使用了很多 javascript 和 javascript 。如果你可以添加一些具有不同颜色选项的级别,那么你一定可以利用其来提高你的 javascript 技能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值