来自某百科的定义,ZIG(K,N) 函数当数值K的变化量超过N%时折线转向。

本文只考虑收盘价(close)的5%转向。

先上图,直观感受下ZIG线(白线)

所以给定日线收盘价序列,要求出其ZIG线;

大体思路如下:

(x = 0.05即5%转向)

若是上涨趋势:

扫描点的值若大于现在候选节点的值,则把候选点置为扫描点;

扫描点的值若小于现在候选节点的值*(1-x), 则说明当前候选点是个∧端点,将其记入端点表。并且将当前趋势设为下降趋势,将候选点置为扫描点。

若是下降趋势:

扫面点的值若小于现在候选节点的值,则把候选点置为扫描点;

扫描点的值若大于现在候选节点的值*(1+x), 则说明当前候选点是个∨端点,将其记入端点表。并且将当前趋势设为上涨趋势,将候选点置为扫描点。

其他的还有临界判断,便不赘述了,上个示例代码:

import numpy as np
import tushare as tsZIG_STATE_START = 0
ZIG_STATE_RISE = 1
ZIG_STATE_FALL = 2def zig():ts.set_token("此处放入tushare的token!!!")pro = ts.pro_api()df = pro.daily(ts_code="603297.SH")# print(list(df["close"]))df = df[::-1]df = df.reset_index(drop=True)# df = df.iloc[-100:]x = 0.05k = df["close"]d = df["trade_date"]print(k)print(d)peer_i = 0candidate_i = Nonescan_i = 0peers = [0]z = np.zeros(len(k))state = ZIG_STATE_STARTwhile True:print(peers)scan_i += 1if scan_i == len(k) - 1:# 扫描到尾部if candidate_i is None:peer_i = scan_ipeers.append(peer_i)else:if state == ZIG_STATE_RISE:if k[scan_i] >= k[candidate_i]:peer_i = scan_ipeers.append(peer_i)else:peer_i = candidate_ipeers.append(peer_i)peer_i = scan_ipeers.append(peer_i)elif state == ZIG_STATE_FALL:if k[scan_i] <= k[candidate_i]:peer_i = scan_ipeers.append(peer_i)else:peer_i = candidate_ipeers.append(peer_i)peer_i = scan_ipeers.append(peer_i)breakif state == ZIG_STATE_START:if k[scan_i] >= k[peer_i] * (1 + x):candidate_i = scan_istate = ZIG_STATE_RISEelif k[scan_i] <= k[peer_i] * (1 - x):candidate_i = scan_istate = ZIG_STATE_FALLelif state == ZIG_STATE_RISE:if k[scan_i] >= k[candidate_i]:candidate_i = scan_ielif k[scan_i] <= k[candidate_i]*(1-x):peer_i = candidate_ipeers.append(peer_i)state = ZIG_STATE_FALLcandidate_i = scan_ielif state == ZIG_STATE_FALL:if k[scan_i] <= k[candidate_i]:candidate_i = scan_ielif k[scan_i] >= k[candidate_i]*(1+x):peer_i = candidate_ipeers.append(peer_i)state = ZIG_STATE_RISEcandidate_i = scan_ifor 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*jprint(peers)dates = [d[i] for i in peers]print(dates)print([k[i] for i in peers])print(list(k))print(list(z))zig()

最终输出如下:

[0, 6, 18, 21, 22, 27, 30, 32]
['20180910', '20180918', '20181012', '20181017', '20181018', '20181025', '20181030', '20181101']
[37.25, 62.7, 44.88, 47.81, 43.6, 48.76, 46.0, 46.75]
[37.25, 40.98, 45.08, 49.59, 54.55, 57.0, 62.7, 61.6, 59.23, 58.84, 59.29, 60.9, 55.51, 55.65, 50.15, 50.3, 51.16, 46.04, 44.88, 45.81, 46.45, 47.81, 43.6, 45.84, 47.99, 48.37, 47.01, 48.76, 47.85, 47.69, 46.0, 47.1, 46.75]
[37.25, 41.49166666666667, 45.733333333333334, 49.975, 54.21666666666667, 58.458333333333336, 62.7, 61.215, 59.730000000000004, 58.245000000000005, 56.760000000000005, 55.275000000000006, 53.790000000000006, 52.305, 50.82, 49.335, 47.85, 46.365, 44.88, 45.85666666666667, 46.833333333333336, 47.81, 43.6, 44.632, 45.664, 46.696, 47.728, 48.76, 47.839999999999996, 46.92, 46.0, 46.375, 46.75]

最后print出来的z便是ZIG线。此代码并没有做最终的封装,仅为示例。

ps:某百科描述的算法是错的,坑爹

量化 ZIG函数的python实现相关推荐

  1. python 通达信公式函数_通达信zig函数的python实现

    通达信zig函数的python实现 代码 # coding: utf-8 """ Created on Sat Jan 05 18:53:39 2019 http://w ...

  2. python调用通达信函数大全_通达信zig函数的python实现

    通达信zig函数的python实现 代码 # coding: utf-8 """ Created on Sat Jan 05 18:53:39 2019 http://w ...

  3. 【量化投资】量化投资技术基础 ---- Python 急速入门

    文章目录 [量化投资]Python 入门 一.为什么使用 python 二.我们需要学些什么 三.Python 基础 1.输入输出 2.数据转换 3.导包 4.数据类型 1)数字 2)字符串 3)列表 ...

  4. 很燃基于掘金量化平台的《Python化易战新书介

    原 很燃!基于掘金量化平台的<Python量化交易实战>新书简介 内容简介: 在目前不断变化.蓬勃发展的中国资本市场,量化投资作为新兴的投资方法,引来越来越多的关注,使用量化投资技术的证券 ...

  5. python编程选股_随笔吧量化投资选股的python程序实践(附源码)

    量化投资选股的python程序实践(附源码) 首先选取沪深股票市场,本人比较关注的12只股票: 000002 万科A,600566 济川药业,300051 三五互联,002039 黔源电力,60087 ...

  6. 【量化干货】用python搭建量化交易策略(附零基础学习资料)

    前言 技术已成为金融行业中的战略资产.而传统的金融机构现在正在转型成为科技公司,而不仅仅是专注于该领域的金融方面.(文末送读者福利) 数学算法带来了创新和速度,它们可以帮助我们在市场上获得竞争优势.金 ...

  7. Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小、自定义不同分组的气泡的色彩

    Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot).通过size参数指定数据点的大小.自定义不同分组的气泡的色彩 目录

  8. Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小

    Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot).通过size参数指定数据点的大小 目录

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

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

最新文章

  1. DataSet 的 Merge 方法
  2. linux动态库符号检查,写 Linux 动态库的最佳实践
  3. 操作系统【六】虚拟内存
  4. 关于 std::set/std::map 的几个为什么
  5. 易于使用的人工智能_通过AI使网络更易于访问
  6. python设计模式11-享元模式
  7. linux7无法进入系统,记录一次断电导致centos7.4系统不能正常进入的解决方案
  8. ROS学习笔记四:理解ROS节点
  9. ios 格式化html字符串,ios – 粘贴格式化文本,不是图像或HTML
  10. 小学计算机教案 插入艺术字,小学信息技术《在幻灯片中插入艺术字》说课及反思...
  11. ArcGIS基本操作
  12. mysql创建序列发生器_字符控制发生器可以干啥
  13. viicms仿乐享微信源码官方版
  14. WebHtmlEditor Version 1.5.2004.729 Beta1 发布测试
  15. 岭回归实现鲍鱼年龄预测 MATLAB实现
  16. 工业触控一体机的特点和优势
  17. 有哪些好用的高考志愿填报APP
  18. 高中计算机会考理论知识点总结,高中信息技术高一会考总复习理论知识点汇总整理.doc...
  19. Scapy功能介绍以及应用
  20. 全球及中国土壤修复行业十四五建设规划与发展商机研究报告2022-2027年

热门文章

  1. 荣耀Magic2:用最简单的方法解决最复杂的问题
  2. 哪个相机可以拍gif动图_魅族手机如何拍摄Gif图片 魅族手机拍摄Gif动图的方法图解...
  3. 如何获取微信小程序包
  4. MFC中制作Dll中带对话框资源的动态库
  5. 超声波的四个特性_超声波的几个特性
  6. 在python里是什么意思_在Python中$是什么意思?
  7. 树莓派连接笔记本电脑
  8. 华为防火墙用户与认证
  9. 为什么要学习软件质量保证与测试这门课?
  10. 成都启之航电商:抖音小店使用效果+性价比产品+直播