Pine tradingview: 一次,如果直到新事件

Posted

技术标签:

【中文标题】Pine tradingview: 一次,如果直到新事件【英文标题】:Pine tradingview: one time if until new event 【发布时间】:2020-06-01 05:56:48 【问题描述】:

我在复制其他公共脚本的基础上“制作”了我的第一个 Tradingview 脚本。我可以弄清楚大部分,除了最后一部分。我想知道是否可以添加一次 if 语句,直到发生其他特定事件。

在下面的打印屏幕中,我有一个示例。在我的脚本中,我有一条彩色趋势线和蜡烛。我想在趋势线为红色且蜡烛为黑色(第一个绿色圆圈)时做空。但是系列图再次条形颜色从白色变为黑色(红色圆圈)。我只想在第一次添加警报(绿色圆圈),直到发生新事件;当趋势线改变颜色时(紫色圆圈)。

Chart example

BBperiod          = input(defval = 19,     title = "BB Period",    type = input.integer, minval       = 1)
BBdeviations      = input(defval = 1.00,     title = "BB Deviations",    type = input.float, minval = 0.1, step=0.05)
UseATRfilter      = input(defval = true, title = "ATR Filter",  type = input.bool)
ATRperiod         = input(defval = 7,     title = "ATR Period",    type = input.integer, minval = 1)

BBUpper=sma (close,BBperiod)+stdev(close, BBperiod)*BBdeviations
BBLower=sma (close,BBperiod)-stdev(close, BBperiod)*BBdeviations
//
TrendLine = 0.0
iTrend = 0.0
buy = 0.0
sell = 0.0
//
BBSignal = close>BBUpper? 1 : close<BBLower? -1 : 0
// 
if BBSignal == 1 and UseATRfilter == 1
TrendLine:=low-atr(ATRperiod)
if TrendLine<TrendLine[1] 
    TrendLine:=TrendLine[1]
if BBSignal == -1 and UseATRfilter == 1
TrendLine:=high+atr(ATRperiod)
if TrendLine>TrendLine[1]
    TrendLine:=TrendLine[1]
if BBSignal == 0 and UseATRfilter == 1
TrendLine:=TrendLine[1]
//
if BBSignal == 1 and UseATRfilter == 0
TrendLine:=low
if TrendLine<TrendLine[1] 
    TrendLine:=TrendLine[1]
if BBSignal == -1 and UseATRfilter == 0
TrendLine:=high
if TrendLine>TrendLine[1]
    TrendLine:=TrendLine[1]
if BBSignal == 0 and UseATRfilter == 0
TrendLine:=TrendLine[1]
//
iTrend:=iTrend[1]
if TrendLine>TrendLine[1] 
iTrend:=1
if TrendLine<TrendLine[1] 
iTrend:=-1
//
buy:=iTrend[1]==-1 and iTrend==1 ? 1 : na
sell:=iTrend[1]==1 and iTrend==-1? 1 : na
//
plot(TrendLine, color=iTrend > 0?color.blue:color.red         ,style=plot.style_line,linewidth=2,transp=0,title="Trend Line") 


//BarcolorT1
length = input(title="Length", type=input.integer, defval=50)
src_=input(close, title="Source", type=input.source)
mult=input(6.0, title="Mult")
barc=input(true, title="Use barcolor?")
plots=input(false, title="Show plots?")


r(src, n)=>
s = 0.0
for i = 0 to n-1
    s := s + ((n-(i*2+1))/2)*src[i]
x=s/(n*(n+1))
x

l=sma(low, length)
h=sma(high, length)
lr= l+mult*r(low, length)
hr= h+mult*r(high, length)

trend=0
trend:=src_ > lr and src_ > hr ? 1 : src_ < lr and src_ < hr ? -1 : trend[1]

long=0
short=0
long:= trend==1 and src_>h ? 1 : trend==-1 ? -1 : long[1]
short:= trend==-1 and src_<l ? 1 : trend==1 ? -1 : short[1]

barcolor(barc? (long>0? color.green : short>0? color.black : trend>0? color.white: trend<0 ?     color.white : color.blue) : na)

//plot shape
data = short!=short[1] and short==1 and iTrend < 0
plotshape(data, style=shape.xcross)

【问题讨论】:

【参考方案1】:

您可以通过额外的标志来实现您的目标,该标志将在所需事件时激活和停用。代码如下:

var active = false

// Activation
active := active or data

// Deactivation
if nz(iTrend[1]) <= 0 and iTrend > 0
    active := false

activated = not nz(active[1], false) and active

plotshape(activated, style=shape.triangledown, color=color.red, size=size.small, location=location.belowbar)

将其添加到脚本的末尾,当趋势线为红色且条形颜色首次从白色变为黑色时,它将显示红色三角形。

【讨论】:

以上是关于Pine tradingview: 一次,如果直到新事件的主要内容,如果未能解决你的问题,请参考以下文章

TradingView Pine 脚本:在新入场前检查以前的策略。入场价格

Tradingview Pine脚本-如何使自定义音量指示器的行为类似于内置的Vol

pine script 5语言学习课程前言

如何正确计算 Fisher 变换指标

从 tradingview 调用 rest api

在特定日期绘制额外线