缠论1-处理包含关系

本文介绍了如何使用Python处理缠论中的K线包含关系,包括取最高价和最低价,判断K线位置关系,并提供了相应的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是处理包含关系的步骤:
1、K线只取最高价,最低价
在这里插入图片描述
2、判断前后两根K线的位置关系
在这里插入图片描述
在这里插入图片描述
3、处理包含关系
在这里插入图片描述
代码实现:
(以前一直用C,python也是现学的,很多c的路数,请见谅)

contain.py

#包含处理
#第2根K线的最高价最低价被第1根k线的最高价最低价范围覆盖,或者二者关系反之,定义为包含关系
#具体处理向前/向后包含关系时,又要考察存在包含关系的两根K线与他们前一根K线的位置关系。
#在处理向前/向后包含关系时,如果存在包含关系K线相比较他们的前一根K线位置上升,则采用向上处理方式
#即取两根K线的最高价中高的价格作为处理后得到的新K线的最高价,取两根K线最低价中高的价格做为新K线的最低价
#如果存在包含关系的K线相较前一根K线位置下降,则采用向下处理的方式,即取两根K线最高价中低的价格作为新K线的最高价
#取两根K线最低价中低的价格作为新K线的最高价。
#简化表述:上升取高高,下降取低低
class contain_point:
    def __init__(self, low_price, high_price):
        self.high = high_price
        self.low = low_price

def cl_contain_judge(updown,p_0,p_1):
    ret_p=contain_point(0,0)

    if p_1.high==p_1.low:#第二根k线开盘涨停或跌停
        ret_p.high = 0
        ret_p.low = 0
    elif p_0.high>=p_1.high and p_0.low<=p_1.low:#前包含
        if updown == "up":          #上升型,高高
            ret_p.high=p_0.high
            ret_p.low=p_1.low
        elif updown == "down":      #下降型,低低
            ret_p.high=p_1.high
            ret_p.low=p_0.low
        else:                       #最开始的几根k线如果无法判断分型,就使用取高低的方法
            ret_p.high=p_0.high
            ret_p.low=p_0.low

    elif p_0.high<=p_1.high and p_0.low>=p_1.low:#后包含
        if updown == "up":          #上升型,高高
            ret_p.high=p_1.high
            ret_p.low=p_0.low
        elif updown == "down":      # 下降型,低低
            ret_p.high=p_0.high
            ret_p.low=p_1.low
        else:                       #最开始的几根k线如果无法判断趋势,就使用取高低的方法
            ret_p.high=p_1.high
            ret_p.low=p_1.low

    else:
        ret_p.high = 0
        ret_p.low = 0
    return ret_p

def cl_contain_handle(oclh):
    for i in range(len(oclh)):#每个数据后面加一个字段“d”(data),“c”(contain)
        oclh[i].append("d")
    updown="null"
    for i in range(len(oclh)-1):
        p0 = contain_point(oclh[i][2],oclh[i][3])
        p1 = contain_point(oclh[i+1][2],oclh[i+1][3])

        if p0.low!=0 and p0.high!=0:
            if p0.low<p1.low and p0.high<p1.high:
                updown="up"
            elif p0.low>p1.low and p0.high>p1.high:
                updown="down"

        ret=cl_contain_judge(updown,p0,p1)

        if ret.low!=0 and ret.high!=0:
            # oclh[i][2]=0#第1根K线置0
            # oclh[i][3]=0
            oclh[i][3]=oclh[i][2]#第1根K线的oclh都置为low值
            oclh[i][4]="c"  #标记前一根K线已被包含
            oclh[i+1][2]=ret.low#第2根K线设置为处理后的K线
            oclh[i+1][3]=ret.high

        #将开盘价=最低价,收盘价=最高价
        oclh[i][0] = oclh[i][2]
        oclh[i][1] = oclh[i][3]
        oclh[i+1][0] = oclh[i+1][2]
        oclh[i+1][1] = oclh[i+1][3]

main.py

if __name__ == '__main__':

    # 创建一个空的DataFrame
    d1_df=pd.DataFrame()
    api = TdxHq_API()
    with api.connect('119.147.212.81', 7709):
        stck_name="000626.sz"
        d1_df=get_tdx_data(api, stck_name, '30m')
        stock_charts(d1_df,stck_name+"_30m",4)


tdx.py
# category(类别) K线种类
    # 0 5分钟K线 1 15分钟K线 2 30分钟K线 3 1小时K线 4 日K线  5 周K线 6 月K线 7 1分钟 8 1分钟K线 9 日K线 10 季K线 11 年K线
# market(市场)
    # 0 - 深圳, 1 - 上海
# code,股票代码
# start 指定的范围开始位置
# cont 用户要请求的 K 线数目,最大值为 800
# def write_tdx_to_db():
#     api = TdxHq_API()
#     with api.connect('119.147.212.81', 7709):
#         df=api.to_df(api.get_security_bars(2, 0, code, 0, 10)) # 返回DataFrame
#         df.insert(0,'code',code);
#         data=json.loads(df.T.to_json()).values()
#         collection=database[code]#建立以股票名命名的合集
#         collection.insert_many(data)#存储到mongodb数据库中

# code:股票代码,格式xxxx.SZ,xxxx.SH
# bar_type:日线的类型,1d,30m,5m,
# start:指定的范围
# count:指定的k线条数

K_NUM=(800)

def get_tdx_data(tdx_api,code,bar_type):
    bar_t=0
    data=[]
    if bar_type=='1d':
        bar_t=4
    elif bar_type=='30m':
        bar_t=2
    elif bar_type=='5m':
        bar_t=0
    market=0
    if code.find('sz')!=-1 or code.find('SZ')!=-1:
        market=0
    elif code.find('sh')!=-1 or code.find('SH')!=-1:
        market=1
    c_name=code[0:6]#取股票的名字
    # print(market)
    c_name=c_name+'_'+bar_type

    # data=tdx_api.get_security_bars(bar_t, market, c_name, 208, 20)

    data=tdx_api.get_security_bars(bar_t, market, c_name, K_NUM, K_NUM)
    data+=tdx_api.get_security_bars(bar_t, market, c_name, 0, K_NUM)

    df=tdx_api.to_df(data) # 返回DataFrame
    # print(df)
    return df

chart.py

def stock_charts(df, stocks_name,bi_judge_num):
    # tdx数据是从最早到最近,不用倒序排列
    # 将dataframe倒序排列,ascending=True为顺序排列,False为倒序,inplace一定要设置为True
    # df.sort_index(ascending=False, inplace=True)
    # 返回多列数据,使用[[...]]
    #pyecharts的kline要求oclh
    oclh = df[['open', 'close', 'low', 'high']]
    date = df[['datetime']]
    close = df[['close']]

    # print(oclh)
    # pandas的tolist方法将获取到的数据转化为列表
    #iloc[]函数,属于pandas库,全称为index location,即对数据进行位置索引,从而在数据表中提取出相应的数据
    #比如:df.iloc[a,b],其中df是DataFrame数据结构的数据,a是行索引,b是列索引

    # 数据格式[['open','close','high','low'],['open','close','high','low'],....]
    oclh_tolist_org = [oclh.iloc[i].tolist() for i in range(len(oclh))]
    date_tolist = [date.iloc[i].tolist() for i in range(len(date))]
    close_tolist = [close.iloc[i].tolist() for i in range(len(close))]#嵌套列表[[1],[2],[3]]

    #去掉嵌套变为[1,2,3]
    date_list = []
    for i in range(len(date_tolist)):
        date_list.insert(i, date_tolist[i][0])

    #去掉嵌套变为[1,2,3]
    close_list = []
    for i in range(len(close_tolist)):
        close_list.insert(i, close_tolist[i][0])

    #使用新的列表存储处理了包含后的数据
    oclh_tolist_contain=copy.deepcopy(oclh_tolist_org)
    #输入oclh_org数据,输出处理了包含后的oclh数据,其中只有最高点和最低点,收盘价和开盘价=0
    cl_contain_handle(oclh_tolist_contain)
    
    #画图
  
    #cl包含图
    cl_contain_kline = draw_kline(date_list,"cl_contain",oclh_tolist_contain)
    grid=Grid(init_opts=opts.InitOpts(width="1400px", height="720px")
grid.add(cl_contain_kline,grid_opts=opts.GridOpts(pos_left="3%",pos_right="1%",height="60%"))
    grid.render("{}.html".format(stocks_name))

运行效果:
在这里插入图片描述
在这里插入图片描述

论大师很多,在下才疏学浅,不到之处敬请点拔。另外声明一下,世间没有包赚钱的公式,只有适合的工具。想通过一个什么包赚钱的价格几万的公式来稳赚不赔,那股市就没有输家了。如果有缘份的话,本文最后将推出师最终没有告知大家的力度公式部分。真正得者,为见相非相,即见如来。 通达信版公式,因为定义不了全局变量、数组,以及没有循环语句等功能,相比大智慧在公式编程方面差了不少。但通达信的优势还是有的,在此推出一个通达信非DLL版本的论分笔公式,并在后续的文章中逐步讲解如何通过程序,将论转化公式。如果友仅想得到一公式而已,那就也无所谓细读本文。但凡得道,靠的是觉悟和缘份,在此也就不细说了。初学论的朋友也可以参考一些网站或专门的书籍,对阅读本文会有较大的帮助。 一、分形。 论集道氏、波浪、江恩学派于一体,结合浑沌理论,将K线形态以分形的方式进行规划,并以一套规则定义波浪起始点,以中枢的形式表达三角形调整(旗形、契形、钻石等形态,均是三角形形态的变种),以背驰的理论表述力度的衰竭。理论指导实战,行之有效。 分形分二种,一是顶分型,另一是底分型。分型也可以看成是酒田的三山形态,即中间K线高低点均高于二侧的,为顶分型,均低于二侧的,为底分形。当一根K线高低点均在前一根K线价格之类,或者前一根K线高低点均在本根K线价格之类,称为包含关系。在程序处理上,被前一根K线包含的,因为不可能作为分形的顶、底点,所以我们可以不进行处理。如果是后一种包含关系,则观察前一根K线处于什么分形关态,如果前一根是顶分形,则本根向上取值,作为顶分形处理,反之则向下处理为底分形。 但这里有一个特殊情况,在不成笔的情况下,如果这根K线的前一分形状态为低分形,但本K线高点却已经超出了前一个顶分形的顶点,应将这根K线作为顶分形处理,反之亦然。否则,笔的顶底点将不会处于笔内K线的高低点位置。同理,笔有被非笔打破高低点的情况,采取的也是这种办法,即笔的延伸。段亦如此,段被笔打破的,段仍然延续。所以,在最简单的顶底分形的处理上,也应如此。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boatarmy

1分,1毛都是对分享的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值