Справочная серия по времени - какое значение имело Х дней назад? - PullRequest
0 голосов
/ 09 мая 2018

Чтобы сослаться на значение, хранящееся в серии, с помощью PineScript Tradingview, вы используете индексное целое число для вызова значения из серии.

//What's the UNIX time of the previous bar?

time[1]

//What's the UNIX time of the 21st bar (counting from current time)

time[20]

Моя цель состоит в том, чтобы отобразить ввод числа календарных дней в индексное целое число, чтобы вызвать значение ряда, чтобы оно возвращало значение этого ряда, x дней назад

Pseudo code:
SeriesIndexedByDays([series],[day,integer],[period]):

SeriesIndexedByDays(close,30):
Return close[30*Bars_per_day]
//Returns close value 30 days ago

Самое близкое, чего я смог достичь с помощью PineScript:

//Method 1:
days = input(title="Reference Point, # of Days", type=integer, defval=1, minval=0.01)
bars_per_day = 24*60/interval // 24 Hours per day * 60 Minutes per hour / [X (Minutes||Days||Weeks||Months||Years)] per bar
number_of_bars_reference_point = bars_per_day*days // Bars per day * Days
close[number_of_bars_reference_point]

Но это не идеально, потому что интервал PineScript является префиксом, кратным любому period , полоса: [10m, 5m, 5D] -> [10, 5, 5 ] Поэтому, если вы измените период с 5 минут на 5 дней, интервал все равно выдаст то же значение: 5

Вторая попытка, которую я предпринял, была:

//Method 2:
sec_per_day=24*60*60 // 24 hours per day * 60 minutes per hour * 60 seconds per minute = Seconds per day
t = time //Dump UNIX time into a variable
deltat=t-t[1] //Difference of UNIX time between this and previous bar, not necessarily the time of one bar (ex. session close, exchange's clock jumps due to offline or non continuous bars)
seconds_per_bar=lowest(deltat,2)/1000 // Use the lowest of the last two deltat values in case bar is the start of a session, divide by 1000convert from milliseconds to seconds
bars_per_day = sec_per_day/seconds_per_bar //Series, number of bars per day //Occationally this produces abberant values, assumption is that its because time dates 
retrospective_reference_point_number_of_bars=bars_per_day*days

Это создает retrospective_reference_point_number_of_bars как серию, которая правильно отображает [days, period] -> [bars]. Но когда привыкли называть другую серию

close[retrospective_reference_point_number_of_bars]

TradingView возвращает ошибку:

out of depth at index

Другие проблемы, связанные с методом 2, включают: если period меньше, чем ввод 'days', он вернет значение с десятичными числами / float, которое нельзя использовать для ссылки на серию.

Возможные методы
Если бы я мог преобразовать первое значение выходного ряда метода 2 в целое число, я мог бы использовать это.

Какие у вас есть идеи для решения отображения [период, интервал, дни] -> [бары]?

...