Динамический диапазон дат внутри соснового скрипта - PullRequest
0 голосов
/ 07 марта 2019

С сегодняшнего дня я не могу получить последние данные из Pine.Я определил функцию минус отметка времени UNIX от текущего времени.Но следующий код приводит к ошибке как "Timestamp requires integer parameter than series parameter"

getdate() =>
    tt = timenow - 1549238400
    yr = year(tt)
    mt = month(tt)
    dt = dayofmonth(tt)
    timestamp(yr[0], mt[0], dt[0], 0 ,0)

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 07 марта 2019

Кажется, что это непоследовательность сосны.Если точность не так важна, я предлагаю использовать самописную функцию для отметки времени:

//@version=3
study("Timestamp")
MILLISECONDS_IN_DAY = 86400000
TIMESTAMP_BEGIN_YEAR = 1970

myTimestamp(y, m, d) =>
    years = y - TIMESTAMP_BEGIN_YEAR
    years * MILLISECONDS_IN_DAY * 365.25 + (m - 1) * 30 * MILLISECONDS_IN_DAY + (d - 1) * MILLISECONDS_IN_DAY



// TEST:
tmspm = myTimestamp(2019, 3, 5)

y = year(tmspm)
m = month(tmspm)
d = dayofmonth(tmspm)

plot(y, color=green)
plot(m, color=red)
plot(d, color=maroon)

BTW, timenow возвращает значение в миллисекундах, тогда как вы пытаетесь вычесть его значением в секундах: 1549238400

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

UPD: ваш код не сработает, потому что вы вычитаете timenow на 1549238400, но 29 дней назад в миллисекундах это 2505600000. Надеюсь, следующий кодбудет полезно:

//@version=3
study("My Script")

_MILLISECONDS_IN_DAY = 86400000
_29_DAYS_MILLIS = 29 * _MILLISECONDS_IN_DAY

reqDate = timenow - _29_DAYS_MILLIS
reqYear = year(reqDate)
reqMonth = month(reqDate)
reqDay = dayofmonth(reqDate)

linePlotted = false
linePlotted := nz(linePlotted[1], false)

vertLine = na
col = color(red, 100)

//this puts a line exactlty 29 day ago or nothing if there wasn't a trading day at the date. If you want to put a line 29 days ago or closer, then:
// if year >= reqYear and month >= reqMonth and dayofmonth >= reqDay and not linePlotted
if year == reqYear and month == reqMonth and dayofmonth == reqDay and not linePlotted
    linePlotted := true
    vertLine := 1000
    col := color(red, 0)

plot(vertLine, style=histogram, color=col)

Обратите внимание, что от того, что вам нужно, зависит два возможных условия: поставить линию ровно 29 дней назад (или ничего, если в этот день не было баров), и строка должнапоставить на дату или ближе к сегодняшнему дню

...