Тема: Индикатор экстремум
Индикатор определяет локальные макс/мин цены на графике.
При добавлении индикатора снимаем галку
[+]Код индикатора extr.lua
--C:/QUIK/LuaIndicators/extr.lua
dofile(getWorkingFolder() .. "\\LuaIndicators\\Include\\myExtr.lua")
Settings = {}
Settings.Name = "*extr"
Settings.nDepth = 3000 --[[для определения стартового бара, если 0, то все]]
Settings.nMinHL = 0.0 --[[расстояние, кот. должна пройти цена, для определения H/L]]
Settings.line =
{
{
Name = "TRIANGLE_UP",
Type = TYPE_TRIANGLE_UP,
Color = RGB(255, 0, 0),
Width = 4
},
{
Name = "TRIANGLE_DOWN",
Type = TYPE_TRIANGLE_DOWN,
Color = RGB(0, 255, 0),
Width = 4
}
}
function Init()
extr = myExtr()
return 2
end
local oi, min_hl
function OnCalculate(index)
if index == 1 then
min_hl = tonumber(Settings.nMinHL)
if min_hl and min_hl <= 0 then min_hl = nil end
if not min_hl then return message("Индикатору extr\nнужен параметр nMinHL > 0",3) end
local s = Size() - Settings.nDepth
oi = (s < 1 or Settings.nDepth == 0) and 1 or s
extr(oi, min_hl, index)
end
--[[считает только что закрывшийся бар, в текущем активном не считает]]
if not min_hl or index <= oi then return end
extr(oi, min_hl, index)
oi = index
end
[+]Код модуля myExtr.lua
--C:/QUIK/LuaIndicators/Include/myExtr.lua
function myExtr()
local HH, LL, mH, mL, imH, imL
local function SetL(oH, oL, oi, min_hl)
if oH > mH then
mH, imH = oH, oi
if not LL then
if oH - mL >= min_hl then
LL = mL
SetValue(imL, 1, LL)
mL, imL = oL, oi
HH = nil
end
else
mL, imL = oL, oi
end
if HH and oH >= HH then HH = nil end
end
end
local function SetH(oH, oL, oi, min_hl)
if oL < mL then
mL, imL = oL, oi
if not HH then
if mH - oL >= min_hl then
HH = mH
SetValue(imH, 2, HH)
mH, imH = oH, oi
LL = nil
end
else
mH, imH = oH, oi
end
if LL and oL <= LL then LL = nil end
end
end
return function (oi, min_hl, i)
if i <= oi then
mH, mL = H(oi), L(oi)
imH, imL = oi, oi
HH, LL = nil, nil
return
end
local oH, oL = H(oi), L(oi)
if imL < imH then
SetL(oH, oL, oi, min_hl)
SetH(oH, oL, oi, min_hl)
else
SetH(oH, oL, oi, min_hl)
SetL(oH, oL, oi, min_hl)
end
end
end