章丘公司做网站,出格做网站,wordpress后台没有小工具,wordpress 根据id获取文章在上一章中介绍了如何通过实时行情推送的Tick数据合成1分钟K线#xff0c;并且如何通过1分钟K线来合成更大周期的K线。本章主要介绍如何将K线通过numpy缓存到Array#xff0c;形成时间序列#xff0c;并且同时生成一些技术指标。
首先
导入包
talib主要用于计算各种技术分析…在上一章中介绍了如何通过实时行情推送的Tick数据合成1分钟K线并且如何通过1分钟K线来合成更大周期的K线。本章主要介绍如何将K线通过numpy缓存到Array形成时间序列并且同时生成一些技术指标。
首先
导入包
talib主要用于计算各种技术分析指标若要看它如何计算指标只有打开WingIDE中Python Shell用help功能就可以了。
想拓展的朋友可以看看这里talib金融库怎么用
import numpy as np
import talib
from vnpy.trader.vtConstant import *
from vnpy.trader.app.ctaStrategy.ctaBase import *
定义类ArrayManager
其作用是对K线时间序列的维护以及计算常用的技术指标
2.1 初始化参数
其中默认缓存size为100。开始初始化缓存计数缓存大小100初始化状态为FalseFalse表示缓存计数缓存size。创建numpy的Array开盘价最高价最低价收盘价和成交量都是由一系列默认为100为0的数组构成。
class ArrayManager(object):K线序列管理工具负责
1. K线时间序列的维护
2. 常用技术指标的计算#2.1----------------------------------------------------------------------
def __init__(self, size100):
Constructor
self.count 0 # 缓存计数
self.size size # 缓存大小
self.inited False # True if countsize
self.openArray np.zeros(size) # OHLC
self.highArray np.zeros(size)
self.lowArray np.zeros(size)
self.closeArray np.zeros(size)
self.volumeArray np.zeros(size)
2.2 定义K线更新函数updateBar
注意区分与BarGenerator的updateBar函数区别。BarGenerater是K线的生成器是ArrayManager 即 K线管理器的基础。
当第1根K线缓存下来就开始跑下面的逻辑判断了
if not self.inited and self.count self.size:
判断的格式为‘非a为真 且b为真’在这里aself.initedFalse, 非aTrue所以逻辑判断简化为当count100为真时初始化状态变成True
第1根K线 countcount0111100为False在100列所有为0的数组全部前移1位插入最新的openhighclose和volume。此时有99列为0的数组
第2根K线 countcount1122100为False在100列数组全部前移1位插入最新的openhighclose和volume。此时有98列为0的数组
。。。。。。
第99根K线 countcount9819999100为False在100列数组全部前移1位插入最新的openhighclose和volume。此时有1列为0的数组
第100根K线 countcount991100100100为True立刻更新self.inited为True通知交易系统界面初始化成功。同时在100列数组全部前移1位插入最新的openhighclose和volume。此时100列数组全部缓存了K线数据。
#2.2----------------------------------------------------------------------
def updateBar(self, bar):
更新K线
self.count 1
if not self.inited and self.count self.size:
self.inited True
self.openArray[0:self.size-1] self.openArray[1:self.size]
self.highArray[0:self.size-1] self.highArray[1:self.size]
self.lowArray[0:self.size-1] self.lowArray[1:self.size]
self.closeArray[0:self.size-1] self.closeArray[1:self.size]
self.volumeArray[0:self.size-1] self.volumeArray[1:self.size]
self.openArray[-1] bar.open
self.highArray[-1] bar.high
self.lowArray[-1] bar.low
self.closeArray[-1] bar.close
self.volumeArray[-1] bar.volume
2.3 定义属性函数
‘ property’可以将python定义的函数“当做”属性访问从而提供更加友好访问方式。将包含100个K线数据的开盘价最高价最低价收盘价和成交量的方法变成类的属性使他们跟容易访问和在需要的时候调用
#2.3----------------------------------------------------------------------
property
def open(self):
获取开盘价序列
return self.openArray
#----------------------------------------------------------------------
property
def high(self):
获取最高价序列
return self.highArray
#----------------------------------------------------------------------
property
def low(self):
获取最低价序列
return self.lowArray
#----------------------------------------------------------------------
property
def close(self):
获取收盘价序列
return self.closeArray
#----------------------------------------------------------------------
property
def volume(self):
获取成交量序列
return self.volumeArray
2.4 常用技术指标的计算
现在要用talib库来计算各种技术指标。
talib的简称是Technical Analysis Library主要功能是计算股价的技术分析指标。作为一套被业界广泛应用的开源技术分析库包含技术指标计算和K线模式识别等TA-Lib自2001年发布以来已经有了十多年的历史。TA-Lib中一共包含大约125个技术指标的计算函数同时提供了包括C/C、Java、Perl、Python等多种语言的API。
talib使用起来非常方便只要输入参数就能得到其技术指标的数值了。为了方便演示需要打开WingIDE的python Shell界面
例子1均线计算
简单移动平均线Simple Moving AverageSMA又称“算术移动平均线”是指对特定期间的收盘价进行简单平均化的意思。一般所提及之移动平均线即指简单移动平均线(SMA)。
简单移动平均线沿用最简单的统计学方式将过去某特定时间内的价格取其平均值。简单移动平均线计算方法如同其名——简单。它只是将每日得到的平均值连成一线并随时间移动每一支烛因而得到相同的数值。
在python Shell中输入然后回车
import talib
help(talib.SMA)
在talib中均线函数SMA入参2个一个是收盘价第二个是计算均线的周期默认周期是30出参是计算出来的均值
定义函数sma注意这里函数名称是小写Python大小写区分入参是周期数n和array默认值为False。调用talib的SMA函数计算均线。若array为默认值即False则只计算最新一条均线的数值否则若arrayTrue计算出所有均线数值。
def sma(self, n, arrayFalse):
简单均线
result talib.SMA(self.close, n)
if array:
return result
return result[-1]
例子2 RSI计算
RSI指标(Relative Strength Index) 是由韦尔斯.怀尔德(Welles Wilder)提出的是衡量证券自身内在相对强度的指标。它是根据一定时期内上涨和下跌幅度之和的比率制作出的一种技术曲线。能够反映出市场在一定时期内的景气程度。
同理在Python Shell中输入
help(talib.RSI)
回车
在talib中RSI函数入参2个一个是收盘价第二个是统计周期默认周期是14出参是RSI值
定义函数rsi入参是周期数n和array默认值为False。调用talib的RSI函数计算均线。若array为默认值即False则只计算最新的RSI值否则若arrayTrue计算出所有RSI值。
def rsi(self, n, arrayFalse):
RSI指标
result talib.RSI(self.close, n)
if array:
return result
return result[-1]
在talib中包含了很多新奇的技术指标有兴趣的小伙伴们可以自行添加噢 ≧▽≦y (/≧▽≦/) (≧▽≦)
#2.4----------------------------------------------------------------------
def sma(self, n, arrayFalse):
简单均线
result talib.SMA(self.close, n)
if array:
return result
return result[-1]
#----------------------------------------------------------------------
def std(self, n, arrayFalse):
标准差
result talib.STDDEV(self.close, n)
if array:
return result
return result[-1]
#----------------------------------------------------------------------
def cci(self, n, arrayFalse):
CCI指标
result talib.CCI(self.high, self.low, self.close, n)
if array:
return result
return result[-1]
#----------------------------------------------------------------------
def atr(self, n, arrayFalse):
ATR指标
result talib.ATR(self.high, self.low, self.close, n)
if array:
return result
return result[-1]
#----------------------------------------------------------------------
def rsi(self, n, arrayFalse):
RSI指标
result talib.RSI(self.close, n)
if array:
return result
return result[-1]
#----------------------------------------------------------------------
def macd(self, fastPeriod, slowPeriod, signalPeriod, arrayFalse):
MACD指标
macd, signal, hist talib.MACD(self.close, fastPeriod,
slowPeriod, signalPeriod)
if array:
return macd, signal, hist
return macd[-1], signal[-1], hist[-1]
#----------------------------------------------------------------------
def adx(self, n, arrayFalse):
ADX指标
result talib.ADX(self.high, self.low, self.close, n)
if array:
return result
return result[-1]
#----------------------------------------------------------------------
def boll(self, n, dev, arrayFalse):
布林通道
mid self.sma(n, array)
std self.std(n, array)
up mid std * dev
down mid - std * dev
return up, down
#----------------------------------------------------------------------
def keltner(self, n, dev, arrayFalse):
肯特纳通道
mid self.sma(n, array)
atr self.atr(n, array)
up mid atr * dev
down mid - atr * dev
return up, down
#----------------------------------------------------------------------
def donchian(self, n, arrayFalse):
唐奇安通道
up talib.MAX(self.high, n)
down talib.MIN(self.low, n)
if array:
return up, down
return up[-1], down[-1]