Tradingview 中超过 40 条证券信息

Over 40 securities message in Tradingview

我正在尝试优化此脚本以包含尽可能少的“安全”功能,但目前运气不佳...

在第 17 和 19 行 Symbol1_high_price1 = valuewhen(Symbol1_fractal_top1, high[2], 0)[2]“高”和“低”的数据(在第 19 行)应该来自安全输入对而不是当前打开的图,但是如果不使用另一个安全我就不能让它工作功能。这是一种可行的方法吗?有任何想法吗?请告诉我 谢谢!

Symbol1 = input(title="pair1", type=input.symbol, defval="eurusd")

K = input(14, title="K", minval=1)
D = input(3, title="D", minval=1)
smK = input(6, title="Smooth", minval=1)

Symbol1_Dinput1 = security(Symbol1, "", sma(stoch(close, high, low, K), smK))

f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0]
f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0]
f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0

Symbol1_fractal_top1 = f_fractalize(Symbol1_Dinput1) > 0 ? Symbol1_Dinput1[2] : na
Symbol1_fractal_bot1 = f_fractalize(Symbol1_Dinput1) < 0 ? Symbol1_Dinput1[2] : na

Symbol1_high_prev1  = valuewhen(Symbol1_fractal_top1, Symbol1_Dinput1[2], 0)[2]
Symbol1_high_price1 = valuewhen(Symbol1_fractal_top1, high[2], 0)[2]
Symbol1_low_prev1   = valuewhen(Symbol1_fractal_bot1, Symbol1_Dinput1[2], 0)[2]
Symbol1_low_price1  = valuewhen(Symbol1_fractal_bot1, low[2], 0)[2]

Symbol1_regular_bearish_div1 = Symbol1_fractal_top1  and high[2] > Symbol1_high_price1 and Symbol1_Dinput1[2] < Symbol1_high_prev1
Symbol1_regular_bullish_div1 = Symbol1_fractal_bot1  and low[2]  < Symbol1_low_price1  and Symbol1_Dinput1[2] > Symbol1_low_prev1

Symbol1_cond = Symbol1_regular_bullish_div1 ? Symbol1_regular_bullish_div1 : na

if Symbol1_cond
    label.new(bar_index, 0, color = color.green, style = label.style_cross, tooltip = Symbol1)```

所有计算都必须在 security() 调用的上下文中完成。这将所有逻辑放在一个函数中,该函数还负责调用 security(),这使得代码更清晰并且只需要一次调用:

//@version=4
study("")
Symbol1 = input(title="pair1", type=input.symbol, defval="eurusd")

K = input(14, title="K", minval=1)
D = input(3, title="D", minval=1)
smK = input(6, title="Smooth", minval=1)

f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0]
f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0]
f_fractalize(_src)=>
    // Pre-evaluate function calls so the functions execute on each bar.
    top = f_top_fractal(_src)
    bot = f_bot_fractal(_src)
    _return = top ? 1 : bot ? -1 : 0

f_getVals(_symbol) =>
    s = sma(stoch(close, high, low, K), smK)
    Symbol1_fractal_top1 = f_fractalize(s) > 0 ? s[2] : na
    Symbol1_fractal_bot1 = f_fractalize(s) < 0 ? s[2] : na
    
    Symbol1_high_prev1  = valuewhen(Symbol1_fractal_top1, s[2], 0)[2]
    Symbol1_high_price1 = valuewhen(Symbol1_fractal_top1, high[2], 0)[2]
    Symbol1_low_prev1   = valuewhen(Symbol1_fractal_bot1, s[2], 0)[2]
    Symbol1_low_price1  = valuewhen(Symbol1_fractal_bot1, low[2], 0)[2]
    
    Symbol1_regular_bearish_div1 = Symbol1_fractal_top1  and high[2] > Symbol1_high_price1 and s[2] < Symbol1_high_prev1
    Symbol1_regular_bullish_div1 = Symbol1_fractal_bot1  and low[2]  < Symbol1_low_price1  and s[2] > Symbol1_low_prev1
    
    Symbol1_cond = Symbol1_regular_bullish_div1 ? Symbol1_regular_bullish_div1 : na
    _return = security(_symbol, "", Symbol1_cond)

Symbol1_val = f_getVals(Symbol1)
if Symbol1_val
    label.new(bar_index, 0, color = color.green, style = label.style_cross, tooltip = Symbol1)
// Alternate debugging mark on chart.
plotchar(Symbol1_val, "Symbol1_val", "•", location.top, size = size.tiny)