Pine script PineScript:passing';for loop";函数的索引不起作用

Pine script PineScript:passing';for loop";函数的索引不起作用,pine-script,Pine Script,为了检查security()功能,我编写了非常简单的代码: get_val( _idx ) => security( syminfo.tickerid, "30", low[ _idx ] ) if barstate.islast for i = 1 to 10 curr_val = get_val( i ) // curr_val = low[i] label2 = label.new( ba

为了检查security()功能,我编写了非常简单的代码:

get_val( _idx ) => 
    security( syminfo.tickerid, "30", low[ _idx ] ) 

if barstate.islast
    for i = 1 to 10 
        curr_val = get_val( i ) 
        // curr_val = low[i] 
        label2 = label.new( bar_index-i, low[i]-300, text = tostring( curr_val, "0" ), 
             style = label.style_label_center, color = color.green, size = size.small)
我希望它能在每支蜡烛上正确地打印“低”值, 但由于未知原因,它无法正确传递'i'的值 获取_val()函数

问题1。当“i”是“for循环”索引时,它有什么问题

问题2。我的目标是当我到达图表中的最后一根蜡烛时, 要获取特定股票代码的高/低/ohlc4值,在过去9个30分钟内, 在此基础上计算这9个时期的平均价格差异 --通过security()执行此操作的正确/有效/有效方法是什么,因为我希望在一个图表中计算多个不同的股票代码

我在和中阅读了信息,但仍然找不到有效的解决方案


提前谢谢你

您不能从循环内部使用
security()
。无论您需要在
security()
的HTF上下文中完成什么,都必须在发送给它的函数中完成。下面是几个例子

不确定
f_htf5()
是否符合您的想法,但它会给您一个想法。当发送到
security()
的函数返回元组时,处理重新绘制/不重新绘制更为棘手:

//@version=4
study("", "", true)
var string ON  = "On"
var string OFF = "Off"
bool i_repaint = input(OFF, "Repaint", options = [ON, OFF]) == ON

f_htf1(_src, _p) =>
    // #1 Avg of last `_p` values of `_src`
    float _return = sma(_src, _p)
    
f_htf2(_src, _p) =>
    // #2 Sum of last `_p` values of `_src`
    float _return = sum(_src, _p)
    
f_htf3(_src, _p) =>
    // #3 Last value is lower than all `_p` past values
    int _return = _src < lowest(_src, _p)[1] ? 1 : 0
    
f_htf4(_src, _p) =>
    // #4 Find the closest value to `_src` in `_p` past values
    float _delta = 10e15
    float _closestVal = na
    for _i = 1 to _p
        float _diff = abs(_src - _src[_i])
        if _diff < _delta
            _delta := _diff
            _closestVal := _src[_i]
    float _return = _closestVal

f_htf5(_p, _offset) =>
    // #4 Return the avg of past `_p` `high`, `low`, `ohlc4` values
    float _hi = sma(high, _p)
    float _lo = sma(low, _p)
    float _ohlc4 = sma(ohlc4, _p)
    [_hi[_offset], _lo[_offset], _ohlc4[_offset]]

// Function from: https://www.tradingview.com/script/00jFIl5w-security-revisited-PineCoders/
f_security(_sym, _res, _src, _rep) => security(_sym, _res, _src[not _rep and barstate.isrealtime ? 1 : 0])[_rep or barstate.isrealtime ? 0 : 1]

// For functions returning one value (f_htf1 - f_htf4), execute the function in `security()`'s HTF context.
htfValue = f_security(syminfo.tickerid, "30", f_htf3(low, 10), i_repaint)

// For functions returning a tuple.
int ofst1 = not i_repaint and barstate.isrealtime ? 1 : 0
int ofst2 = i_repaint or barstate.isrealtime ? 0 : 1
[hi01_, lo01_, ohlc01_] = security(syminfo.tickerid, "30", f_htf5(9, ofst1))
float hi01   = hi01_[ofst2]
float lo01   = lo01_[ofst2]
float ohlc01 = ohlc01_[ofst2]

plot(hi01, "hi01", color.fuchsia)
plot(lo01, "lo01", color.aqua)
plot(ohlc01, "ohlc01", color.green)
/@version=4
研究(“,”,真)
var string ON=“ON”
var string OFF=“OFF”
bool i_repaint=输入(关闭,“重新绘制”,选项=[打开,关闭]==打开
f_htf1(_src,_p)=>
//#1 `#src的最后`#p`值的平均值`
浮动返回=sma(_src,_p)
f_htf2(_src,_p)=>
//#2 `#src的最后`#p`值之和`
float _return=sum(_src,_p)
f_htf3(_src,_p)=>
//#3最后一个值低于所有`#p`过去的值
int _return=_src<最低(_src,_p)[1]?1 : 0
f_htf4(_src,_p)=>
//#4在`#p`过去的值中找到最接近`_src`的值
浮动_delta=10e15
浮动_closestVal=na
对于_i=1到_p
浮点数_diff=abs(_src-_src[_i])
如果_diff<_delta
_增量:=\u差异
_closestVal:=\u src[\u i]
float _return=_closestVal
f_htf5(_p,_offset)=>
//#4返回过去的“高”、“低”、“ohlc4”值的平均值
浮动高度=sma(高度,高度)
浮动低=sma(低,低)
浮点数_ohlc4=sma(ohlc4,_p)
[_hi[_offset]、_lo[_offset]、_ohlc4[_offset]]
//功能来自:https://www.tradingview.com/script/00jFIl5w-security-revisited-PineCoders/
f_security(_-sym,_-res,_-src,_-rep)=>security(_-sym,_-res,_-src[not _-rep和barstate.isrealtime?1:0])[_-rep或barstate.isrealtime?0:1]
//对于返回一个值的函数(f_htf1-f_htf4),请在`security()`的HTF上下文中执行该函数。
htfValue=f_安全性(syminfo.tickerid,“30”,f_htf3(低,10),i_重绘)
//对于返回元组的函数。
int ofst1=不重新绘制和barstate.isrealtime?1 : 0
int OFT2=i_repaint或barstate.isrealtime?0 : 1
[hi01,lo01,ohlc01]=安全性(syminfo.tickerid,“30”,f_htf5(9,Ofs1))
浮动hi01=hi01_U2]
浮动lo01=lo01_2]
浮动ohlc01=ohlc01_U2]
绘图(hi01,“hi01”,颜色:紫红色)
绘图(lo01,“lo01”,颜色为浅绿色)
绘图(ohlc01,“ohlc01”,颜色为绿色)

谢谢@PineCoders LucF,我需要一些时间坐下来研究它,我肯定更清楚如何使用f_security()!