来自某百科的定义,ZIG(K,N) 函数当数值K的变化量超过N%时折线转向。
本文只考虑收盘价(close)的5%转向。
先上图,直观感受下ZIG线(白线)
所以给定日线收盘价序列,要求出其ZIG线;
大体思路如下:
(x = 0.05即5%转向)
若是上涨趋势:
扫描点的值若大于现在候选节点的值,则把候选点置为扫描点;
扫描点的值若小于现在候选节点的值*(1-x), 则说明当前候选点是个∧端点,将其记入端点表。并且将当前趋势设为下降趋势,将候选点置为扫描点。
若是下降趋势:
扫面点的值若小于现在候选节点的值,则把候选点置为扫描点;
扫描点的值若大于现在候选节点的值*(1+x), 则说明当前候选点是个∨端点,将其记入端点表。并且将当前趋势设为上涨趋势,将候选点置为扫描点。
其他的还有临界判断,便不赘述了,上个示例代码:
import numpy as np
import tushare as ts
ZIG_STATE_START = 0
ZIG_STATE_RISE = 1
ZIG_STATE_FALL = 2
def zig():
ts.set_token("此处放入tushare的t