Pine Script多交叉条件校验场景下如何存储交叉值供后续K线使用
实现方案
核心逻辑是给每个交叉条件定义持续状态布尔变量,变量默认初始值为false,当对应正向交叉事件触发时设为true,反向交叉事件触发时重置为false,无事件发生时保持上一根K线的取值即可,该逻辑适配所有常见量化交易脚本语言。
以下是具体实现步骤:
- 第一步:为4个多头条件、4个空头条件分别定义持久状态变量,示例默认用跨K线取值语法
变量名[1]获取上一根K线的变量值// 初始化状态变量,首次运行默认值为false ChikouAboveAll_status = na(ChikouAboveAll_status[1]) ? false : ChikouAboveAll_status[1] priceAboveCloud_status = na(priceAboveCloud_status[1]) ? false : priceAboveCloud_status[1] greenCloudSignal_status = na(greenCloudSignal_status[1]) ? false : greenCloudSignal_status[1] tenkan_X_KijunLong_status = na(tenkan_X_KijunLong_status[1]) ? false : tenkan_X_KijunLong_status[1] - 第二步:每根K线更新状态变量,正向交叉触发时设为true,反向交叉触发时设为false
// 迟滞线上穿对应参考线时状态设为true,下穿时设为false if ChikouCrossoverUpEvent // 替换为你原来返回ChikouAboveAll=true的交叉事件 ChikouAboveAll_status := true else if ChikouCrossoverDownEvent // 替换为对应反向交叉事件 ChikouAboveAll_status := false // 其余三个条件的状态更新逻辑同理 if priceCrossoverUpCloudEvent priceAboveCloud_status := true else if priceCrossoverDownCloudEvent priceAboveCloud_status := false if greenCloudFormedEvent greenCloudSignal_status := true else if redCloudFormedEvent greenCloudSignal_status := false if tenkanCrossoverUpKijunEvent tenkan_X_KijunLong_status := true else if tenkanCrossoverDownKijunEvent tenkan_X_KijunLong_status := false - 第三步:用更新后的状态变量替换原来的瞬时交叉变量计算信号
longSignal = ChikouAboveAll_status and priceAboveCloud_status and greenCloudSignal_status and tenkan_X_KijunLong_status // 空头信号的状态逻辑和上述完全对称,按相同规则替换即可
额外优化提示:如果需要给交叉事件加有效期,比如仅保留最近N根K线内的交叉状态,可以额外加一个计数器,交叉发生时重置计数器,每根K线计数器+1,超过阈值N时自动把对应状态设为false即可。如果策略有明确的出场规则,也可以在出场触发时按需重置对应状态变量,避免残留状态错误触发后续信号。
内容的提问来源于stack exchange,提问作者Igor Kluź
相关产品推荐
相关产品推荐

