Требуется количество баров (торговых дней) между двумя датами в Pinescript

У меня есть требование рассчитать количество торговых дней между сегодняшним днем ​​и предыдущей датой. Этот счет исключает все праздники.

Я выполнил расчет с использованием приведенного ниже скрипта, но результат верен только для последнего бара, так как для предыдущих столбцов столбцы уменьшаются.

Мое требование состоит в том, чтобы разница между сегодняшней и предыдущей датой определялась как постоянная, которая будет работать от 1-го бара до последнего бара.

Текущий выход: День 1: 1 бар, День 2: 2 бара, День 3: 3 бара,

Требуемый вывод: (123 - разница между сегодняшним днем ​​и предыдущей датой) День 1: 123 бара, День 2: 123 бара, День 3: 123 бара,

      i_fromYear = input.int(2021, 'From Year', minval=1900)
i_fromMonth = input.int(5, 'From Month', minval=1, maxval=12)
i_fromDay = input.int(18, 'From Day', minval=1, maxval=31)
fromDate = timestamp(i_fromYear, i_fromMonth, i_fromDay, 00, 00)
isGreen = close > open
gCount = ta.cum(time > fromDate and isGreen ? 1 : 0)
rCount = ta.cum(time > fromDate and not isGreen ? 1 : 0)
total = gCount + rCount

2 ответа

ashxos, я добавил для вас временную метку и функцию для получения bar_index за заданное время. Мы передаем наши 2 даты в функции и вычитаем результаты.

      //@version=5
indicator("My Script")

startTime = input.time(timestamp("01 Nov 2021 00:00"), "Start Time")      
endTime   = input.time(timestamp("15 Nov 2021 00:00"), "End Time")        

_barForTime(_t) =>
    var int _bar = na
    if time_close[1] <= _t and time >= _t
        _bar := bar_index
    _bar
    
firstTime   = _barForTime(startTime)
secondTime  = _barForTime(endTime)

barDelta    = secondTime - firstTime

Удачи и удачи в трейдинге и кодировании

Это было бы решением

      bars_count(start, end)=>
    diff_unix_min = (end - start) / (1000 * 60)
    p = str.tonumber(timeframe.period)
    if timeframe.isdwm
        if timeframe.isdaily
            p := timeframe.multiplier * 60 * 24
        if timeframe.isweekly
            p := timeframe.multiplier * 60 * 24 * 7
        if timeframe.ismonthly
            p := timeframe.multiplier * 60 * 24 * 7 * 4
            
    math.floor(math.max(diff_unix_min / p, 1))
Другие вопросы по тегам