繁体   English   中英

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

[英]Condition is (supposedly) met but expected action (plotchar) doesn't happen

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

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

请检查屏幕截图。

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

(1) 前半段,高位至少有一次处于上方区间。
(2) 上半年,低位至少有一次处于较低区间。
(3) 后半段,高位至少有一次处于上方区间。
(4) 后半段,低位交叉-低于区间线。

除非我遗漏了什么,否则屏幕截图中满足所有这四个条件,因此它应该在蜡烛|4| 中绘制。 (当 LOW CROSSES-UNDER LOW RANGE LINE 时),但没有绘制任何内容。

任何帮助将不胜感激!

下面是代码的相关部分,但如果您想检查和/或重用, 所有代码都在这里

lookBack = input(title="Lookback", type=input.integer, defval=24, minval=2)
range = input(title="Upper & Lower Range", type=input.integer, 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)时,它们是预期的。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

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

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)这不是您想要测试的条件。 祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM