首页 > 解决方案 > 你知道如何修复安全功能的参数应该没有副作用吗?

问题描述

此脚本是一个筛选器,用于识别打破上回归线或下回归线的资产

我一直试图让筛选器工作几天,但没有成功。

问题是我们不能将“line.new”放在安全中

每次我尝试解决方案时都会出错。

这是主要错误: 安全函数的“表达式”参数应该没有副作用。谢谢

//@version=4
study("Screener and RegLine", shorttitle="Screener & RL", overlay = true)
resolution = input(title="Screener Resolution", type=input.resolution, defval="15")

// Symbol
t1  = input(title= "Ticker 1",   type=input.symbol, defval="BINANCE:BTCUSDTPERP")
t2  = input(title= "Ticker 2",   type=input.symbol, defval="BINANCE:ETHUSDTPERP")
t3  = input(title= "Ticker 3",   type=input.symbol, defval="BINANCE:BCHUSDTPERP")
t4  = input(title= "Ticker 4",   type=input.symbol, defval="BINANCE:XRPUSDTPERP")
t5  = input(title= "Ticker 5",   type=input.symbol, defval="BINANCE:EOSUSDTPERP")




// Regression Line
min  = input(14,minval=4)
max  = input(28)
mult = input(2)
src  = input(close)
cmla = cum(src)
cmlb = cum(cmla[1])
cmlc = cum(src*src)
r(p)=>
    sum = cmlb - cmlb[p]
    a = (p*cmla-sum)
    b = cmla - cmla[p]
    c = cmlc - cmlc[p]
    //----
    num = (a - b*(p+1)/2)/p
    vary = c/p - pow(b/p,2)
    varx = (p*p - 1)/12
    pow(num/sqrt(vary*varx),2)

screenerFunc() =>
    k = 0.,p = 0
    r(p)
    for i = min to max
        c = r(i)
        k := max(c,k)
        p := k == c ? i : p
    den = p*(p+1)/2
    wma = (p*cmla-(cmlb - cmlb[p]))/den
    sma = (cmla - cmla[p])/p
    A = 4*sma-3*wma, B= 3*wma-2*sma

    Var = (cmlc - cmlc[p])/p - pow((cmla - cmla[p])/p,2)
    rmse = sqrt(Var - r(p)*Var)*mult
    n = bar_index
    var line ln = na
    var line up = na
    var line dn = na,
    var label la = na
    transparent = color.new(color.white, 100)
    if n > min
        up := line.new(n[p]+1,A+rmse,n,B+rmse,extend=extend.right, color=#ffffff,width=2)
        dn := line.new(n[p]+1,A-rmse,n,B-rmse,extend=extend.right, color=#ffffff,width=2)
        la := label.new(n[p]+1,A-rmse,tostring(p),color=transparent, style=label.style_label_up,textcolor=color.gray)
    line.delete(ln[1]),line.delete(up[1]),line.delete(dn[1])
    label.delete(la[1])

    isTrueTop = 0 
    if barstate.islast 
        if high > line.get_price(up, bar_index) 
            isTrueTop := 1 
     

    isTrueBot = 0 
    if barstate.islast 
        if low < line.get_price(dn, bar_index) 
            isTrueBot := 1 
     

    long = isTrueTop
    short = isTrueBot
    R_bull =long
    R_bear = short
    [R_bull,R_bear] 


[R_bull, R_bear] = screenerFunc()

// Security
[R_bull1,R_bear1]   = security(t1,   resolution, screenerFunc())
[R_bull2,R_bear2]   = security(t2,   resolution, screenerFunc())
[R_bull3,R_bear3]   = security(t2,   resolution, screenerFunc())
[R_bull4,R_bear4]   = security(t4,   resolution, screenerFunc())
[R_bull5,R_bear5]   = security(t5,   resolution, screenerFunc())

标签: tradingview-api

解决方案


推荐阅读