我的代码试图在 15 分钟图表上找出以下内容。
上述条件是长期的。 为了测试该策略,我编写了以下代码。
//@version=4
strategy(title="15minbreak")
CdlHigh=0.0
CdlLow=0.0
if(hour(time)==09 and minute(time) == 45)
CdlHigh := high
CdlLow := low
isInside = ((CdlHigh[1] < CdlHigh[0]) and (CdlLow[1] > CdlLow[0])) // 2nd cdl is inside bar
nextCdlBreak = CdlHigh > CdlHigh[0] // 3rd cdl has given a breakout.
goLong = (isInside and nextCdlBreak)
closeLong = (low < CdlLow[0])
strategy.entry("Long",strategy.long,100,when = goLong)
strategy.close("Long",when = closeLong)
但是当我运行代码时,我什么也没看到。 我不确定我在这里缺少什么。请求帮助。
答案 0 :(得分:0)
您将 9:45 蜡烛的最高价分配给 CdlHigh,然后在该变量上使用历史引用运算符 []
,该变量产生最后一个值为 0。尝试打开数据窗口并查看变量:
plotchar(CdlHigh,'cdlhigh','')
plotchar(CdlHigh[1],'cdlhigh','')
为了调试,我们可以先把时间变成一个变量并绘制它以查看它是否有效:
second_candle = hour(time)==09 and minute(time) == 45
plotshape(second_candle, style=shape.circle, color=color.black, size=size.small)
既然您已经确认它正确选择了蜡烛图,您可以通过添加到条件继续调试。根据我查过的定义,内柱意味着前一个柱具有更高的高点和更低的低点。您可以将条件合并为一个变量或使用单独的变量,如下所示:
//@version=4
strategy(title="15minbreak", overlay=true)
second_candle = hour(time)==09 and minute(time) == 45
inside_bar = high[1] > high and low[1] < low
special_candle = inside_bar and second_candle
plotshape(special_candle, style=shape.circle, color=color.black, size=size.small)
请注意,我添加了 overlay=true
以便更轻松地查看绘图形状。
有很多不同的方法可以构建条件。这是一个。请注意,[1]
表示最后一根柱线,[2]
表示两根柱线之前,[0]
不是必需的。例如,我定义了突破蜡烛图,然后将其与代表内部蜡烛图和 9:45 蜡烛图的变量结合使用,并与 [1]
一起使用以指示前一根蜡烛线的条件为真。
second_candle = hour(time)==09 and minute(time) == 45
inside_bar = high[1] > high and low[1] < low
candle_break = high > high[1]
special_candle = inside_bar[1] and second_candle[1] and candle_break
plotshape(special_candle, style=shape.circle, color=color.black, size=size.small)
这足以生成进入条件。判断退出条件的意图并不容易,因为您使用了用于存储第二根蜡烛最高点的变量的历史参考。如果是这样,您需要使用 var
关键字初始化一个变量,并在 second_candle 计算结果为 true 时存储该值,或者使用 valuewhen
函数。
var float exit_low = na
if second_candle
exit_low := low