You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何突破request.security()调用40次上限?

解决Pine Script中request.security()调用次数超限问题

问题描述

在Pine Script中使用request.security()时触发了40次调用上限,我仅需用这些数据给表格上色,尝试过自定义函数和元组的方式,但最终只能实现4行效果,现有代码如下:

// data(sym,timeframee,variablee) =>
//     ind=0.0
//     emaData=0.0
//     wmaData=0.0
//     hmaData=0.0
//     rmaData=0.0
//     sma_short_Data=0.0
//     sma_long_Data=0.0
//     if variablee==emaData
//         emaData  := request.security(sym, input_timeframe,ema_for_table)
//     if variablee==wmaData
//         wmaData := request.security(sym, input_timeframe,wma_for_table)
//     if variablee==hmaData
//         hmaData:=request.security(sym,input_timeframe,hma_for_table)
//     if variablee==rmaData
//         rmaData:=request.security(sym,input_timeframe,rma_for_table)
//     if variablee==sma_short_Data
//         sma_short_Data:=request.security(sym,input_timeframe,sma_short_term)
//     if variablee==sma_long_Data
//         sma_long_Data:=request.security(sym,input_timeframe,sma_long_term)


[sma_s_if,sma_l_if,e_if,h_if,r_if,w_if] = request.security(symbol1,input_timeframe,[sma_short_if,sma_long_if,ema_if,hma_if,rma_if,wma_if])
[sma_s2_if,sma_l2_if,e2_if,h2_if,r2_if,w2_if] = request.security(symbol2,input_timeframe,[sma_short_if,sma_long_if,ema_if,hma_if,rma_if,wma_if])
[sma_s3_if,sma_l3_if,e3_if,h3_if,r3_if,w3_if] = request.security(symbol3,input_timeframe,[sma_short_if,sma_long_if,ema_if,hma_if,rma_if,wma_if])
[sma_s4_if,sma_l4_if,e4_if,h4_if,r4_if,w4_if] = request.security(symbol4,input_timeframe,[sma_short_if,sma_long_if,ema_if,hma_if,rma_if,wma_if])
[sma_s5_if,sma_l5_if,e5_if,h5_if,r5_if,w5_if] = request.security(symbol5,input_timeframe,[sma_short_if,sma_long_if,ema_if,hma_if,rma_if,wma_if])
[sma_s6_if,sma_l6_if,e6_if,h6_if,r6_if,w6_if] = request.security(symbol6,input_timeframe,[sma_short_if,sma_long_if,ema_if,hma_if,rma_if,wma_if])

[sma_short_term1,sma_long_term1,ema_for_table_1,hma_for_table_1,rma_for_table_1,wma_for_table_1] = request.security(symbol1,input_timeframe,[sma_short_term,sma_long_term,ema_for_table,hma_for_table,rma_for_table,wma_for_table])
[sma_short_term2,sma_long_term2,ema_for_table_2,hma_for_table_2,rma_for_table_2,wma_for_table_2] = request.security(symbol2,input_timeframe,[sma_short_term,sma_long_term,ema_for_table,hma_for_table,rma_for_table,wma_for_table])
[sma_short_term3,sma_long_term3,ema_for_table_3,hma_for_table_3,rma_for_table_3,wma_for_table_3] = request.security(symbol3,input_timeframe,[sma_short_term,sma_long_term,ema_for_table,hma_for_table,rma_for_table,wma_for_table])
[sma_short_term4,sma_long_term4,ema_for_table_4,hma_for_table_4,rma_for_table_4,wma_for_table_4] = request.security(symbol4,input_timeframe,[sma_short_term,sma_long_term,ema_for_table,hma_for_table,rma_for_table,wma_for_table])
[sma_short_term5,sma_long_term5,ema_for_table_5,hma_for_table_5,rma_for_table_5,wma_for_table_5] = request.security(symbol5,input_timeframe,[sma_short_term,sma_long_term,ema_for_table,hma_for_table,rma_for_table,wma_for_table])
[sma_short_term6,sma_long_term6,ema_for_table_6,hma_for_table_6,rma_for_table_6,wma_for_table_6] = request.security(symbol6,input_timeframe,[sma_short_term,sma_long_term,ema_for_table,hma_for_table,rma_for_table,wma_for_table])

解决方案

  • 合并同标的请求:当前每个标的(symbol1~symbol6)都调用了2次request.security,可将两次请求合并为一次,在同一个调用中返回所有需要的指标,直接把单标的调用次数从2次降到1次,减少一半调用量。
    示例代码:

    // 封装单标的所有指标请求
    getSymbolData(sym, tf) =>
        [sma_short_if_val, sma_long_if_val, ema_if_val, hma_if_val, rma_if_val, wma_if_val,
         sma_short_term_val, sma_long_term_val, ema_for_table_val, hma_for_table_val, rma_for_table_val, wma_for_table_val] = request.security(sym, tf, [
             sma_short_if, sma_long_if, ema_if, hma_if, rma_if, wma_if,
             sma_short_term, sma_long_term, ema_for_table, hma_for_table, rma_for_table, wma_for_table
         ])
        [sma_short_if_val, sma_long_if_val, ema_if_val, hma_if_val, rma_if_val, wma_if_val,
         sma_short_term_val, sma_long_term_val, ema_for_table_val, hma_for_table_val, rma_for_table_val, wma_for_table_val]
    
    // 调用函数获取各标的数据
    [sma_s_if, sma_l_if, e_if, h_if, r_if, w_if, sma_short_term1, sma_long_term1, ema_for_table_1, hma_for_table_1, rma_for_table_1, wma_for_table_1] = getSymbolData(symbol1, input_timeframe)
    [sma_s2_if, sma_l2_if, e2_if, h2_if, r2_if, w2_if, sma_short_term2, sma_long_term2, ema_for_table_2, hma_for_table_2, rma_for_table_2, wma_for_table_2] = getSymbolData(symbol2, input_timeframe)
    // 依此类推处理symbol3~symbol6
    
  • 数组批量处理标的:如果标的数量较多,可将标的存入数组,通过循环批量调用request.security,优化代码结构的同时避免重复代码。
    示例代码:

    // 存储标的列表
    symbols = array.new_string([symbol1, symbol2, symbol3, symbol4, symbol5, symbol6])
    // 存储所有指标数据
    allData = array.new_matrix()
    
    // 循环获取每个标的数据
    for i = 0 to array.size(symbols) - 1
        sym = array.get(symbols, i)
        data = request.security(sym, input_timeframe, [
             sma_short_if, sma_long_if, ema_if, hma_if, rma_if, wma_if,
             sma_short_term, sma_long_term, ema_for_table, hma_for_table, rma_for_table, wma_for_table
         ])
        array.push(allData, data)
    
    // 按需提取数据,比如取第一个标的的sma_short_if值
    sma_s_if = array.get(array.get(allData, 0), 0)
    
  • 移除非必要指标:如果部分指标在表格上色逻辑中用不到,直接删除对应的请求项,减少单次调用返回的指标数量,降低整体调用压力。

通过以上优化,可大幅减少request.security的调用次数,突破40次限制,实现更多行的表格上色需求。

内容的提问来源于stack exchange,提问作者omersabriklc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:51:13