包含k线的底分型公式(含K线底分型公式)

K线底分型公式源码:精准捕捉底部反转信号

深度解析:构建包含K线的底分型公式——从理论到实战的代码实现

在技术分析领域,尤其是基于缠中说禅(缠论)的交易体系中,分型(Fractal)被视为所有形态分析的基础。底分型作为判断潜在底部反转的关键信号,其识别逻辑直接决定了后续笔、线、中枢构建的准确性。 然而,许多初学者在编写量化公式时,往往忽略了一个核心细节:K线的包含关系处理。未经处理的原始K线数据中包含大量的“包含”现象,若直接套用简单的高低点比较,极易产生大量虚假信号。本文将深入探讨如何构建一个严谨的、包含K线处理逻辑的底分型公式,帮助交易者从代码层面理解这一经典形态。

一、 核心概念回顾:什么是底分型与包含关系?

在编写公式之前,我们必须明确两个基础定义,这是构建算法的逻辑基石。

1. 底分型(Bottom Fractal)

标准的底分型由三根连续的K线组成(设为 ),其形态特征为: 中间K线最低: 的最低价是三者中最低的。 两侧K线较高: 和 的最高价均高于 的最高价(或至少不低于,视具体定义而定,通常要求严格大于或包含处理后的结果)。 形态隐喻:类似于字母“V”或“U”,表示空头力量衰竭,多头开始反击。

2. 包含关系(Inclusion Relationship)

当相邻两根K线存在“包含”关系时(即一根K线的最高价和最低价完全被另一根K线涵盖),它们不能直接参与分型判断。 处理原则:必须将两根K线合并为一根新的“合成K线”。 方向性: 上升通道:取两根K线的最高价较高者作为新高,最低价较高者作为新低。 下降通道:取两根K线的最高价较低者作为新高,最低价较低者作为新低。 关键点:底分型的识别,必须建立在经过包含关系处理后的K线序列之上,而非原始数据。

二、 算法逻辑拆解:如何构建公式?

编写一个包含K线处理的底分型公式,通常分为三个步骤: 1. 预处理:遍历K线序列,识别并处理相邻K线的包含关系,生成新的K线序列。 2. 形态识别:在处理后序列中,寻找符合底分型特征的三连K线。 3. 信号确认:输出满足条件的日期或索引。

伪代码逻辑示意

```text For i from 2 to N-2: 1. 检查 K[i-1] 和 K[i] 是否存在包含关系 -> 若有,合并为 NewK[i-1] 2. 检查 NewK[i] 和 NewK[i+1] 是否存在包含关系 -> 若有,合并为 NewK[i] 3. 判断 NewK[i-1], NewK[i], NewK[i+1] 是否构成底分型:
  • High[NewK[i-1]] > High[NewK[i]]
  • Low[NewK[i-1]] > Low[NewK[i]]
  • High[NewK[i+1]] > High[NewK[i]]
  • Low[NewK[i+1]] > Low[NewK[i]]
(注:不同软件对高低点的严格程度定义略有差异) 4. 若满足,标记为底分型信号 ```

三、 主流软件公式实现

以下分别提供在 通达信 和 Python (使用 pandas/ta-lib) 中的实现示例。

1. 通达信公式示例

通达信内置了部分包含处理逻辑,但为了严谨,我们通常需要先定义包含处理函数,再判断分型。 ```pascal {定义包含关系处理函数} {注意:通达信函数库有限,通常需手动展开或使用内置函数 IF} {这里展示简化逻辑,实际使用中建议先做K线合并} {假设我们已经处理了包含关系,得到新的HIGH和LOW} {在通达信中,直接判断原始数据容易出错,建议使用以下逻辑框架} {判断是否为底分型的前提:前一根不是顶分型,且当前处于包含处理后} {简化版底分型判断(未包含处理,仅示意形态)} {HH := REF(HIGH, 1) > HIGH AND REF(HIGH, 2) > HIGH; LL := REF(LOW, 1) < LOW AND REF(LOW, 2) > LOW; XG: HH AND LL;} {} {严谨版:需结合“K线包含处理”模块使用} {在通达信中,通常建议先编写一个“去包含”的指标,输出新的H和L,再基于此判断分型。} {此处提供一个基于标准分型定义的通用逻辑参考} {定义前两根K线的最高价和最低价} PRE2_H := REF(H, 2); PRE2_L := REF(L, 2); PRE1_H := REF(H, 1); PRE1_L := REF(L, 1); CUR_H := H; CUR_L := L; {底分型核心条件:中间K线(前一根)为最低点} {注意:这里假设没有包含关系,或已预处理} BOTTOM_FRACTAL: PRE1_H < PRE2_H AND PRE1_H < CUR_H AND PRE1_L < PRE2_L AND PRE1_L < CUR_L; ``` 专家提示:在通达信中实现完美的包含处理较为复杂,因为需要递归判断。许多高阶用户会编写专门的“缠论指标”来自动处理包含关系,然后再调用分型函数。

2. Python 实现示例(基于 Pandas)

Python 的优势在于可以清晰地实现包含关系的递归处理逻辑。 ```python import pandas as pd import numpy as np def process_inclusion(df): """ 处理K线包含关系 df: 包含 'open', 'high', 'low', 'close' 列的DataFrame 返回处理后的 DataFrame """ df = df.copy() df['new_high'] = df['high'] df['new_low'] = df['low'] # 判断趋势方向(简化版:通过收盘价或均线判断,此处用前一根K线趋势示意) # 实际缠论中,包含处理的方向取决于前一根K线的方向或整体趋势 for i in range(1, len(df)): prev = df.iloc[i-1] curr = df.iloc[i] # 判断是否包含 if (curr['high'] <= prev['high'] and curr['low'] >= prev['low']) or (prev['high'] <= curr['high'] and prev['low'] >= curr['low']): # 存在包含关系,合并 # 简化处理:上升通道取高,下降通道取低 # 这里需要根据实际缠论规则确定方向,例如以当前K线收盘突破方向为准 if curr['close'] >= prev['close']: # 假设上升 df.loc[i, 'new_high'] = max(prev['high'], curr['high']) df.loc[i, 'new_low'] = max(prev['low'], curr['low']) else: # 假设下降 df.loc[i, 'new_high'] = min(prev['high'], curr['high']) df.loc[i, 'new_low'] = min(prev['low'], curr['low']) return df def find_bottom_fractal(df): """ 在包含处理后的数据中寻找底分型 """ df = process_inclusion(df) df['is_bottom'] = False # 从第3根K线开始判断(索引2) for i in range(2, len(df)): prev2 = df.iloc[i-2] prev1 = df.iloc[i-1] curr = df.iloc[i] # 底分型条件:中间K线(前一根)的高低点均低于两侧 if (prev1['new_high'] < prev2['new_high'] and prev1['new_high'] < curr['new_high'] and prev1['new_low'] < prev2['new_low'] and prev1['new_low'] < curr['new_low']): df.loc[i, 'is_bottom'] = True return df

使用示例

data = pd.read_csv('stock_data.csv')

result = find_bottom_fractal(data)

print(result[result['is_bottom'] True])

```

四、 实战中的常见误区与优化建议

1. 误区一:直接使用原始K线判断

很多初学者编写的公式直接比较 `REF(LOW,1) < REF(LOW,2)` 和 `REF(LOW,1) < LOW`。这在震荡市中会产生大量假信号,因为包含关系会导致K线实体重叠,使得“最低点”的判断失真。必须包含处理。

2. 误区二:忽略分型的“确认”

底分型形成后,并不一定立即反转。缠论强调,底分型需要第三根K线的确认(即第三根K线的收盘价是否站稳)。在公式中,可以增加一个过滤条件:`CLOSE > REF(HIGH, 1)` 来增强信号的可靠性,但会牺牲部分灵敏度。

3. 优化建议:结合成交量

底分型出现在低位缩量后放量,成功率更高。可以在公式中加入成交量过滤: ```pascal {通达信示例} VOL_CONDITION := VOL > MA(VOL, 5); FINAL_SIGNAL: IS_BOTTOM_FRACTAL AND VOL_CONDITION; ```

4. 多周期共振

单一周期的底分型噪音较大。建议在日线底分型的基础上,叠加60分钟或30分钟级别的底分型确认,形成多周期共振,提高交易胜率。

五、 结语

构建“包含K线的底分型公式”不仅是编程技巧的体现,更是对市场微观结构的深刻理解。通过严谨的包含关系处理,我们能够剔除市场噪音,捕捉到真正的趋势转折点。 对于量化交易者而言,掌握这一基础模块,是构建更复杂笔、线段乃至中枢策略的第一步。建议在实际应用中,先用历史数据回测不同参数下的信号频率,再结合自身的交易体系进行微调,方能发挥分型公式的最大价值。 免责声明:本文内容仅供技术交流与学习参考,不构成任何投资建议。股市有风险,入市需谨慎。
文章版权声明:除非注明,否则均为 静秋号公式 原创文章,转载或复制请以超链接形式并注明出处。