两阴法则在量化交易中通过编程实现的核心步骤是:定义连续两日阴线条件、设定跌幅阈值、计算防守线(两阴最低点),并编写股价跌破防守线时触发卖出信号的逻辑。具体实现通常使用 Python 的 Pandas 库处理历史数据,通过条件筛选和循环判断完成信号生成。

信号定义与条件设置

两阴法则的信号定义基于连续两日收盘价低于开盘价(即阴线),且累计跌幅超过预设阈值(常见设为3%-5%)。编程时,首先用 Pandas 计算每日涨跌幅(close / open - 1),然后通过 rolling(2).sum() 获取连续两日跌幅之和。条件如下:

  • 条件一:连续两日均为阴线(close < open
  • 条件二:两日累计跌幅 ≤ -阈值(如-3%)

代码示例中,可用 df['signal'] = (df['is_阴线1'] & df['is_阴线2'] & (df['two_day_return'] <= -0.03)) 生成布尔信号列。

防守线设置与卖出逻辑

防守线定义为两阴线中最低价的最低点(即min(low1, low2))。当后续股价收盘价跌破防守线时,触发卖出信号。编程实现时,在信号出现后记录防守线价格,然后逐日检查 close < defense_line

加入成交量过滤可提高信号可靠性:仅在放量跌破(当日成交量高于过去N日均量的1.5倍)时才执行卖出。代码中计算 volume_ratio = volume / volume.rolling(20).mean(),条件改为 (close < defense_line) & (volume_ratio > 1.5)

回测注意事项

回测时重点防范过拟合。参数(如跌幅阈值、成交量倍数)应在样本内优化后,用未参与优化的样本外数据验证。建议使用滚动窗口回测,每段窗口独立优化参数,观察策略收益的稳定性。防守线设置不宜过窄(如低于3%),否则频繁触发止损;也不宜过宽(超过8%),否则失去保护意义。

总结

两阴法则的量化编程核心在于精确的条件组合(连续阴线+跌幅阈值+防守线跌破)和成交量确认。回测中需特别注意参数鲁棒性,避免过度拟合历史数据。

常见问题

两阴法则的阈值可以动态调整吗?

可以。常见做法是将阈值设为ATR(平均真实波幅)的倍数,如两日累计跌幅超过2倍ATR,以适应不同波动率的股票。动态参数在回测中需要更严格的样本外验证。

防守线跌破后,如果股价又涨回来怎么办?

这是两阴法则的固有缺陷。建议结合趋势过滤(如仅在上升趋势中启用该法则),或设置重新入场条件(如股价重新站上防守线且放量)。回测中应统计这类假信号的频率。

成交量过滤参数如何优化?

成交量倍数通常取值1.5-2.0倍。优化时先固定跌幅阈值,遍历成交量倍数,选择夏普比率最高的组合。注意倍数过高会导致信号过少,过低则过滤效果差。

延伸阅读