0

我正在浏览 ATR 追踪止损指标的 pinescript 代码,并试图用 Python 对其进行编码。我在理解以下几行时遇到困难。

 Prev = H,barssince(close>H and close>close[1])
 TS = iff(cum(1)<16,close,iff( close > H and close>close[1],H,Prev))

值 H 为您提供最高值 (highest(high-Mult*atr(Atr),Hhv))。在下一行,barsince 函数在满足条件时给出柱/蜡烛的计数。

完整的陈述 H,barssince 意味着什么?我的意思是什么值将存储在 Prev 中。

还有什么 cum(1) 函数呢?

//@version=4
study("ATR Trailing Stoploss",overlay=true)
Atr = 3   // input(defval=5,title="Atr Period",minval=1,maxval=500)
Hhv= 10  // input(defval=10,title="HHV Period",minval=1,maxval=500)
Mult= 2.5 // input(defval=2.5,title="Multiplier",minval=0.1)
Barcolor=input(true,title="Barcolor")

H = highest(high-Mult*atr(Atr),Hhv)  
Prev = H,barssince(close>H and close>close[1])
TS = iff(cum(1)<16,close,iff( close > H and close>close[1],H,Prev))

Color=iff(close>TS,color.green,iff(close<TS,color.red,color.black))
barcolor(Barcolor? Color:na)

plot(TS,color=Color,linewidth=3,title="ATR Trailing Stoploss")

Buy=crossover(close,TS)
Sell=crossunder(close,TS)

plotshape(Buy,"BUY", shape.labelup, location.belowbar, color.green, 
text="BUY",textcolor=color.black)
plotshape(Sell,"SELL", shape.labeldown, location.abovebar, color.red, 
text="SELL",textcolor=color.black)

alertcondition(Buy, "Buy Signal", "Buy ATR Trailing Stoploss")
alertcondition(Sell, "Sell Signal", "Sell ATR Trailing Stoploss")
4

2 回答 2

1

通过使用逗号 (,) 作为分隔符,您可以在一行中放置多个语句。

所以,Prev = H,barssince(close>H and close>close[1])实际上是;

Prev = H
barssince(close>H and close>close[1])  // Return value is lost

我修改了脚本并删除了变量Prev,例如:

H = highest(high-Mult*atr(Atr),Hhv)  
TS = iff(cum(1)<16,close,iff( close > H and close>close[1],H,H))

您可以在底部的图表中看到结果。顶部的一个是原始脚本。如您所见,没有区别。

在此处输入图像描述

cum(1)是累计和。它将从 1 开始,并在每个柱的总和上加 1。因此,它将从 1 开始计算柱的数量,这与bar_index.

在此处输入图像描述

于 2021-12-14T17:28:22.530 回答
0

感谢@vitruvius 简化了逻辑并解释了 cum() 函数的工作原理。

如果我查看下面的代码.. TS 中的第二个表达式将始终评估为 H,而不管条件是真还是假。因此,我们可以简单地将其简化为 H.

x = iff( close > H and close>close[1],H,H) = H
TS = iff(cum(1)<16,close,H)
于 2021-12-15T11:47:02.217 回答