python程序化 k线指定时间更新_Python之路 14 K线时间序列管理器

在上一章中介绍了如何通过实时行情推送的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),初始化状态为False(False表示缓存计数<缓存size)。创建numpy的Array,开盘价,最高价,最低价,收盘价和成交量都是由一系列(默认为100)为0的数组构成。

class ArrayManager(object):

"""

K线序列管理工具,负责:

1. K线时间序列的维护

2. 常用技术指标的计算

"""

#2.1----------------------------------------------------------------------

def __init__(self, size=100):

"""Constructor"""

self.count = 0 # 缓存计数

self.size = size # 缓存大小

self.inited = False # True if count>=size

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为真’,在这里,a=self.inited=False, 非a=True,所以逻辑判断简化为当count>=100为真时:初始化状态变成True

第1根K线 count=count(0)+1=1,1>=100为False,在100列所有为0的数组全部前移1位,插入最新的open,high,close和volume。(此时有99列为0的数组)

第2根K线 count=count(1)+1=2,2>=100为False,在100列数组全部前移1位,插入最新的open,high,close和volume。(此时有98列为0的数组)

。。。。。。

第99根K线 count=count(98)+1=99,99>=100为False,在100列数组全部前移1位,插入最新的open,high,close和volume。(此时有1列为0的数组)

第100根K线 count=count(99)+1=100,100>=100为True,立刻更新self.inited为True,通知交易系统界面初始化成功。同时,在100列数组全部前移1位,插入最新的open,high,close和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 Average,SMA),又称“算术移动平均线”,是指对特定期间的收盘价进行简单平均化的意思。一般所提及之移动平均线即指简单移动平均线(SMA)。

简单移动平均线沿用最简单的统计学方式,将过去某特定时间内的价格取其平均值。简单移动平均线计算方法如同其名——简单。它只是将每日得到的平均值连成一线并随时间移动,每一支烛因而得到相同的数值。

在python Shell中输入,然后回车

import talib

help(talib.SMA)

在talib中,均线函数SMA入参2个,一个是收盘价,第二个是计算均线的周期,默认周期是30,出参是计算出来的均值

定义函数sma(注意,这里函数名称是小写,Python大小写区分),入参是周期数n和array(默认值为False)。调用talib的SMA函数计算均线。若array为默认值(即False),则只计算最新一条均线的数值,否则若array=True,计算出所有均线数值。

def sma(self, n, array=False):

"""简单均线"""

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值,否则若array=True,计算出所有RSI值。

def rsi(self, n, array=False):

"""RSI指标"""

result = talib.RSI(self.close, n)

if array:

return result

return result[-1]

在talib中包含了很多新奇的技术指标,有兴趣的小伙伴们可以自行添加噢 ≧▽≦y (/≧▽≦/) (≧▽≦)

#2.4----------------------------------------------------------------------

def sma(self, n, array=False):

"""简单均线"""

result = talib.SMA(self.close, n)

if array:

return result

return result[-1]

#----------------------------------------------------------------------

def std(self, n, array=False):

"""标准差"""

result = talib.STDDEV(self.close, n)

if array:

return result

return result[-1]

#----------------------------------------------------------------------

def cci(self, n, array=False):

"""CCI指标"""

result = talib.CCI(self.high, self.low, self.close, n)

if array:

return result

return result[-1]

#----------------------------------------------------------------------

def atr(self, n, array=False):

"""ATR指标"""

result = talib.ATR(self.high, self.low, self.close, n)

if array:

return result

return result[-1]

#----------------------------------------------------------------------

def rsi(self, n, array=False):

"""RSI指标"""

result = talib.RSI(self.close, n)

if array:

return result

return result[-1]

#----------------------------------------------------------------------

def macd(self, fastPeriod, slowPeriod, signalPeriod, array=False):

"""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, array=False):

"""ADX指标"""

result = talib.ADX(self.high, self.low, self.close, n)

if array:

return result

return result[-1]

#----------------------------------------------------------------------

def boll(self, n, dev, array=False):

"""布林通道"""

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, array=False):

"""肯特纳通道"""

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, array=False):

"""唐奇安通道"""

up = talib.MAX(self.high, n)

down = talib.MIN(self.low, n)

if array:

return up, down

return up[-1], down[-1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python手把手教程_【Python 1-7】Python手把手教程之——详解列表List

列表 作者 | 弗拉德 来源 | 弗拉德&#xff08;公众号&#xff1a;fulade_me) 列表&#xff0c;在其他语言中又被称为数组&#xff0c;是由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表。你也可以创建几个列表&#xff0…

[Typecho主题] modernist

Modernist 主题来自 Hexo. 是基于 modernist theme 修改 演示站点 安装 git clone https://github.com/uidea/typecho-theme-modernist.git themes/modernist 启用 外观 -> Modernist Theme -> 启用即可 更新 cd themes/modernist git pull 下载地址&#xff1a;https://…

python预定义_【Python】python类中方法的预定义

知乎问题&#xff1a;像这个图片里面显示的&#xff0c;self.prediction首先声明了下然后下面给出了定义&#xff0c;然后optimize又调用这个函数但是没有用self.prediction()这样的方式而是像用变量一样直接用self.prediction&#xff0c;,像请教一下这是什么操作&#xff1f;…

python md5加密_Python MD5加密实例详解

详解Python MD5加密 Python 3下MD5加密 # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str this is a md5 test. # 创建md5对象 hl hashlib.md5() # Tips # 此处必须声明encode # 若写法为hl.update(str) 报错为&…

【IOS-COCOS2D-X 游戏开发之四】COCOS2DX创建ANDROID NDK新项目并编译导入ECLIPSE中正常运行!...

本站文章均为 李华明Himi 原创,转载务必在明显处注明&#xff1a; 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/645.html此篇针对较早的-x引擎讲解的&#xff0c;最新的可以参考&#xff1a; 【Cocos2d-X(2.x) 游戏开发系列之二】cocos2dx最新2…

2天后mysql_mysql 学习笔记 第二天

插入表格数据:Insert into table_name set columns_1value1,columns_2value2,对于没有赋值的列&#xff0c;将会取默认值&#xff0c;并且这个方法只能一次插入一个数据利用文本方式插入数据:Load data local infile‘径’into table table_name&#xff1b;Select 的通用形式:…

mysql查看日志命令_面对成百上千台服务器产生的日志,试试这款轻量级日志搬运神器!...

Filebeat简介Filebeat是一款轻量级日志采集器&#xff0c;可用于转发和汇总日志与文件。Filebeat内置有多种模块&#xff08;Nginx、MySQL、Redis、Elasticsearch、Logstash等&#xff09;&#xff0c;可针对常见格式的日志大大简化收集、解析和可视化过程&#xff0c;只需一条…

css 百分比 怎么固定正方形_css样式写出三角形,宽高自适应的正方形,扇形!...

闲来无事练习一下常见的css样式,希望大家能指点一二&#xff01;1用css实现一个三角形&#xff01;原理用border属性<!实现它的原理那就要弄明白border属性&#xff0c;border是一个复合属性border-width 指定边框的宽度border-style 指定边框的样式border-color 指定边框的…

用lsb_release -a 查看linux版本

1、要通过yum 安装上这个命令的软件包 yum -y install redhat-lsb 2、lsb_release -a 查看linux版本信息

java爬虫自动识别验证码_简单Java爬虫(一)爬取手机号码

原创 野狗菌 希望你能喜欢 今天关于本文&#xff1a;本文介绍一个简单Java爬虫&#xff0c;获取网页源码&#xff0c;爬取电话号码。本篇教程用我的博客一个测试网页演示。——野狗菌【希望你能喜欢】测试页面&#xff1a;https://www.wayteam.xyz/archives/phonenumber源代码&…

java分隔符 字符串_用Java构建带分隔符的字符串的最佳方法是什么?

在Java应用程序中工作时&#xff0c;最近我需要组合一个用逗号分隔的值列表&#xff0c;以传递给另一个Web服务&#xff0c;而无需事先知道会有多少个元素。我能想到的最好的办法是这样的&#xff1a;public String appendWithDelimiter( String original, String addition, St…

ASP.NET Session丢失问题原因及解决方案[转]

不得不老调重弹 正常操作情况下会有ASP.NET Session丢失的情况出现。因为程序是在不停的被操作&#xff0c;排除Session超时的可能。另外&#xff0c;Session超时时间被设定成60分钟&#xff0c;不会这么快就超时的。 现在我就把原因和解决办法写出来。 ASP.NET Session丢失原因…

linux内核_Linux内核编程风格简介

01不同的语言风格当今世界上一共有5000多种语言。不同的国家、民族和地区&#xff0c;说着不同的语言。每个民族不一定有自己的文字&#xff0c;但一般都会有自己的语言。即使是同一种语言&#xff0c;在不同的时代、不同的地区和群体&#xff0c;说话的方式和语言风格也各不相…

Swift使用CoreLocation,你必须要看这一篇

CoreLocation&#xff0c;在我们这里讨论的是一个最常用的东西&#xff0c;就是用Location Manger获取用户当前的位置。 整个的来说非常简单。只要这样&#xff1a; import CoreLocation需要使用整个框架&#xff0c;那么引入整个框架就是必须的。然后需要在你的类里实现一个pr…

python全景图像拼接_Python+OpenCV实现图像的全景拼接

本文实例为大家分享了PythonOpenCV实现图像的全景拼接的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 环境&#xff1a;python3.5.2 openCV3.4 1.算法目的 将两张相同场景的场景图片进行全景拼接。 2.算法步骤 本算法基本步骤有以下几步&#xff1a; 步骤1&#x…

非你莫属 java全球排名_TIOBE:2018年5月全球编程语言排行榜

原标题&#xff1a;TIOBE&#xff1a;2018年5月全球编程语言排行榜TIOBE 刚刚发布了 5 月编程语言排行榜。Scala 经过长时间的沉淀&#xff0c;本月终于进入了 TIOBE 榜单的前 20 名。Scala 是一种 JVM 上运行的函数式编程语言&#xff0c;可与 Java 一起或作为 Java 的替代品使…

人生中最【无用】的二十件事

学会取舍&#xff0c;将是你人生的必修课。 丢掉这20件东西&#xff0c;你一定会成为更好的自己 我们之所以会觉得活的痛苦&#xff0c;活的乏味&#xff0c;根源在于你始终无法做到潇洒的放手。顾忌太多&#xff0c;想要的太多&#xff0c;最终一无所获。 你从幼稚走向成熟的过…

python动态方法_python中的动态方法生成

这是一个元类&#xff0c;它将__getattr__函数从类定义添加回元类本身。这就避免了在多个地方定义函数&#xff0c;或者作为预先定义并单独添加到元类和类中的单独全局函数来定义。在class Meta(type): def __new__(mcls, name, bases, dikt): fgetattr dikt.get(__getattr__)…

java光标位置无效_ResultSet.getString(1)引发java.sql.SQLException:当前光标位置的无效操作...

当我运行以下servlet时&#xff1a;// package projectcodes;public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {String UserID request.getParameter("UserID");String UserPassword request.g…

python web服务器 apache_Windows下搭建Apache+Django+Python Web服务环境

最近在学Django&#xff0c;想用Apache搭建一个服务器环境&#xff0c;因此在网上看了好多资料&#xff0c;很多都是用Python2.6和Apache2.2搭建的环境&#xff0c;不过我还是想用Python35和Apache24来搭建&#xff0c;具体环境如下&#xff1a; 参考资料&#xff1a; Apache配…