Как рассчитывается индикатор Динамика в скринере?
Значение индикатора Динамика в скринере считается по формуле, которая в общем виде выглядит так:
Динамика = (currentClose - openDaysAgo) * 100 / abs(openDaysAgo)
где:
currentClose - это цена закрытия последнего дневного бара
openDaysAgo - это цена открытия соответствующего бара в прошлом, в зависимости от выбранного интервала (1 неделя, 3 месяца, 365 дней)
Пример
То есть, например, сегодня вторник. Чтобы посчитать Динамику.1Н, нужно:
- вычесть из цены закрытия сегодняшнего дневного бара цену открытия дневного бара за прошлый вторник;
- умножить разницу на 100;
- разделить на цену открытия дневного бара за прошлый вторник, взятую по модулю.
Ниже приведена подробная формула расчета индикатора по самым популярным резолюциям, учитывающая все нюансы, например, количество дней в високосном году.
//@version=6
indicator("Screener Performance")
// first bar's timestamp in pine history
var first_bar_time = time / 1000
// Performance helper functions
rateOfreturn(ref) =>
if ref < 0 and close > 0
na
else
(close - ref) * 100 / math.abs(ref)
rr(bb, maxbarsback) =>
nz(open[maxbarsback] * 0) + bb == 0 ? na : rateOfreturn(open[bb])
perfYTD() =>
if year != year(timenow)
na
else
var lastYearOpen = open
if year > year[1]
lastYearOpen := open
rateOfreturn(lastYearOpen)
fastSearchTimeIndex(x, maxbarsback) =>
mid = 0 * time[maxbarsback]
right = math.min(bar_index, maxbarsback)
left = 0
if x/1000 <= first_bar_time
bar_index
else if time < x
0
else
for i = 0 to 10
mid := math.ceil((left + right) / 2)
if left == right
break
else if time[mid] < x
right := mid
continue
else if time[mid] > x
left := mid
continue
else
break
mid
week1 = 7
week_ago = timenow - 1000 * 60 * 60 * 24 * week1
week_ago_this_bar = time - 1000 * 60 * 60 * 24 * week1
countOfBarsWeekAgo = fastSearchTimeIndex(week_ago, week1)
month1 = 30
month_ago = timenow - 1000 * 60 * 60 * 24 * month1
countOfBars1MonthAgo = fastSearchTimeIndex(month_ago, month1)
month3 = 90
months3_ago = timenow - 1000 * 60 * 60 * 24 * month3
countOfBars3MonthAgo = fastSearchTimeIndex(months3_ago, month3)
month6 = 180
months6_ago = timenow - 1000 * 60 * 60 * 24 * month6
countOfBars6MonthAgo = fastSearchTimeIndex(months6_ago, month6)
years1 = 365
oneYearAgo = timenow - 1000 * 60 * 60 * 24 * years1
barsCountOneYear = fastSearchTimeIndex(oneYearAgo, years1)
years3 = 365 * 3
years3_ago = timenow - 1000 * 60 * 60 * 24 * years3
countOfBars3YearAgo = fastSearchTimeIndex(years3_ago, years3)
years5 = 365 * 4 + 366
years5_ago = timenow - 1000 * 60 * 60 * 24 * years5
countOfBars5YearAgo = fastSearchTimeIndex(years5_ago, years5)
years10 = (365 * 4 + 366) * 2
years10_ago = timenow - 1000 * 60 * 60 * 24 * years10
countOfBars10YearAgo = fastSearchTimeIndex(years10_ago, years10)
// Perf.<W | 1M | 3M | 6M | Y | 5Y | 10Y | YTD>
fiveDays = 5
fiveDaysAgo = timenow - 1000 * 60 * 60 * 24 * fiveDays
countOfBarsFiveDaysAgo = fastSearchTimeIndex(fiveDaysAgo, fiveDays)
perfYTD = perfYTD()
plot(rr(countOfBarsFiveDaysAgo, fiveDays), title='Perf.5D')
plot(rr(countOfBarsWeekAgo, week1), title='Perf.W')
plot(rr(countOfBars1MonthAgo, month1), title='Perf.1M')
plot(rr(countOfBars3MonthAgo, month3), title='Perf.3M')
plot(rr(countOfBars6MonthAgo, month6), title='Perf.6M')
plot(rr(barsCountOneYear, years1), title='Perf.Y')
plot(rr(countOfBars3YearAgo, years3), title='Perf.3Y')
plot(rr(countOfBars5YearAgo, years5), title='Perf.5Y')
plot(rr(countOfBars10YearAgo, years10), title='Perf.10Y')
plot(perfYTD, title='Perf.YTD')
Примечание: значения этого скрипта будут отличаться в истории и в реальном времени из-за функции timenow. Подробнее см. в документации.Для наглядности вы можете добавить этот скрипт на график через Pine Editor, используя дневную временную резолюцию. На графике появится индикатор, линии которого будут показывать значения для каждого типа расчёта.
Изменение (%) vs Динамика (%):
Предположим сегодня вторник.
Недельное изменение — это разница между текущей ценой закрытия (во вторник) и ценой закрытия прошлой недели (пятница).
Недельная динамика — это разница между текущей ценой закрытия (во вторник) и ценой открытия ровно неделю назад (прошлый вторник).