通达信zig函数的python实现

代码


# coding: utf-8
"""
Created on Sat Jan 05 18:53:39 2019
http://www.pianshen.com/article/363258879/
@author: duanqs
""" import numpy as np
import tushare as ts import matplotlib.pyplot as plt ZIG_STATE_START = 0
ZIG_STATE_RISE = 1
ZIG_STATE_FALL = 2 def zig(x=0.055):
#ts.set_token("此处放入tushare的token!!!")
#pro = ts.pro_api()
#df = pro.daily(ts_code="603297.SH")
# print(list(df["close"]))
# df = ts.get_hist_data('000069')
# df = df[::-1]
# 获取股票交易数据的Tushare的使用方法 - 蜗牛爬行ing - 博客园
# https://www.cnblogs.com/DreamRJF/p/8660630.html
# posted on 2018-03-28 15:18 蜗牛爬行ing #df = ts.get_k_data('000069')
# df = ts.get_k_data('600535')
# df = ts.get_k_data('512040') # 富国国信价值 etf 基金
# df = ts.get_h_data('000051', index=True) # 上证180等权指数 index 参数必须指定为True
df = ts.get_k_data('000051', index=True, start='2011-01-01') # 上证180等权指数 index 参数必须指定为True #df = ts.get_h_data('399106', index=True) # index 参数必须指定为True
#df = ts.get_h_data('399106', index=True) #深圳综合指数
#df = ts.get_k_data('399106', index=True) #深圳综合指数
# df = ts.get_k_data('931052', index=True) # 中证国信价值指数, 不支持的指数
# df = ts.get_k_data('hs300') # 支持主要的几个股票指数的历史行情
# 股票代码,即6位数字代码,或者指数代码
# (sh=上证指数 sz=深圳成指 hs300=沪深300指数
# sz50=上证50 zxb=中小板 cyb=创业板) #df = df.reset_index(drop=True)
# df = df.iloc[-100:]
#x = 0.055
k = df["close"]
#d = df["trade_date"]
d = df['date']
# d = df.index
#print(k)
#print(d)
# 循环前的变量初始化
# 端点 候选点 扫描点 端点列表 拐点线列表 趋势状态
peer_i = 0
candidate_i = None
scan_i = 0
peers = [0]
z = np.zeros(len(k))
state = ZIG_STATE_START
while True:
#print(peers)
scan_i += 1
if scan_i == len(k) - 1:
# 扫描到尾部
if candidate_i is None:
peer_i = scan_i
peers.append(peer_i)
else:
if state == ZIG_STATE_RISE:
if k[scan_i] >= k[candidate_i]:
peer_i = scan_i
peers.append(peer_i)
else:
peer_i = candidate_i
peers.append(peer_i)
peer_i = scan_i
peers.append(peer_i)
elif state == ZIG_STATE_FALL:
if k[scan_i] <= k[candidate_i]:
peer_i = scan_i
peers.append(peer_i)
else:
peer_i = candidate_i
peers.append(peer_i)
peer_i = scan_i
peers.append(peer_i)
break if state == ZIG_STATE_START:
if k[scan_i] >= k[peer_i] * (1 + x):
candidate_i = scan_i
state = ZIG_STATE_RISE
elif k[scan_i] <= k[peer_i] * (1 - x):
candidate_i = scan_i
state = ZIG_STATE_FALL
elif state == ZIG_STATE_RISE:
if k[scan_i] >= k[candidate_i]:
candidate_i = scan_i
elif k[scan_i] <= k[candidate_i]*(1-x):
peer_i = candidate_i
peers.append(peer_i)
state = ZIG_STATE_FALL
candidate_i = scan_i
elif state == ZIG_STATE_FALL:
if k[scan_i] <= k[candidate_i]:
candidate_i = scan_i
elif k[scan_i] >= k[candidate_i]*(1+x):
peer_i = candidate_i
peers.append(peer_i)
state = ZIG_STATE_RISE
candidate_i = scan_i #线性插值, 计算出zig的值
for i in range(len(peers) - 1):
peer_start_i = peers[i]
peer_end_i = peers[i+1]
start_value = k[peer_start_i]
end_value = k[peer_end_i]
a = (end_value - start_value)/(peer_end_i - peer_start_i)# 斜率
for j in range(peer_end_i - peer_start_i +1):
z[j + peer_start_i] = start_value + a*j print(u'...转向点的阀值、个数、位置和日期...')
print(x, len(peers))
print(peers)
dates = [d[i] for i in peers]
print(dates)
#print([k[i] for i in peers])
#print(list(k))
#print(list(z)) plt.plot(z) zig(x=0.055)

结果

...转向点的阀值、个数、位置和日期...

(0.055, 71)

[0, 18, 38, 101, 111, 153, 196, 208, 230, 313, 321, 331, 344, 374, 420, 459, 488, 513, 576, 598, 613, 645, 660, 675, 697, 744, 887, 888, 893, 902, 952, 959, 973, 974, 985, 995, 996, 1002, 1005, 1007, 1013, 1016, 1030, 1037, 1045, 1049, 1085, 1097, 1114, 1140, 1154, 1157, 1189, 1220, 1342, 1364, 1429, 1449, 1575, 1607, 1628, 1638, 1654, 1732, 1745, 1784, 1792, 1801, 1823, 1853, 1855]

[u'2011-05-24', u'2011-06-20', u'2011-07-18', u'2011-10-21', u'2011-11-04', u'2012-01-05', u'2012-03-13', u'2012-03-29', u'2012-05-07', u'2012-08-31', u'2012-09-12', u'2012-09-26', u'2012-10-22', u'2012-12-03', u'2013-02-08', u'2013-04-15', u'2013-05-29', u'2013-07-08', u'2013-10-14', u'2013-11-13', u'2013-12-04', u'2014-01-20', u'2014-02-17', u'2014-03-10', u'2014-04-10', u'2014-06-19', u'2015-01-16', u'2015-01-19', u'2015-01-26', u'2015-02-06', u'2015-04-27', u'2015-05-07', u'2015-05-27', u'2015-05-28', u'2015-06-12', u'2015-06-29', u'2015-06-30', u'2015-07-08', u'2015-07-13', u'2015-07-15', u'2015-07-23', u'2015-07-28', u'2015-08-17', u'2015-08-26', u'2015-09-09', u'2015-09-15', u'2015-11-11', u'2015-11-27', u'2015-12-22', u'2016-01-28', u'2016-02-24', u'2016-02-29', u'2016-04-14', u'2016-05-30', u'2016-11-29', u'2016-12-29', u'2017-04-11', u'2017-05-10', u'2017-11-13', u'2017-12-27', u'2018-01-26', u'2018-02-09', u'2018-03-12', u'2018-07-05', u'2018-07-24', u'2018-09-17', u'2018-09-28', u'2018-10-18', u'2018-11-19', u'2019-01-02', u'2019-01-04']

图片:

通达信zig函数的python实现的更多相关文章

  1. [python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上

    将沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上 原理:python读取前一次处理完的计算5日后涨跌幅输出的csv文件 文件名前加"[paint]" 安照通达信的画图文件和板 ...

  2. 通达信自动交易软件 z

    1.要善用spy++ 2.不同的控件主要靠GetDlgCtrlID去区分 3.要获得另一个进程的焦点窗口(GetFocus)需要调用AttachThreadInput 4.尽量少用keybd_even ...

  3. 通达信k线颜色设置

    通达信的k线函数没有颜色选项.如果想要画颜色可以使用STICKLINE函数来覆盖当前k线这样也是可以满足需求. 第一步画针 STICKLINE(条件 , L , H , 0 , 0 ) , 颜色; 第 ...

  4. 通达信5分钟.lc5和.lc1文件格式

    一.通达信日线*.day文件    文件名即股票代码    每32个字节为一天数据    每4个字节为一个字段,每个字段内低字节在前    00 ~ 03 字节:年月日, 整型    04 ~ 07 ...

  5. len(x) 击败 x.len(),从内置函数看 Python 的设计思想

    内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得.Python 被公认是一种新手友好型的语言,这种说法能够成立,内置函数在其中 ...

  6. pandas 实现通达信里的MFI

    pandas 实现通达信里的MFI 算法里的关键点: combine()和rolling().sum()方法 combine -- 综合运算, rolling().sum() -- 滚动求和 利用pd ...

  7. MACD底背离选股公式——通达信、同花顺

    {底背离,通达信版.同花顺版} DIFF:=EMA(CLOSE,) - EMA(CLOSE,); DEA:=EMA(DIFF,); MACD:=*(DIFF-DEA); QZQ:=BARSLAST(R ...

  8. 通达信版F10检索工具下载

    通达信版的F10採用的是维赛特的F10资料. 维赛特的F10资料请前往:http://www.vsatsh.cn/xzzq.aspx  下载. 通达信版的F10检索工具下载地址:http://pan. ...

  9. 通过id()函数学习python的数据存储以及引用方式

    id()函数是python的内置函数,用于获取对象的内存地址. 1.1 可以看出,33被存储在内存地址19877464上,对变量a赋值,实际上是将其指向存储着33的内存地址. 1.2 不仅是数字类型, ...

随机推荐

  1. docker之网络管理

    一.安装网桥管理工具 [root@node03 web]# yum install bridge-utils -y 二.docker网络的4种模式 host模式,使用--net=host指定. con ...

  2. python3 subprocess模块

    当我们在执行python程序的时候想要执行系统shell可以使用subprocess,这时可以新起一个进程来执行系统的shell命令,python3常用的有subprocess.run()和subpr ...

  3. 华为测试大牛Python+Django接口自动化怎么写的?

    有人喜欢创造世界,他们做了开发者:有的人喜欢开发者,他们做了测试员.什么是软件测试?软件测试就是一场本该在用户面前发生的灾难提前在自己面前发生了,这会让他们生出一种救世主的感觉,拯救了用户,也就拯救者 ...

  4. Macaca初体验-PC端(Python)

    前言: Macaca 是一套面向用户端软件的测试解决方案,提供了自动化驱动,周边工具,集成方案.由阿里巴巴公司开源:http://macacajs.github.io/macaca/ 特点: 同时支持 ...

  5. 修改servlet的模板代码

    实际开发中,这些生成的代码和注释一般我们都用不到的,每次都要手工删除这些注释和代码,很麻烦.下面以MyEclipse 2014(其实版本通用的,都可以修改)为例进行说明如何修改Servlet的模板代码 ...

  6. ElasticSearch5.6.1 + 中文分词(IK)

    在安装ElasticSearch 需要先安装java 的 jdk 可以通过  命令来确认是否已经安装了 java -version 如果没有安装可以使用 yum 直接安装通过. 先通过命令查看yum源 ...

  7. img 分区响应图

    ---恢复内容开始--- a标签的target为_blank属性,意为跳转到新的页面. shape要和coords配合使用,shape为rect时意义为矩形.shape 为不同属性时意为不同的形态触碰 ...

  8. 评论beta发布

    1. 组名:飞天小女警 项目名:礼物挑选小工具 评价:该系统可以通过选择所要接礼的人的性别.年龄和与送礼者的关系及所要送礼的价值,就可以推荐出所送的礼物.还可以通过男/女所选的Top前10进行简单推荐 ...

  9. [转帖] tmux 的使用说明

    之前曾经看过 tmux 的简介 但是一直不会用 这次 看了下 原来是这么处理 不过 用windows 多了 还是感觉鼠标 操作多一些 全键盘操作的习惯 还是没有养成. 原贴地址: https://ww ...

  10. [国家集训队]middle

    [国家集训队]middle 题目 解法 开\(n\)颗线段树,将第\(i\)颗线段树中大于等于第\(i\)小的数权值赋为1,其他的则为-1,对于每个区间维护一个区间和,最大前缀和,最大后缀和. 然后二 ...