Редактировать серию только в определенные даты - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть серия myLine, которую я заполняю значением na

myLine = 1==1 ? na : na // Series with na

Теперь я хочу создать функцию, которая обновляет серию myLine, чтобы она имела значение только на определенных барах (внутридневных).

isDate(y,m,d) => y==year and m==month and d==dayofmonth ? true:false // Is the date of the current bar equal to the date provided by the parameters?

setMyData(y,m,d,lineValue) =>
    if timeframe.isintraday and isDate(y,m,d)
        myLine := lineValue

setMyData(2020,03,31,1234)
setMyData(2020,04,01,2345)

Однако, похоже, это не работает, и я получаю эту ошибку

Cannot modify global variable 'myLine' in function.

Я также пытался использовать myLine[bar_index] := lineValue, но, похоже, это тоже не работает.

Кто-нибудь знает, как обновить значения ряда только для определенных точек данных?
Я пытаюсь строить горизонтальные линии только в определенные даты (в течение дня).

Я специально хочу использовать серию (вместо линейного объекта), потому что это позволяет мне менять цвет на вкладке стилей.

1 Ответ

1 голос
/ 06 апреля 2020

Pine не позволяет изменять глобальные переменные из локальной области функции. Эти два способа должны выполнить работу, причем № 2 является наиболее надежным, поскольку он не будет ограничен ограничениями компилятора на число вложенных if блоков в троичной переменной:

//@version=4
study("")

// ————— #1
isDate(y,m,d) => y==year and m==month and d==dayofmonth // Is the date of the current bar equal to the date provided by the parameters?

float myLine1 = na
myLine1 := 
  isDate(2020,03,31) ? 1234 :
  isDate(2020,04,01) ? 2345 : na

plot(myLine1, "myLine1", color.silver, 10, plot.style_circles, transp = 50)


// ————— #2
initOnDate(y,m,d, prev, init) => 
    if y==year and m==month and d==dayofmonth
        init
    else
        prev

float myLine2 = na
myLine2 := initOnDate(2020,03,31,myLine2,1234)
myLine2 := initOnDate(2020,04,01,myLine2,2345)

plot(myLine2, "myLine2", color.orange, 3, plot.style_circles)
...