股价潜结构——完整实施方案规范

基于姚建明,股价潜结构


目录

  1. 概述
  2. 价格结构理论
  3. 隐性供需区域
  4. 价格形态结构
  5. 量价结构分析
  6. 结构支撑与阻力
  7. 基于结构分析的入场规则
  8. 出场规则
  9. 风险管理
  10. 行为规则
  11. 常见错误
  12. 交易生命周期示例
  13. 实施方案伪代码
  14. 关键原则总结

1. 概述

姚建明的股价潜结构提供了一个框架,用于理解看似混乱的价格运动下的隐藏架构。核心论点是股票价格不是随机运动的——它们受到大资金流动、市场心理和金融市场分形性质的隐藏结构模式所支配。这些结构并不总是在表面可见的,但可以通过结合分形几何、威科夫式供需分析和量价关系理论的严格分析方法进行解码,这些方法被适应到中国A股市场背景。

核心哲学

本框架强调的内容

适用市场

本框架主要为中国A股市场(上交所/深交所)开发,但结构原理是通用的。姚强调,隐藏结构存在于任何具有足够流动性和参与者多样性的市场中——股票、期货、外汇和指数。


2. 价格结构理论

2.1 市场的分形性质

姚基于 Benoit Mandelbrot 的分形市场假设:金融市场在每个尺度上都表现出自相似模式。这不是比喻——这是形成整个分析体系基础的结构现实。

市场背景下分形的定义: 分形是在不同时间框架上表现出自相似性的价格结构。15分钟图上的五浪上涨与月线图上的五浪上涨具有相同的结构DNA。比例、成交量特征和行为动态在结构上是等价的。

实际意义:

2.2 跨时间框架的自相似性

姚确定了三个结构分辨率级别:

级别 时间框架 目的
宏观结构 月线、周线 确定主导结构趋势和主要供需区域
中观结构 日线、60分钟 识别中间结构形态和交易机会
微观结构 15分钟、5分钟 在更高结构设定的背景下精确定位入场/出场时间

嵌套原则: 每个中观结构都是宏观结构的组成部分。每个微观结构都是中观结构的组成部分。有效的交易设置要求微观结构与中观结构一致,理想情况下也与宏观结构一致。

2.3 结构阶段

每个价格运动,在每个尺度上,都要经历四个结构阶段:

  1. 吸筹阶段: 聪明钱悄悄建仓。价格在定义范围内横向移动。成交量普遍较低,但在支撑测试时显示微妙峰值。隐藏结构正在铺设——下一波上涨的基础。
  2. 拉升阶段: 结构突破。价格在扩大成交量中上涨。回调浅而短暂。在吸筹期间构建的隐藏结构作为趋势变得可见。
  3. 派发阶段: 聪明钱向晚期买家分发股票。价格在 elevated 水平横向移动。成交量高但价格进展停滞。隐藏结构从看涨转向看跌,尽管大多数参与者尚不可见。
  4. 下跌阶段: 价格下跌,通常急剧。成交量在恐慌性卖出时可能高,或在逐步清算时低。隐藏结构现在是完全看跌的。

关键洞察: 阶段之间的转换是最有价值的隐藏结构信号发生的地方。从吸筹到拉升,以及从派发到下跌的转换,是最大结构清晰度和最大利润潜力的时刻。

2.4 结构对称性

姚观察到价格结构表现出一种对称性——不是完美的镜像对称,而是比例对称。关键原则:

这些对称关系是指导方针,不是定律。它们提供结构期望,帮助交易者校准目标和时机。


3. 隐性供需区域

3.1 什么使区域"隐性"

传统支撑/阻力分析在明显的高点和低点画线。姚认为,最强大的供需区域是隐藏的——它们不在明显的价格水平,而是在吸筹和派发阶段内的结构拐点处。

隐性需求区(隐性需求区)的特征:

隐性供给区(隐性供给区)的特征:

3.2 识别隐性区域

第1步:找到整合范围 找到价格在有意义的时间内横向交易的区域(分析时间框架上至少10-15根K线)。这些是隐藏供需区域的滋生地。

第2步:分析范围内成交量分布 使用成交量分布或逐根成交量分析来确定范围内成交量最大的位置。范围内累计成交量最高的价格水平是控制点(POC)——这通常是最强的隐藏区域。

第3步:识别结构测试 寻找价格接近区域边界并在特定成交量形态下反转的实例:

第4步:确认区域有效性 当价格在初始离开后返回区域且区域保持时,隐藏区域被确认。首次返回测试最可靠——随后的测试会削弱区域,因为 resting orders 被吸收。

3.3 区域强度层次

姚按结构强度对隐藏区域进行排名:

  1. 新鲜区域(未触及区): 创建但从未重新测试的区域。最强。
  2. 单次测试区域(单次测试区): 测试一次并保持的区域。强。
  3. 多次测试区域(多次测试区): 测试2-3次。中等——每次测试吸收 resting orders。
  4. 耗尽区域(耗尽区): 测试超过3次。弱——可能在下次测试时失败。

3.4 区域宽度和重要性


4. 价格形态结构

4.1 吸筹形态

姚将威科夫的吸筹示意图适应并扩展到隐藏结构框架:

阶段A——停止下跌趋势:

阶段B——构建结构:

阶段C——弹簧(弹簧效应):

阶段D——拉升开始:

4.2 派发形态

吸筹的镜像,有其自身隐藏的结构特征:

阶段A——停止上涨趋势:

阶段B——派发结构:

阶段C——上冲(上冲回落):

阶段D——下跌开始:

4.3 持续结构

并非所有结构形态都是反转。姚识别了在趋势中出现的持续结构:


5. 量价结构分析

5.1 成交量作为结构验证器

姚将成交量不是作为独立指标,而是作为结构验证器对待。成交量确认或否认从价格形态得出的结构假设。

原则1:成交量先于价格。 结构成交量变化(扩大或收缩)出现在结构价格变化之前。整合范围内的成交量扩大,即使没有价格突破,也预示着结构转换即将发生。

原则2:努力与结果(量价背离)。 成交量(努力)与价格运动(结果)的关系揭示结构健康:

原则3:大事成交量标志着结构极端。 当成交量达到相对 recent history(20天平均的2-3倍)的极端时,它预示着结构阶段即将结束。低位的大事成交量暗示下跌即将结束。高位的大事成交量暗示上涨即将结束。

5.2 结构拐点处的成交量形态

在弹簧处:

在上冲处:

从吸筹突破时:

从派发跌破时:

5.3 成交量分布分析

姚倡导为整合范围构建成交量分布以定位结构的重心:


6. 结构支撑与阻力

6.1 结构 vs 传统支撑/阻力

传统技术分析在先前的高点和低点画支撑/阻力。姚认为这是肤浅的。结构支撑/阻力来源于通过第3-5节方法识别的隐藏供需区域。

关键区别:

6.2 结构支撑位

按可靠性排名(最强优先):

  1. 来自更高时间框架的新鲜隐藏需求区。 从未测试过的周线需求区是最强的结构支撑。
  2. 先前吸筹范围的POC。 在成功吸筹期间成交量最多的价格水平是强大的结构支撑。
  3. 弹簧水平。 经验证弹簧的确切低点产生强大的结构支撑——它代表聪明钱果断吸收最后一波供应的价格。
  4. 突破后的回踩区域。 先前吸筹范围顶部附近区域,在突破后重新测试时,作为结构支撑。
  5. 阶梯结构边界。 上升趋势中整合台阶的低点作为持续移动的结构支撑。

6.3 结构阻力位

按可靠性排名(最强优先):

  1. 来自更高时间框架的新鲜隐藏供给区。 从未测试过的周线供给区是最强的结构阻力。
  2. 先前派发范围的POC。 在派发期间成交量最多的价格水平产生强大的结构阻力。
  3. 上冲水平。 经验证上冲的确切高点产生强大的结构阻力。
  4. 跌破后反弹区域。 先前派发范围底部附近区域,在跌破后重新测试时,作为结构阻力。
  5. 阶梯结构边界。 下降趋势中整合台阶的高点作为结构阻力。

6.4 结构共振

当多个结构 level 在狭窄的价格 band 内聚集时,它们形成一个结构共振区。这些区域比单独 levels 可靠得多。

当3个或更多因素(例如,新鲜需求区 + POC水平 + 斐波那契回撤都在彼此的2%内)时,代表高概率交易位置。


7. 基于结构分析的入场规则

7.1 主要入场设置

设置1:弹簧入场(弹簧入场)

设置2:突破入场(突破入场)

设置3:回踩入场(回踩入场)

设置4:上冲做空入场(上冲做空入场)

7.2 次要入场设置

设置5:结构回踩入场(结构回踩入场)

设置6:结构共振入场(结构共振入场)

7.3 入场过滤器

在任何入场之前,确认以下内容:

  1. 多时间框架对齐: 入场时间框架的结构必须与至少一个更高时间框架对齐。日线弹簧入场如果周线结构也支持则更强。
  2. 市场结构背景: 在广泛市场下降趋势中(宏观结构看跌),减少多头入场。在广泛市场上涨趋势中,减少空头入场。顺着结构潮汐游泳。
  3. 成交量确认: 没有成交量确认结构 thesis 就不入场。扩大成交量上的弹簧不是弹簧——是跌破。
  4. 风险/回报比率: 在投入资本之前最低2:1回报风险比。结构目标(下一区域、测量移动)必须提供至少2倍的止损距离。

8. 出场规则

8.1 结构目标出场

主要目标:

分批出场:

8.2 结构失效出场

当结构 thesis 被验证失效时立即退出:

8.3 基于时间的结构出场

姚引入了基于结构对称性的时间出场概念:

8.4 行为出场信号


9. 风险管理

9.1 仓位管理

姚倡导风险第一的仓位管理模型:

每笔交易最大风险: 总账户权益的1-2%。

仓位规模计算:

仓位规模 = (账户权益 × 风险百分比) / (入场价格 - 止损价格)

结构调整: 当结构设置具有最大共振(3+因素、多时间框架对齐、强成交量确认)时,使用2%风险。对于确认因素较少的次要设置,使用1%风险或更少。

9.2 投资组合层面结构风险

9.3 止损放置

止损必须放置在有结构意义的水平,而非任意百分比:

如果结构正确的止损距离产生的仓位规模太小而不切实际,则该设置不适合账户规模。不要放宽止损以增加仓位规模——这违反了结构风险管理。

9.4 渐进风险降低

当交易朝预期方向移动并通过结构里程碑时:

  1. 当价格达到1R利润(等于初始风险的回报)时,将止损移至盈亏平衡。
  2. 当价格越过第一个结构目标时,将止损移至最近结构支撑下方。
  3. 当每个新结构支撑形成时(阶梯结构),将 trailing stop advances to below it。
  4. 一旦 advanced,永远不要将止损向后移动(远离价格)。

10. 行为规则

10.1 耐心作为结构纪律

结构方法要求耐心。吸筹阶段持续数周到数月。弹簧可能不发生。突破可能会延迟。交易者的工作是等待结构完成,而不是在模糊阶段强制入场。 姚引述:"结构未成,不可妄动"(当结构尚未形成时,不要轻率行动)。

10.2 信念层次

并非所有交易都值得同等信念。姚按结构完整性对交易质量进行排名:

等级 描述 信念 仓位规模
A+ 完整吸筹周期可见,弹簧确认,多时间框架对齐,成交量确认 最大 2%风险
A 吸筹可见,突破确认,成交量确认 1.5%风险
B 存在结构设置但缺少一个确认因素 中等 1%风险
C 结构设置模糊,只有一个或两个因素存在 0.5%风险或跳过

10.3 情绪结构陷阱

姚识别了与结构阶段对应的行为陷阱:

10.4 每日结构 routine

  1. 盘前: 审查所有仓位和观察列表股票的结构状态。识别每只股票处于哪个结构阶段。根据上一交易日的行动更新供需区域。
  2. 交易时段: 执行计划的入场和出场。不要偏离结构计划。避免基于盘中噪音的被动交易。
  3. 盘后: 记录当天的结构观察。更新每个仓位的结构 thesis。注意任何阶段转换或新形态形成。
  4. 每周: 进行更高时间框架结构审查。识别正在形成的新周线级别吸筹或派发形态。相应调整投资组合的结构偏见。

11. 常见错误

11.1 结构错误识别

11.2 成交量误读

11.3 时间框架错误

11.4 风险管理失败

11.5 心理错误


12. 交易生命周期示例

场景:A股股票——从吸筹到拉伸

股票: 假设在上海证券交易所交易的股票"XYZ"。

第1步:宏观结构评估(周线图)

第2步:中观结构识别(日线图)

第3步:等待弹簧(日线图)

第4步:入场执行

第5步:结构目标

第6步:交易管理

总利润: 18,000 + 38,400 = 56,400元(账户权益的11.3%)。 承担风险: 10,000元(账户权益的2%)。 实现回报/风险: 5.64:1。


13. 实施方案伪代码

13.1 结构形态检测器

类 StructuralPatternDetector:

    函数 detect_accumulation(price_data, volume_data, lookback=100):
        """
        检测价格/成交量数据中的吸筹结构。
        返回具有阶段状态的已识别吸筹区域列表。
        """

        # 第1步:找到潜在卖出高潮
        selling_climaxes = []
        对于 i IN range(lookback, len(price_data)):
            如果 (price_data[i].low < min(price_data[i-20:i].lows)
                AND volume_data[i] > 3 * average(volume_data[i-20:i])
                AND price_data[i].close > price_data[i].open):  # 恢复K线
                selling_climaxes.append({
                    index: i,
                    price: price_data[i].low,
                    volume: volume_data[i]
                })

        # 第2步:对于每个SC,寻找随后的AR和范围形成
        accumulation_zones = []
        对于 sc IN selling_climaxes:
            # 找到自动反弹(SC后5-10根K线内的最高点)
            ar_window = price_data[sc.index+1 : sc.index+11]
            ar_high = max(ar_window.highs)
            ar_index = index_of_max(ar_window.highs) + sc.index + 1

            # 定义范围边界
            range_low = sc.price
            range_high = ar_high
            range_height = range_high - range_low

            # 第3步:确认阶段B(范围内整合)
            consolidation_bars = 0
            对于 j IN range(ar_index+1, min(ar_index+80, len(price_data))):
                如果 price_data[j].low >= range_low * 0.98
                   AND price_data[j].high <= range_high * 1.02:
                    consolidation_bars += 1

            如果 consolidation_bars < 15:
                继续  # 吸筹的整合不够

            # 第4步:寻找成交量下降的二次测试
            st_count = 0
            st_volume_declining = TRUE
            对于 j IN range(ar_index+1, ar_index+consolidation_bars):
                如果 price_data[j].low <= range_low * 1.02:
                    st_count += 1
                    如果 volume_data[j] > sc.volume * 0.7:
                        st_volume_declining = FALSE

            # 第5步:检测弹簧
            spring_detected = FALSE
            spring_index = -1
            spring_price = 0
            对于 j IN range(ar_index+15, ar_index+consolidation_bars+10):
                如果 (price_data[j].low < range_low
                    AND price_data[j].close > range_low
                    AND volume_data[j] < sc.volume * 0.5):
                    spring_detected = TRUE
                    spring_index = j
                    spring_price = price_data[j].low
                    突破

            # 第6步:确定阶段
            如果 spring_detected:
                phase = "阶段C - 弹簧确认"
            否则如果 st_count >= 2 AND st_volume_declining:
                phase = "阶段B - 构建中"
            否则:
                phase = "阶段A - 早期"

            accumulation_zones.append({
                sc_index: sc.index,
                sc_price: sc.price,
                ar_high: ar_high,
                range_low: range_low,
                range_high: range_high,
                phase: phase,
                spring_detected: spring_detected,
                spring_index: spring_index,
                spring_price: spring_price,
                consolidation_bars: consolidation_bars,
                secondary_tests: st_count,
                volume_declining: st_volume_declining
            })

        返回 accumulation_zones


    函数 detect_distribution(price_data, volume_data, lookback=100):
        """
        检测派发结构。吸筹的镜像逻辑。
        """

        # 第1步:找到潜在买入高潮
        buying_climaxes = []
        对于 i IN range(lookback, len(price_data)):
            如果 (price_data[i].high > max(price_data[i-20:i].highs)
                AND volume_data[i] > 3 * average(volume_data[i-20:i])
                AND price_data[i].close < price_data[i].open):  # 反转K线
                buying_climaxes.append({
                    index: i,
                    price: price_data[i].high,
                    volume: volume_data[i]
                })

        # 第2步:对于每个BC,寻找AR和范围
        distribution_zones = []
        对于 bc IN buying_climaxes:
            ar_window = price_data[bc.index+1 : bc.index+11]
            ar_low = min(ar_window.lows)
            ar_index = index_of_min(ar_window.lows) + bc.index + 1

            range_high = bc.price
            range_low = ar_low

            # 第3步:确认整合
            consolidation_bars = 0
            对于 j IN range(ar_index+1, min(ar_index+80, len(price_data))):
                如果 price_data[j].high <= range_high * 1.02
                   AND price_data[j].low >= range_low * 0.98:
                    consolidation_bars += 1

            如果 consolidation_bars < 15:
                继续

            # 第4步:检测上冲
            upthrust_detected = FALSE
            upthrust_index = -1
            对于 j IN range(ar_index+15, ar_index+consolidation_bars+10):
                如果 (price_data[j].high > range_high
                    AND price_data[j].close < range_high
                    AND volume_data[j] > average(volume_data[j-10:j]) * 1.5):
                    upthrust_detected = TRUE
                    upthrust_index = j
                    突破

            如果 upthrust_detected:
                phase = "阶段C - 上冲确认"
            否则:
                phase = "阶段B - 派发中"

            distribution_zones.append({
                bc_index: bc.index,
                bc_price: bc.price,
                ar_low: ar_low,
                range_high: range_high,
                range_low: range_low,
                phase: phase,
                upthrust_detected: upthrust_detected,
                upthrust_index: upthrust_index,
                consolidation_bars: consolidation_bars
            })

        返回 distribution_zones

13.2 供需区域识别器

类 SupplyDemandZoneIdentifier:

    函数 identify_zones(price_data, volume_data, timeframe="日线"):
        """
        基于成交量集中和结构分析识别隐藏供需区域。
        """

        zones = []

        # 第1步:找到整合范围
        consolidations = find_consolidation_ranges(price_data, min_bars=10)

        对于 consol IN consolidations:
            range_data = price_data[consol.start : consol.end]
            range_volume = volume_data[consol.start : consol.end]

            # 第2步:为范围构建成交量分布
            price_min = min(range_data.lows)
            price_max = max(range_data.highs)
            num_bins = 20
            bin_size = (price_max - price_min) / num_bins

            volume_profile = array(num_bins, 0)
            对于 i IN range(len(range_data)):
                bar = range_data[i]
                vol = range_volume[i]
                # 按比例分配成交量到K线范围
                low_bin = floor((bar.low - price_min) / bin_size)
                high_bin = floor((bar.high - price_min) / bin_size)
                如果 high_bin == low_bin:
                    volume_profile[low_bin] += vol
                否则:
                    vol_per_bin = vol / (high_bin - low_bin + 1)
                    对于 b IN range(low_bin, high_bin+1):
                        如果 b < num_bins:
                            volume_profile[b] += vol_per_bin

            # 第3步:找到控制点
            poc_bin = argmax(volume_profile)
            poc_price = price_min + (poc_bin + 0.5) * bin_size

            # 第4步:找到价值区(70%总成交量)
            total_vol = sum(volume_profile)
            target_vol = total_vol * 0.70
            accumulated_vol = volume_profile[poc_bin]
            va_low_bin = poc_bin
            va_high_bin = poc_bin

            当 accumulated_vol < target_vol:
                expand_low = volume_profile[va_low_bin-1] 如果 va_low_bin > 0 否则 0
                expand_high = volume_profile[va_high_bin+1] 如果 va_high_bin < num_bins-1 否则 0
                如果 expand_low >= expand_high AND va_low_bin > 0:
                    va_low_bin -= 1
                    accumulated_vol += expand_low
                否则如果 va_high_bin < num_bins - 1:
                    va_high_bin += 1
                    accumulated_vol += expand_high
                否则:
                    突破

            va_low_price = price_min + va_low_bin * bin_size
            va_high_price = price_min + (va_high_bin + 1) * bin_size

            # 第5步:根据整合后的情况确定区域类型
            如果 consol.end < len(price_data) - 5:
                post_consol = price_data[consol.end : consol.end+5]
                如果 average(post_consol.closes) > consol.range_high:
                    zone_type = "需求"  # 价格上升后——这是吸筹
                否则如果 average(post_consol.closes) < consol.range_low:
                    zone_type = "供给"  # 价格下跌后——这是派发
                否则:
                    zone_type = "中性"
            否则:
                zone_type = "待定"  # 整合仍在进行

            # 第6步:找到低成交量节点(结构气穴)
            avg_bin_vol = total_vol / num_bins
            low_vol_nodes = []
            对于 b IN range(num_bins):
                如果 volume_profile[b] < avg_bin_vol * 0.3:
                    low_vol_nodes.append({
                        price: price_min + (b + 0.5) * bin_size,
                        relative_volume: volume_profile[b] / avg_bin_vol
                    })

            # 第7步:确定区域新鲜度
            times_tested = 0
            对于 i IN range(consol.end, len(price_data)):
                如果 (zone_type == "需求"
                    AND price_data[i].low <= va_high_price
                    AND price_data[i].low >= va_low_price):
                    times_tested += 1
                否则如果 (zone_type == "供给"
                      AND price_data[i].high >= va_low_price
                      AND price_data[i].high <= va_high_price):
                    times_tested += 1

            如果 times_tested == 0:
                freshness = "新鲜"
            否则如果 times_tested == 1:
                freshness = "单次测试"
            否则如果 times_tested <= 3:
                freshness = "多次测试"
            否则:
                freshness = "耗尽"

            zones.append({
                type: zone_type,
                poc_price: poc_price,
                va_low: va_low_price,
                va_high: va_high_price,
                range_low: price_min,
                range_high: price_max,
                freshness: freshness,
                times_tested: times_tested,
                low_volume_nodes: low_vol_nodes,
                timeframe: timeframe,
                start_index: consol.start,
                end_index: consol.end,
                bar_count: consol.end - consol.start
            })

        返回 zones


    函数 find_consolidation_ranges(price_data, min_bars=10):
        """
        识别价格横向交易的时期。
        整合定义为在至少 min_bars 期间,范围(高-低)小于
        相对于 recent ATR 的阈值的时期。
        """

(文件长度限制——继续从第850行)