PineScript Почему request.security() работает не так, как ожидается?

Я пытаюсь получить последние 5 баров с 1D, находясь на 5 (5 минут). Почему код работает на 1D, но не работает на более низких таймфреймах? Похоже, что [dh, dl] на младших ТФ содержит информацию только о текущем дневном баре.

[dh,dl] = request.security(syminfo.tickerid, "D", [high,low], lookahead=barmerge.lookahead_on)
if barstate.isrealtime
    log.info("==============")
    log.info(str.tostring( dh[0] ))
    log.info(str.tostring( dh[1] ))
    log.info(str.tostring( dh[2] ))
    log.info(str.tostring( dh[3] ))
    log.info(str.tostring( dh[4] ))

Если запустить этот код на 1D, то все работает как ожидается:

[2024-03-28T14:47:27.614+03:00]: 1.08278
[2024-03-28T14:47:27.614+03:00]: 1.0839
[2024-03-28T14:47:27.614+03:00]: 1.08643
[2024-03-28T14:47:27.614+03:00]: 1.08424
[2024-03-28T14:47:27.614+03:00]: 1.0868

Но если я запускаю его на 5 (5 минут), то получаю серию dh, которая заполнена значением HIGH текущего дня:

[2024-03-28T14:49:22.420+03:00]: 1.08278
[2024-03-28T14:49:22.420+03:00]: 1.08278
[2024-03-28T14:49:22.420+03:00]: 1.08278
[2024-03-28T14:49:22.420+03:00]: 1.08278
[2024-03-28T14:49:22.420+03:00]: 1.08278

Ответы (1 шт):

Автор решения: user5924772

Ответ службы поддержки TradingView:

Скрипты рассчитываются на всех доступных барах выбранного в данный момент символа и таймфрейма на графике, начиная с крайнего левого бара, и продолжают расчет на данных в реальном времени, пока они поступают. Если скрипт обращается к данным с другого таймфрейма или символа, данные будут получены по временным меткам текущих баров на графике. Учтите что оператор ссылающийся на историю - [] возвращает данные в контексте текущего графика и выбранного таймфрейма. https://www.tradingview.com/pine-script-docs/en/v5/language/Operators.html#history-referencing-operator Если вы хотите получить данные предыдущих свечей с выбранного таймфрейма, используйте исторический оператор напрямую с аргументом security(), например:

currDailyHigh = request.security(syminfo.tickerid, "D", high, lookahead = barmerge.lookahead_on)
prevDailyHigh = request.security(syminfo.tickerid, "D", high[1], lookahead = barmerge.lookahead_on)

Таким образом я решил свою проблему так:

[dh,dl] = request.security(syminfo.tickerid, "D", [high[0],low[0]], lookahead = barmerge.lookahead_off)
[dh1,dl1] = request.security(syminfo.tickerid, "D", [high[1],low[1]], lookahead = barmerge.lookahead_off)
[dh2,dl2] = request.security(syminfo.tickerid, "D", [high[2],low[2]], lookahead = barmerge.lookahead_off)
[dh3,dl3] = request.security(syminfo.tickerid, "D", [high[3],low[3]], lookahead = barmerge.lookahead_off)
[dh4,dl4] = request.security(syminfo.tickerid, "D", [high[4],low[4]], lookahead = barmerge.lookahead_off)
[dh5,dl5] = request.security(syminfo.tickerid, "D", [high[5],low[5]], lookahead = barmerge.lookahead_off)
→ Ссылка