Pine Script条件编写求助:当前K线实体2倍于前K线时不执行逻辑
Pine Script 条件逻辑修正方案
原代码问题分析
- 条件逻辑倒置:需求是「当前实体是前一根2倍时不操作」,但原代码判断的是
BodySizeMath *2 > BodySizeMath[1](当前实体的2倍大于前一根),逻辑完全相反。 - 实体大小定义模糊:原代码用
math.abs(close - open)/open计算的是实体占开盘价的百分比,若需求是绝对实体长度的2倍,这个计算方式不符合预期。 - 变量用途偏离需求:需求是做条件判断,原代码返回
close或open,没有实现布尔值的条件标记功能。
正确实现方式
根据需求,我们需要先明确「实体大小」的定义,以下分两种常见场景给出代码:
场景1:基于绝对实体长度的判断
//@version=5 indicator("实体大小条件判断", overlay=true) // 计算当前和前一根K线的绝对实体长度 currentBody = math.abs(close - open) prevBody = math.abs(close[1] - open[1]) // 核心条件:当前实体未达到前一根的2倍时,目标条件生效 targetConditionActive = not (currentBody >= 2 * prevBody) // 示例:用颜色标记条件生效的K线 barcolor(targetConditionActive ? color.new(color.blue, 0) : color.new(color.gray, 0))
场景2:基于实体占开盘价百分比的判断
如果需求的「实体大小」是指相对开盘价的比例,则调整实体大小的计算方式:
//@version=5 indicator("实体百分比条件判断", overlay=true) // 计算当前和前一根K线的实体占开盘价百分比 currentBodyPct = math.abs(close - open) / open * 100 prevBodyPct = math.abs(close[1] - open[1]) / open[1] * 100 // 核心条件 targetConditionActive = not (currentBodyPct >= 2 * prevBodyPct) // 示例:用向上三角标记条件生效的K线 plotshape(targetConditionActive, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
代码说明
targetConditionActive是布尔变量:true表示目标条件生效,false表示当前实体是前一根的2倍及以上,不执行操作。- 可根据实际需求,将
targetConditionActive用于后续的逻辑判断、绘图标记等操作。
内容的提问来源于stack exchange,提问作者Mikado
相关产品推荐
相关产品推荐

