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

    图片:

  • 相关阅读:
    Vue系列:.sync 修饰符的作用及使用范例
    Vue系列:Websocket 使用配置
    Vue系列:Slot 插槽的使用范例
    Vue系列:滚动页面到指定位置实现
    Vue系列:为不同页面设置body背景颜色
    Element UI系列:Upload图片自定义上传
    Vue系列:wangEditor富文本编辑器简单例子
    Element UI系列:Select下拉框实现默认选择
    sublime text 3 15个常用插件介绍
    基于iis下 wcf接口发布
  • 原文地址:https://www.cnblogs.com/duan-qs/p/10226649.html
Copyright © 2020-2023  润新知