微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

条件据说满足但预期的动作plotchar没有发生

如何解决条件据说满足但预期的动作plotchar没有发生

我正在尝试创建筛选器。从绘图开始:

(a) 两条红色水平直线标记回溯期的最高点和最低点。
(b) 两条蓝色水平直线标出该范围内的 25% 和 75% 点。

请检查屏幕截图。

我的问题是:当满足以下所有四个条件时,它应该标记 (plotchar),但它在 atm 中不起作用。

(1) 上半年,高点至少有一次处于区间上限。
(2) 上半年,低位至少有一次处于低位区间。
(3) 下半年,高位至少有一次处于区间上限。
(4) 后半段,低位下交叉,拉低区间线。

除非我遗漏了一些东西,否则屏幕截图中所有这四个条件都满足,因此应该将其绘制在蜡烛中|4| (LOW CROSSES-UNDER LOW RANGE LINE),但没有绘制任何内容

任何帮助将不胜感激!

下面是代码的相关部分,但如果您想检查和/或重复使用,请all code is here

lookBack = input(title="Lookback",type=input.integer,defval=24,minval=2)
range = input(title="Upper & Lower Range",defval=4,minval=10)

// INDICATORS & VARIABLES

highestHigh = highest(high,lookBack)
lowestLow = lowest(low,lookBack)

xAxisstartsAt = bar_index[lookBack]
xAxisFinishesAt = bar_index

upperLimit = highestHigh
lowerLimit = lowestLow

upperRange = ((highestHigh - lowestLow)/range) + lowestLow
lowerRange = highestHigh - ((highestHigh - lowestLow)/range)

HighAboveUpperRange = high > upperRange
LowBelowLowerRange = low < lowerRange

occurrencesAbovetotal   = sum(HighAboveUpperRange ? 1 : 0,lookBack)
occurrencesAboveSecondHalf = sum(HighAboveUpperRange ? 1 : 0,lookBack/2)
occurrencesAboveFirstHalf  = occurrencesAbovetotal - occurrencesAboveSecondHalf

occurrencesBelowTotal   = sum(LowBelowLowerRange ? 1 : 0,lookBack)
occurrencesBelowSecondHalf = sum(LowBelowLowerRange ? 1 : 0,lookBack/2)
occurrencesBelowFirstHalf  = occurrencesBelowTotal - occurrencesBelowSecondHalf

// STRATEGY 

triggerA = occurrencesAboveFirstHalf >= 1 ? true : false
triggerB = occurrencesAboveSecondHalf >= 1 ? true : false
triggerC = occurrencesBelowFirstHalf >= 1 ? true : false
triggerD = crossunder(low,lowerRange)

condition = triggerA and triggerB and triggerC and triggerD

// PAINTBrush

plotchar(condition)

更新

在第二个和第三个屏幕截图中,绘制了星星 (plotchar),但不在它们预期的位置(当 LOW 穿过下蓝线/下限范围(条件 4)时,它们是预期的)。

enter image description here

enter image description here

enter image description here

解决方法

在您的脚本中,用于确定范围的公式被混淆了,所以

upperRange = ((highestHigh - lowestLow)/range) + lowestLow
lowerRange = highestHigh - ((highestHigh - lowestLow)/range)

但应该是这样的

lowerRange = ((highestHigh - lowestLow)/range) + lowestLow
upperRange = highestHigh - ((highestHigh - lowestLow)/range)

在你的脚本中添加调试行,你会看到很多有用的信息

plot(lowerRange,color=color.red)
plot(upperRange,color=color.green)
plot(low,color=color.black)

我不确定,但在我看来 crossunder(low,lowerRange) 这不是您想要测试的条件。 祝你好运。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。