如何从盘中时间范围获取前“n”天的最高点和最低点?

问题描述 投票:0回答:1

我是 Pine 脚本新手。

我想在较低的日内时间范围内获取前 'n' 个“D”天(例如用户输入的最后 3 天)的高/低/日期 (DD/MM/YYYY)。这样我就可以在日内图表上打印过去三天的高点和低点。

我知道下面的代码不起作用,我明白为什么 - 我无法将可变变量传递到 request.security 中。但是,我想不出一种方法可以在当天的日内图表上并从前一天开始向后“n”天,使用循环来处理根据用户输入的可变数量的回溯天数。我不知道如何将计算出的系列下标值传递到request.security中?任何有关如何实现这一目标的建议将不胜感激。

type CandleRange
    float high
    float low
    int time

CandleRange[] candles = array.new<CandleRange>()

timeframe = input.timeframe("D","Timeframe")
lookbackDays = input.int(3,"Number of Days")

getDailyHighLow(timeframe,index=1)=>
    float dailyHigh = request.security(syminfo.tickerid,timeframe,high[index])
    float dailyLow = request.security(syminfo.tickerid,timeframe,low[index])
    int  dailyTime = request.security(syminfo.tickerid,timeframe,time[index])
    [dailyHigh, dailyLow,dailyTime]

if barstate.islastconfirmedhistory
    for i = 1 to lookbackDays by 1
    // using i gives...
    // Cannot use loop variables or mutable variables from a loop's local scope as `expression` arguments in `request.*()` calls.
    [ dailyHigh, dailyLow, dailyTime] = getDailyHighLow(timeframe,i) 
    CandleRange cr = CandleRange.new(dailyHigh, dailyLow, dailyTime)
    candles.push(cr)
pine-script pine-script-v5
1个回答
0
投票

不需要

for
循环。由于这是日内时间范围,因此当新柱形形成时,请自行跟踪每日高点/低点。然后,每当新的一天到来时,将每日最高/最低价推送到数组中。您可以从此数组中检索最后 n 个值以便稍后使用。

//@version=5
indicator("My script", overlay=true)

timeframe = input.timeframe("D","Timeframe")
lookbackDays = input.int(3,"Number of Days")

is_new_day = timeframe.change("D")

var daily_high_arr = array.new_float()
var daily_low_arr = array.new_float()
var daily_high = high
var daily_low = low

if (is_new_day)
    // Push last day high/low to the array
    array.push(daily_high_arr, daily_high)
    array.push(daily_low_arr, daily_low)

    // Reset variables for the new day
    daily_high := high
    daily_low := low
else
    if (high > daily_high)
        daily_high := high

    if (low < daily_low)
        daily_low := low
© www.soinside.com 2019 - 2024. All rights reserved.