如何编写跨品种适配不同价格的Pine Script 5根K线形态识别程序
5根K线形态识别Pine Script跨场景实现指导
跨场景适配核心实现逻辑
要实现不同价格标的、不同K线分辨率下都能正常识别,核心是抛弃固定数值阈值,全部采用相对维度做判断:
- 价格维度适配:使用
ta.atr()(平均真实波幅)作为所有涨跌幅、实体长度判断的基准单位,不管标的价格是0.3美元还是300美元,用「波动幅度 / 最近N周期ATR」的相对值做判断标准,不会受价格量级影响。 - 时间维度适配:所有K线取值都用相对当前K线的偏移量(如
close[4]代表当前K线往前数第4根的收盘价),Pine Script会自动适配不同K线分辨率的周期,1分钟线、日线、周线都可以直接通用。
形态识别代码实现框架
首先将你要识别的5根K线从左到右编号为K1-K5(默认当前K线为形态的最后一根即K5),先量化出每根K线的阴阳、实体占比、相对高低点、涨跌幅等特征,再按以下框架编写代码即可:
//@version=5 indicator("自定义5K形态识别", overlay=true) // 可调整通用参数 atr_cycle = input.int(20, title="ATR计算周期", minval=5) wave_threshold = input.float(1.0, title="大K线波幅阈值(倍ATR)", step=0.1) min_entity_ratio = input.float(0.6, title="实体最小占比(0-1)", step=0.1) // 计算通用基准波幅 atr_base = ta.atr(atr_cycle) // 取5根K线的核心价格值 k1_o = open[4], k1_c = close[4], k1_h = high[4], k1_l = low[4] k2_o = open[3], k2_c = close[3], k2_h = high[3], k2_l = low[3] k3_o = open[2], k3_c = close[2], k3_h = high[2], k3_l = low[2] k4_o = open[1], k4_c = close[1], k4_h = high[1], k4_l = low[1] k5_o = open, k5_c = close, k5_h = high, k5_l = low // ---------------替换为你对应形态的判断条件--------------- // 以下为示例条件,可根据你的形态特征修改 cond1 = k1_c > k1_o and math.abs(k1_c - k1_o) / (k1_h - k1_l) >= min_entity_ratio // K1为大阳线 cond2 = k2_c < k2_o and math.abs(k2_c - k2_o) >= atr_base * wave_threshold // K2为跌幅达标的大阴线 cond3 = math.abs(k3_c - k3_o) <= atr_base * 0.2 // K3为小实体震荡K线 cond4 = k4_c < k4_o and k4_l < k2_l // K4为跌破K2低点的阴线 cond5 = k5_c > k5_o and k5_c > k1_h // K5为突破K1高点的阳线 // -------------------------------------------------------- // 形态触发标记 target_pattern = cond1 and cond2 and cond3 and cond4 and cond5 plotshape(target_pattern, location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text="目标形态", size=size.small)
自定义调整说明
你只需要修改代码中cond1到cond5的判断条件,匹配你要识别的形态的量化特征即可,所有波动类的判断都用atr_base作为基准单位,不需要针对不同交易标的、不同K线分辨率单独调整核心逻辑,即可实现跨场景适配。
内容的提问来源于stack exchange,提问作者Pit
相关产品推荐
相关产品推荐

