通达信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. Jmeter(二十三)_插件扩展

    Jmeter插件管理器 安装插件的方法有两种,一种是传统的方式,即官网下载,本地配置,重启jmeter.现在有一种快捷的方法可以自定义安装插件-插件管理器 JMeter 插件管理器的使用方法很简单:不 ...

  2. 安装loadrunner11出现Microsoft Visual c++2005 sp1安装失败

    本文转至别处,网上大神多

  3. GitHub 新手教程 六,Git GUI 新手教程(3),从GitHub远端同步代码库

    从GitHub把代码库下载到本地: 1,打开 GitGUI,单击我们之前克隆好的本地库: 2,按图片所示点击,同步远端代码: 3,出现如下提示后,点击“Close”: 4,上面只是把代码下载下来,还没 ...

  4. 7. Reverse Integer【Leetcode by java】

    Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...

  5. CentOS Docker环境搭建教程

    安装与配置 Docker 安装 Docker Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: yum inst ...

  6. 2017-2018 第一学期201623班《程序设计与数据结构》-第7&8周作业问题总结

    一.作业内容 第7周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK07 第8周作业 http://www.cnblogs.com/rocedu ...

  7. Game over 作业

    终于有一篇不拼代码拼码字的作业了,哈哈哈..... 从寒假到这次结束,经历的博客及编码作业的过程 前面七次作业做个分类: 通往博客园和C++的第一步. 知识点:让我们对C++做一个预习,在学C++前有 ...

  8. Visual Studio的安装应用及单元测试

    新建项目—Visual C#—类库 一.Visual Studio的安装 这可能是自己安装软件用的的最长时间的一次 ..刚下载完安装的时候灰常的尴尬,因为2013版本和2015的版本都是不支持在win ...

  9. Alpha 冲刺四

    团队成员 051601135 岳冠宇 051604103 陈思孝 031602629 刘意晗 031602248 郑智文 031602234 王淇 会议照片 项目燃尽图 项目进展 实现后端聊天接收,搜 ...

  10. #Leetcode# 725. Split Linked List in Parts

    https://leetcode.com/problems/split-linked-list-in-parts/ Given a (singly) linked list with head nod ...