Индикатор средней на разных TF(15/60/D) одной длины
То есть у нас есть 15-минутный график и на нем отображаем среднюю с периодом 200 на 15 минутках, период 200 на часах и период 200 на днях, все на одном графике.
Кстати, если построить на 15 минутке среднюю 200, то она почти будет совпадать со средней 50 на часах того же графика
Индикатор позволяет сократить количество окон с разными таймфреймами
--[[
средние на разных TF(15/60/D) одной длины
--]]
Settings=
{
Name = "SMA_mult_template_v1", -- indicator name
ln=200, -- period
line=
{
{
Name = "SMA_TEMPL",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0,255)
},
{
Name = "cur3",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0,255)
},
{
Name = "cur4",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0,255)
}
}
}
function Init()
return 3
end
function OnCalculate(index)
ln = Settings.ln
if index == 1 then
hour = {}
day = {}
sum = {}
sma = {}
n = {}
sumh = {}
smah = {}
nh = {}
nhi = {}
sumd = {}
smad = {}
nd = {}
ndi = {}
sum[index] = O(index)
n[index]=1
sumh[index] = O(index)
nh[index]=1
nhi[index]=1
sumd[index] = O(index)
nd[index]=1
ndi[index]=1
hour[index] = T(index).hour
day[index] = T(index).day
else
if index > ln then
sum[index] = sum[index-1] + O(index)
sum[index] = sum[index] - O(index-ln)
n[index] = n[index-1]
else
sum[index] = sum[index-1] + O(index)
n[index] = n[index-1] + 1
end
if hour[index-1] ~= T(index).hour then
nh[index] = nh[index-1] + 1
nhi[nh[index]] = index
if nh[index] > ln then
sumh[index] = sumh[index-1] + O(index)-O(nhi[nh[index]-ln])
smah[index] = sumh[index]/ln
else
sumh[index] = sumh[index-1] + O(index)
smah[index] = nil
end
else
nh[index] = nh[index-1]
sumh[index] = sumh[index-1]
smah[index] = nil
end
if day[index-1] ~= T(index).day then
nd[index] = nd[index-1] + 1
ndi[nd[index]] = index
if nd[index] > ln then
sumd[index] = sumd[index-1] + O(index)-O(ndi[nd[index]-ln])
smad[index] = sumd[index]/ln
else
sumd[index] = sumd[index-1] + O(index)
smad[index] = nil
end
else
nd[index] = nd[index-1]
sumd[index] = sumd[index-1]
smad[index] = nil
end
hour[index] = T(index).hour
day[index] = T(index).day
end
if n[index] ~= 0 then
sma[index] = sum[index]/n[index]
end
return sma[index], smah[index], smad[index]
end
ЕМА50 на н4 = ЕМА200 на н1 = ЕМА 800 на м15 ну и т.д.