Pine script 松树编辑退出下一蜡烛错误交易

Pine script 松树编辑退出下一蜡烛错误交易,pine-script,trading,algorithmic-trading,Pine Script,Trading,Algorithmic Trading,我正在TradingView的Pine编辑器中尝试一种DMI+RSI反转策略,但交易在下一条横线上继续进行,即使它不应该基于我的标准。有人知道是什么导致了这个问题吗?我还尝试改变了退出交易的标准(我将其从分别检查diplus是否高于或低于60或10,改为分别通过查看该值是否高于70或低于30来尝试查看RSI是否超买或超卖)。即使我将标准改为退出,它在进入交易后的下一支蜡烛上仍在退出 //@version=4 strategy("RSI-14, DI+, DI- Reversal Str

我正在TradingView的Pine编辑器中尝试一种DMI+RSI反转策略,但交易在下一条横线上继续进行,即使它不应该基于我的标准。有人知道是什么导致了这个问题吗?我还尝试改变了退出交易的标准(我将其从分别检查diplus是否高于或低于60或10,改为分别通过查看该值是否高于70或低于30来尝试查看RSI是否超买或超卖)。即使我将标准改为退出,它在进入交易后的下一支蜡烛上仍在退出

//@version=4
strategy("RSI-14, DI+, DI- Reversal Strategy", overlay=false)


/// DI+ DI- Code /// /// DI+ is the variable called "plus" and DI- is the variable called "minus"

///// INPUTS /////
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
//keylevel = input(23, title = "Key Level for ADX")
//adxLookbackEntry = input(3, title="Lookback Period for Slope (Entry)")
//adxLookbackExit = input(1, title="Lookback Period for Slope (Exit)")


[diplus, diminus, adx] = dmi(dilen, adxlen)

//buysignal = (adx[0] - adx[adxLookbackEntry] > 0) and adx > keyLevel and diplus > diminus
//shortsignal = (adx[0] - adx[adxLookbackEntry] > 0) and adx > keyLevel and diplus < diminus


//dirmov(len) =>
//  up = change(high)
//  down = -change(low)
//  plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
//  minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
//  truerange = rma(tr, len)
//  plus = fixnan(100 * rma(plusDM, len) / truerange)
//  minus = fixnan(100 * rma(minusDM, len) / truerange)
//  [plus, minus]
//adx(dilen, adxlen) =>
//  [plus, minus] = dirmov(dilen)
//  sum = plus + minus
//  adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
//sig = adx(dilen, adxlen)
//plot(sig, color=color.red, title="ADX")


///// RSI Code /////
rsi = rsi(close,14)
//rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsi_ob = rsi >= 70
rsi_os = rsi <= 30


///// MovAvg Code /////
sma5 = sma(close,5)
sma200 = sma(close,200)


////////// Strategy Entries and Exits ////////// 

//long the ticker//
minus_ob = diminus >= 60
plus_long_reversal = diplus[1] <= 10 and diplus[1] < diplus
minus_long_reversal = diminus[1] >= 60 and diminus[1] > diminus
exit_long_trade = diplus >= 60

//short the ticker//
plus_short_reversal = diplus[1] >= 60 and diplus[1] > diplus
minus_short_reversal = diminus[1] <= 10 and diminus[1] < diminus
exit_short_trade = diplus <= 10


isLongEntry = rsi_os and plus_long_reversal and minus_long_reversal
isLongExit = exit_short_trade
isShortEntry = rsi_ob and plus_short_reversal and minus_short_reversal// and close < open
isShortExit = exit_long_trade


t = time(timeframe.period, "0830-1500")
session_open = na(t) ? false : true

if (session_open)
    strategy.entry("Long", strategy.long, 100.0, when = isLongEntry)
    strategy.entry("Short", strategy.short, 100.0, when = isShortEntry)
    
    strategy.close("Long", when = isLongExit)
    strategy.close("Short", when = isShortExit)
//else
//    strategy.close_all()




rsi_graph_correction = 30
level_70 = 70-rsi_graph_correction
level_70rsi = rsi_graph_correction > level_70 ? rsi_graph_correction : level_70
level_30 = 30-rsi_graph_correction
level_30rsi = rsi_graph_correction < level_30 ? rsi_graph_correction: level_30

di_line_1 = hline(price=60,color=color.blue)
di_line_2 = hline(price = 10, color=color.yellow)

line_1 = hline(price=50-rsi_graph_correction)
line_2 = hline(price=70-rsi_graph_correction, color=color.red)
line_3 = hline(price=30-rsi_graph_correction,color=color.green)
p1 = plot(series = level_70, color=color.red, linewidth=1, transp=100)
p2 = plot(series = level_70rsi, color=color.red, linewidth=1, transp=100)
p3 = plot(series = level_30, color=color.green, linewidth=1, transp=100)
p4 = plot(series = level_30rsi, color=color.green, linewidth=1, transp=100)
p5 = plot(rsi-rsi_graph_correction,color=color.gray, transp=50)
p6 = plot(diplus,color=color.green)
p7 = plot(diminus,color=color.red)
//plotshape(isLongEntry, style=shape.arrowup, color=color.green, location=location.bottom)
plotshape(isLongEntry, style=shape.arrowup, color=color.green, location=location.bottom)
plotshape(isShortEntry, style=shape.arrowdown, color=color.red, location=location.top)


bgcolor(session_open ? color.green : na)

barcolor(isLongEntry ? color.blue : na)
barcolor(isLongExit ? color.purple : na)
barcolor(isShortEntry ? color.aqua : na)
barcolor(isShortExit ? color.yellow : na)
/@version=4
策略(“RSI-14,DI+,DI-反转策略”,叠加=假)
///DI+DI-Code/////DI+是名为“加”的变量,DI-是名为“减”的变量
/////投入/////
adxlen=输入(14,title=“ADX平滑”)
迪伦=输入(14,title=“DI长度”)
//keylevel=输入(23,title=“ADX的关键级别”)
//adxLookbackEntry=input(3,title=“坡度回望期(条目)”)
//adxLookbackExit=输入(1,title=“坡度的回望期(出口)”)
[diplus,diminus,adx]=dmi(dilen,adxlen)
//buysignal=(adx[0]-adx[adxLookbackEntry]>0)和adx>keyLevel和diplus>diminus
//短信号=(adx[0]-adx[adxLookbackEntry]>0)和adx>keyLevel和diplus
//上升=变化(高)
//向下=-变化(低)
//plusDM=na(向上)?na:(向上>向下和向上>0?向上:0)
//minusDM=na(向下)?na:(向下>上下>0?向下:0)
//truerange=rma(tr,len)
//plus=fixnan(100*rma(plusDM,len)/truerange)
//减=固定值(100*rma(最小值,最小值)/truerange)
//[加,减]
//adx(迪伦,阿德克斯伦)=>
//[加,减]=迪尔莫夫(迪伦)
//总和=正+负
//adx=100*rma(绝对绝对值(加减)/(总和=0?1:总和),adxlen)
//sig=adx(迪伦,阿德克斯伦)
//绘图(sig,color=color.red,title=“ADX”)
/////RSI码/////
rsi=rsi(收盘,14)
//rsi=下降==0?100:up==0?0:100-(100/(1+上/下))
rsi_ob=rsi>=70
rsi_os=rsi=60
加上长反转=迪普勒斯[1]=60和迪米努斯[1]>迪米努斯
退出长期交易=diplus>=60
//做空股票行情//
加短反转=双列[1]>=60和双列[1]>双列

减去\u short\u reversion=diminus[1]错误似乎出现在获取diplus和diminus值的内置DMI函数中。这里是另一篇文章的链接,我在这篇文章中用了几行不同的代码来处理这段代码(虽然是另一个问题,但它解决了这个问题)。最好手动创建DMI的值,而不是使用TradingView的内置DMI函数。以下是用户Bjorn Mistiaen发布的代码链接(他也对这篇文章发表了评论):

这不会在我试过的股票上产生任何信号。你用的是哪种股票代码?我在图表上用的是这个。它进入了4个行业。实际上,您今天回答了我的另一个问题,这个问题与同一个脚本有关(通过全局范围访问“加号”和“减号”变量),通过添加这些代码行,它解决了这个问题。我曾尝试使用TradingView提供的内置DMI函数,但它导致值出错。我正在粘贴到页面的链接,您在该页面上回答了与此脚本相关的其他问题,并消除了此问题