分享

Python量化缠中说禅(缠论)(上篇)

 伊伊爸 2023-05-24 发布于湖北

缠论体系是一种结合了K线空间结构与形态分析的技术分析体系。缠论体系的构建借鉴了几何学中的分形艺术、数学中的递归关系以及动力学系统中的混沌思想,解决了K线价格序列在空间上的演绎推理问题。

缠论体系的原创者并未将其理论系统的写成著作发表于众,缠论体系的拥趸者对它的解读也千变万化。正确使用缠论体系,首先要明晰缠论的思想内核以及正确构建缠论的逐层结构。 

缠论在宏观层面来看,是趋势观和方法论的结合。之所以说缠论是一种趋势观的表达,是因为缠论通过分型、笔、线段、走势逐层结构的演绎,系统而精确的刻画 K 线的空间变化,清晰的梳理 K 线的趋势变化。缠论又在操作层面提供了一套方法论——缠论中分型的识别、笔或线段或走势终点的确认都表达了对阶段性高低点的把握;缠论中买卖点的构建进一步明晰了空间上的交易点位。

构建缠论体系的基础——分型

分型结构是缠论体系中最基础的K线结构处理方式。整个缠论体系的构建都要从分型的确立出发,因此分型既是基础,也是理解缠论的关键。

缠论基石——正确处理K线包含关系

理解缠论,必须要从基础的K线包含关系处理开始。在缠论的理解与应用中,基于基础结构(笔、线段)对走势的判断都蕴含在 K 线包含关系的处理中。我们先对如何处理K线包含关系进行说明,再解释抽象的 K 线关系理解。

在介绍K线包含关系处理之前,我们先从蜡烛图出发,对K线进行预处理。传统的蜡烛图通过箱体、上影线、下影线分别表征了当日K线的涨跌关系以及 最高价、最低价、开盘价、收盘价信息。而在缠论体系中,所有的处理并不关注开盘价、收盘价,只关注每根K线的最高价和最低价。因此,无论是上涨的K线还是下跌的 K 线我们都统一简化成一种状态——此状态并不关注单根K线是阴线还是阳线。

图片

对 K 线进行预处理之后,我们观察相邻两根 K 线的位置关系。相邻两根 K 线位置关系存在四种情况,图 2 中标示的是不存在包含关系的两种,分别是第 2 根 K 线最高价低于第 1 根K 线最高价且第 2 根K 线最低价低于第 1 根 K 线最 低价,第 2 根 K 线最高价高于第 1 根 K 线最高价且第 2 根 K 线最低价高于第 1 根 K 线最低价。两种情况中,前后两根 K 线都有趋势性的位置变化。(这句话 也是后面理解其他结构的关键!)

图 3 中标示的是存在包含关系的两种,第 2 根 K 线的最高价最低价被第 1 根最高价最低价范围覆盖,或者二者关系反之。这两种情况下,相邻两根 K 线 之间没有趋势性的位置变化,在缠论中被定义为存在包含关系。

图片

图 3 中,左边的情形我们定义为向后包含,右边的情形我们定义为向前包 含。具体处理向前/向后包含关系时,又要考察存在包含关系的两根 K 线与它们 前一根 K 线的位置关系。在处理向前/后包含关系时,如果存在包含关系 K 线相 较它们的前一根 K 线位置上升,则采用向上处理方式,即取两根 K 线最高价中 高的价格作为处理之后得到的新 K 线的最高价,取两根 K 线最低价中高的价格作为新K 线的最低价;如果存在包含关系K 线相较它们的前一根K 线位置下降, 则采用向下处理方式,即取两根 K 线最高价中低的价格作为新 K 线的最高价, 取两根 K 线最低价中低的价格作为新 K 线的最低价。简化表达为:上升取高高,下降取低低。

图片

通过对存在包含关系的 K 线进行加工处理,所有的两两相邻 K 线之间只存 在清晰的上升/下降位置关系,有助于后面的其他结构分析。缠论结构中“完美” 的思想贯穿始终,从 K 线包含关系的处理中可以觅得一二。

举例说明K线的合并,先决条件,判断方向

(1)下降合并

图片

(2)上升合并

图片

(3) 多根K线的包含,则依次处理

图片

代码部分

对于上述的所有的理论进行代码编写任务,此次编写只编写趋势判断与包含关系的合并

import pandas as pdimport datetimeimport numpy as npimport efinance as effrom datetime import datetimeimport warningswarnings.filterwarnings('ignore')from pyg2plot import Plot,JS
data = pd.DataFrame(ef.stock.get_quote_history('603087'))data = data.rename(columns={'日期':'date','开盘':'open','最低':'low','最高':'high',\'成交量':'volume','成交额':'openinterest','收盘':'close'})cols=['date','open','close','high','low','volume']data= data[cols]
def combine_K_line(df):df['high_new']=0df['low_new']=0high=0low=0trend_dict={}date_list=df.index.tolist()for i in range(len(date_list)):high_T=df.iloc[i]['high']#获取当下的highest pricelow_T=df.iloc[i]['low']#获取当下的lowest priceDelta_high=high_T-high#计算与前序(笔内的)hightest、lowest的差值,确定升序or降序Delta_low=low_T-low
if Delta_low>0 and Delta_high>0:#确定为升序flag=1high=high_Tlow=low_Ttrend_dict[i]=[flag,date_list[i]]#字典值为:升序or降序,日期if Delta_low<0 and Delta_high<0:#确定为降序flag=-1high=high_Tlow=low_Ttrend_dict[i]=[flag,date_list[i]]#向左合并,若完全重叠按向前一日合并计算,升序、降序按前一日计算if Delta_low==0 and Delta_high==0:if i-1 in trend_dict:if trend_dict[i-1][0]>0:flag=1trend_dict[i]=[flag,date_list[i]]if trend_dict[i-1][0]<0:flag=-1trend_dict[i]=[flag,date_list[i]]df.high_new.iloc[i]=highdf.low_new.iloc[i]=lowcontinue

elif Delta_low>=0 and Delta_high<=0:#向左合并if i-1 in trend_dict:if trend_dict[i-1][0]>0:flag=2trend_dict[i]=[flag,date_list[i]]low=low_Thigh=df.iloc[i-1]['high']if trend_dict[i-1][0]<0:flag=-2trend_dict[i]=[flag,date_list[i]]high=high_Tlow=df.iloc[i-1]['low']#当前high较前日high高,low较前日low低elif Delta_low<=0 and Delta_high>=0:#向右合并if i-1 in trend_dict: #处于什么区间if trend_dict[i-1][0]>0:#处于上升区间flag=3trend_dict[i]=[flag,date_list[i]]low=df.iloc[i-1]['low']high=high_Tif trend_dict[i-1][0]<0:#处于下降区间flag=-3trend_dict[i]=[flag,date_list[i]]high=df.iloc[i-1]['high']low=low_T
df.high_new.iloc[i]=highdf.low_new.iloc[i]=lowtrend_flag=pd.DataFrame.from_dict(trend_dict,orient='index',columns=['flag','date']).set_index('date')df['flag']=trend_flagreturn df



data = combine_K_line(data)data = data.reset_index()stockData = data[['date','open','close','high','low','flag']].to_dict(orient='records')

图片

















from pyg2plot import Plot,JSstockPlot = Plot('Stock')
stockPlot.set_options({'height': 400, 'appendPadding': [0, 10, 0, 0],'data': stockData,'xField': 'date','yField': ['open', 'close', 'high', 'low'],'slider': {},'label': {# 支持JS回调函数 'content': JS('''function(item) {return `${item.flag}`;}'''),'position':'top'}})stockPlot.render_notebook()

图片

图片

本次代码完成K线的合并数据处理,待更新:识别顶分型与底分型,线段

【参考内容】:《20180607-光大证券-技术形态选股系列报告之三:抽丝剥茧解缠论》

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约