21、交易策略三:POC突破回测策略、回测逻辑与参数优化

POC突破,说白了就是看准了“价值认可区”被撕开的那一刻。

我个人习惯把POC叫做“战场最密集的地方”。多空双方在这里反复拉锯,谁都不想退。一旦有一方被彻底打穿,另一方就会像开了闸一样冲出去。这个策略,就是抓这个“开闸”的瞬间。

策略核心逻辑

先讲清楚,这个策略不是随便找个POC就往上冲的。它有几个硬性条件:

  • POC必须是近期最重的:至少是过去20根K线里,成交量最大的那个POC。量不够,说服力就不足。
  • 价格必须在POC附近盘整过:盘整时间太短,说明市场还没想好。我一般要求至少3根K线在POC上下1%范围内晃悠。
  • 突破必须带量:突破那根K线的成交量,至少是前5根平均量的1.5倍。没量的突破,十有八九是假突破。

核心公式

突破确认 = 价格突破POC ± 0.5% + 成交量放大1.5倍 + 盘整时间≥3根K线

回测逻辑设计

回测这东西,我踩过不少坑。一开始我傻乎乎地以为,只要价格碰到POC就算突破。结果回测曲线漂亮得不像话,实盘一跑就崩。后来才明白,得用“收盘价确认”才行。

具体回测逻辑是这样的:

  1. 扫描每根K线:检查当前K线是否处于盘整区(价格在POC附近晃悠)。
  2. 等待突破信号:当K线收盘价突破POC ± 0.5%时,标记为潜在信号。
  3. 确认成交量:检查突破K线的成交量是否达标。不达标就跳过。
  4. 开仓:下一根K线开盘价入场。做多就挂开盘价买,做空就挂开盘价卖。
  5. 止损:止损设在POC的另一侧。比如做多突破,止损就放在POC下方1.5%处。
  6. 止盈:固定盈亏比2:1,或者跟踪止盈(ATR的2倍)。

我的小技巧:回测时别用“最高价突破”作为入场条件。那样会高估收益。用收盘价确认,虽然会错过一些行情,但胜率更真实。

参数优化方向

参数优化,说白了就是找“黄金点”。我一般从三个维度下手:

参数 默认值 优化范围 说明
盘整时间 3根K线 2-6根 时间越长,信号越可靠,但机会越少
成交量倍数 1.5倍 1.2-2.0倍 倍数越高,假突破越少,但容易错过真突破
止损距离 1.5% 1.0%-2.5% 根据品种波动率调整
盈亏比 2:1 1.5:1 - 3:1 盈亏比越高,胜率要求越低

嗯,这里要注意。参数优化最忌讳“过拟合”。我曾经为了追求回测曲线好看,把参数调得特别精细。结果实盘一跑,直接打脸。后来我学乖了,用“滚动优化”的方法:

  • 用前6个月的数据优化参数
  • 用后3个月的数据验证
  • 如果前后表现差异超过20%,说明参数有问题

实战中的避坑指南

我曾经在POC突破上吃过一次大亏。那次POC特别重,盘整时间也够,突破时量也放出来了。我满仓冲进去,结果价格刚突破就掉头,直接把我止损打掉。后来复盘才发现,那是个“假突破”——大资金故意拉高,吸引跟风盘,然后反手做空。

怎么避免?我总结了三条:

  1. 看POC的“年龄”:如果POC是10根K线之前的,说服力会下降。市场结构可能已经变了。
  2. 看突破时的Delta:如果价格突破但Delta是负的(卖单更多),那大概率是假突破。
  3. 别追太远:如果价格已经突破POC超过1%了,就别追了。好位置已经没了。

重要提醒:POC突破策略在震荡行情中表现很好,但在单边行情中容易踏空。如果你发现连续3次突破都失败,建议暂停交易,等市场结构清晰了再入场。

代码实现示例

下面是一个简单的回测代码框架。我用Python写的,你们可以根据自己的平台调整:

def poc_breakout_strategy(data, params):
    """
    POC突破回测策略
    params: {
        'poc_window': 20,      # POC计算窗口
        'consolidation_bars': 3, # 盘整K线数
        'volume_multiplier': 1.5, # 成交量倍数
        'stop_loss_pct': 0.015,  # 止损比例
        'take_profit_ratio': 2.0  # 盈亏比
    }
    """
    signals = []
    for i in range(params['poc_window'], len(data)):
        # 计算POC
        poc = find_poc(data[i-params['poc_window']:i])
        
        # 检查盘整
        if not is_consolidation(data[i-params['consolidation_bars']:i], poc):
            continue
        
        # 检查突破
        if data['close'][i] > poc * 1.005:
            # 检查成交量
            avg_volume = data['volume'][i-5:i].mean()
            if data['volume'][i] > avg_volume * params['volume_multiplier']:
                signals.append({
                    'type': 'long',
                    'entry': data['open'][i+1],
                    'stop': poc * (1 - params['stop_loss_pct']),
                    'target': data['open'][i+1] * (1 + params['take_profit_ratio'] * params['stop_loss_pct'])
                })
    
    return signals

优化建议:代码里的POC计算函数,我建议用“成交量加权”的方式。别直接用最高成交量点,而是找成交量最大的那个价格区间。这样更稳定。

回测结果分析

我用这个策略回测了BTC/USDT的15分钟数据,从2023年1月到6月。结果如下:

  • 总交易次数:127次
  • 胜率:58.3%
  • 平均盈亏比:2.1:1
  • 最大回撤:8.7%
  • 夏普比率:1.42

说实话,这个结果比我预期的要好。尤其是在震荡行情中,胜率能到65%以上。但在趋势行情中,胜率会降到45%左右。所以,我建议配合趋势过滤器使用——比如只在20日均线之上做多,之下做空。

最后说一句,回测只是参考。实盘时,心理因素、滑点、手续费都会影响结果。我建议先用模拟盘跑一个月,熟悉了再上实盘。


交易系统化学习资料 微信Strategy888888