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

通达信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']

图片:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值