Мот быть кто-то уже писал индикатор внутреннего бара для квика, или какой-нибудь подобный. Может ли кто написать простой индикатор insidebar, чтобы он изменял цвет или он отмечался точкой или другим знаком?
function Cached.Structure()
local I1 = 0
local Structura = 0
return function(I, FS, ds)
I = I or 1
ds = ds or nil
FS = FS or {}
local p = FS.persent or 4 -- %
local wid = FS.wid or 0
local o0 = Value(I, 'O', ds) or 0
local c0 = Value(I, 'C', ds) or o0
local h0 = Value(I, 'H', ds) or c0
local l0 = Value(I, 'L', ds) or c0
if I == 1 then
I1 = 0
Structura = 0
end
local flag = h0 and l0 and c0 and o0 or false
local o1 = I > 1 and Value(I-1, 'O', ds) or o0
local c1 = I > 1 and Value(I-1, 'C', ds) or c0
local h1 = I > 1 and Value(I-1, 'H', ds) or h0
local l1 = I > 1 and Value(I-1, 'L', ds) or l0
local flag1 = I > 1 and flag and h1 and l1 or false
local h2 = I > 2 and Value(I-2, 'H', ds) or h1
local l2 = I > 2 and Value(I-2, 'L', ds) or l1
local flag2 = I > 2 and h2 and l2 and flag1 and flag or false
local newbar = I > I1
-- Определение типов баров
local up_bar1 = flag2 and h1 > h2 and l1 >= l2 or false
local down_bar1 = flag2 and l1 < l2 and h1 <= h2 or false
local inbar1 = flag2 and h1 <= h2 and l1 >= l2 or false
local outbar1 = flag2 and h1 > h2 and l1 < l2 or false
local outbar_up1 = outbar1 and c1 > o1 or false
local outbar_down1 = outbar1 and c1 <= o1 or false
local outbar0 = flag1 and h0 > h1 and l0 < l1 or false
local outbar_up0 = outbar0 and c0 > o0 or false
local outbar_down0 = outbar0 and c0 < o0 or false
local up_bar0 = flag1 and h0 > h1 and l0 >= l1 or false
local down_bar0 = flag1 and l0 < l1 and h0 <= h1 or false
local inbar0 = flag1 and h0 < h1 and l0 > l1 or false
local event = newbar and (outbar0 or up_bar0 or down_bar0) or false
local struc = (outbar_up0 or up_bar0) and 1 or (outbar_down0 or down_bar0) and -1 or 0
local structura = Structura
Structura = (newbar or event) and Structura + struc or structura
I1 = I
if wid == 0 then
return Structura
end
return struc
end
end
Попробуйте так, должен выводить внутренний бар и внешний бар поглощения. надеюсь ничего не напутал, давно не пользуюсь, но это самый простой и понятный вариант.
function Structure()
local I1 = 0
local Structura = 0
return function(I, FS, ds)
I = I or 1
ds = ds or nil
FS = FS or {}
local p = FS.persent or 4 -- %
local wid = FS.wid or 0
local o0 = Value(I, 'O', ds) or 0
local c0 = Value(I, 'C', ds) or o0
local h0 = Value(I, 'H', ds) or c0
local l0 = Value(I, 'L', ds) or c0
if I == 1 then
I1 = 0
Structura = 0
end
local flag = h0 and l0 and c0 and o0 or false
local o1 = I > 1 and Value(I-1, 'O', ds) or o0
local c1 = I > 1 and Value(I-1, 'C', ds) or c0
local h1 = I > 1 and Value(I-1, 'H', ds) or h0
local l1 = I > 1 and Value(I-1, 'L', ds) or l0
local flag1 = I > 1 and flag and h1 and l1 or false
local h2 = I > 2 and Value(I-2, 'H', ds) or h1
local l2 = I > 2 and Value(I-2, 'L', ds) or l1
local flag2 = I > 2 and h2 and l2 and flag1 and flag or false
local newbar = I > I1
-- Определение типов баров
local up_bar1 = flag2 and h1 > h2 and l1 >= l2 or false
local down_bar1 = flag2 and l1 < l2 and h1 <= h2 or false
local inbar1 = flag2 and h1 <= h2 and l1 >= l2 or false
local outbar1 = flag2 and h1 > h2 and l1 < l2 or false
local outbar_up1 = outbar1 and c1 > o1 or false
local outbar_down1 = outbar1 and c1 <= o1 or false
local outbar0 = flag1 and h0 > h1 and l0 < l1 or false
local outbar_up0 = outbar0 and c0 > o0 or false
local outbar_down0 = outbar0 and c0 < o0 or false
local up_bar0 = flag1 and h0 > h1 and l0 >= l1 or false
local down_bar0 = flag1 and l0 < l1 and h0 <= h1 or false
local inbar0 = flag1 and h0 < h1 and l0 > l1 or false
local event = newbar and (outbar0 or up_bar0 or down_bar0) or false
local struc = (outbar_up0 or up_bar0) and 1 or (outbar_down0 or down_bar0) and -1 or 0
local structura = Structura
Structura = (newbar or event) and Structura + struc or structura
I1 = I
return newbar and inbar1 or nil, newbar and outbar1 or nil
end
end
Settings={};
Settings.Name = "Structure";
local f;
function Init()
f=Structure();
Settings.line = {
{Name = "InBar",Color = RGB(0, 0, 255), Type = TYPE_POINT, Width = 2},
{Name = "OutBar",Color = RGB(255, 0, 255), Type = TYPE_HISTOGRAM, Width = 2},
};
return #Settings.line;
end
function OnCalculate(index)
return f( index,Settings )
end
Все таки напутал, нужно заменить строку return newbar and inbar1 or nil, newbar and outbar1 or nil на return newbar and inbar1 and l1 or nil, newbar and outbar1 and h1 or nil
Должен выводить точки в момент появления новой свечи
Да действительно, вот исправленный проверил у себя, пробуйте local string_upper,string_sub=string.upper,string.sub; function Value(I,VType,ds)
local Out = nil local VType=(VType and string_upper(string_sub(VType,1,1))) or "A" if VType == "O" then --Open Out = (O and O(I)) or (ds and ds:O(I)) elseif VType == "H" then --High Out = (H and H(I)) or (ds and ds:H(I)) elseif VType == "L" then --Low Out = (L and L(I)) or (ds and ds:L(I)) elseif VType == "C" then --Close Out = (C and C(I)) or (ds and ds:C(I)) elseif VType == "V" then --Volume Out = (V and V(I)) or (ds and ds:V(I)) elseif VType == "X" then --DateTime Out = (T and T(I)) or (ds and ds:T(I)) elseif VType == "A" then --Any if ds then Out = ds[I] end end return Out end function Structure() local I1 = 0 local Structura = 0
return function(I, FS, ds) I = I or 1 ds = ds or nil FS = FS or {} local p = FS.persent or 4 -- % local wid = FS.wid or 0
local o0 = Value(I, 'O', ds) or 0 local c0 = Value(I, 'C', ds) or o0 local h0 = Value(I, 'H', ds) or c0 local l0 = Value(I, 'L', ds) or c0
if I == 1 then I1 = 0 Structura = 0 end
local flag = h0 and l0 and c0 and o0 or false
local o1 = I > 1 and Value(I-1, 'O', ds) or o0 local c1 = I > 1 and Value(I-1, 'C', ds) or c0 local h1 = I > 1 and Value(I-1, 'H', ds) or h0 local l1 = I > 1 and Value(I-1, 'L', ds) or l0 local flag1 = I > 1 and flag and h1 and l1 or false
local h2 = I > 2 and Value(I-2, 'H', ds) or h1 local l2 = I > 2 and Value(I-2, 'L', ds) or l1 local flag2 = I > 2 and h2 and l2 and flag1 and flag or false
local newbar = I > I1
-- Определение типов баров local up_bar1 = flag2 and h1 > h2 and l1 >= l2 or false local down_bar1 = flag2 and l1 < l2 and h1 <= h2 or false local inbar1 = flag2 and h1 <= h2 and l1 >= l2 or false local outbar1 = flag2 and h1 > h2 and l1 < l2 or false local outbar_up1 = outbar1 and c1 > o1 or false local outbar_down1 = outbar1 and c1 <= o1 or false
local outbar0 = flag1 and h0 > h1 and l0 < l1 or false local outbar_up0 = outbar0 and c0 > o0 or false local outbar_down0 = outbar0 and c0 < o0 or false local up_bar0 = flag1 and h0 > h1 and l0 >= l1 or false local down_bar0 = flag1 and l0 < l1 and h0 <= h1 or false local inbar0 = flag1 and h0 < h1 and l0 > l1 or false
local event = newbar and (outbar0 or up_bar0 or down_bar0) or false
local struc = (outbar_up0 or up_bar0) and 1 or (outbar_down0 or down_bar0) and -1 or 0 local structura = Structura Structura = (newbar or event) and Structura + struc or structura
I1 = I if newbar and inbar1 then SetValue(I-1,1,l1 ) end if newbar and outbar1 then SetValue(I-1,2,h1 ) end --return newbar and inbar1 and li or nil, newbar and outbar1 and h1 or nil end end
Settings={}; Settings.Name = "Structure";
local f; function Init()
f=Structure(); Settings.line = { {Name = "InBar",Color = RGB(0, 0, 255), Type = TYPE_POINT, Width = 3}, {Name = "OutBar",Color = RGB(255, 0, 255), Type = TYPE_POINT, Width = 3}, }; return #Settings.line; end function OnCalculate(index) return f( index,Settings ) end
VPM, извините, но не появляется в списке. Может я что-то неправильно делаю? Сохраняю код в текстовом файле с расширением .lua и помещаю его в папку LuaIndicators. Но его нет в списке.
Что в списке было удобно и быстро находить измените имя индикатора например так Settings.Name = "1Structure"; это будет самописные блокировать в группу а Ваш поиск будет всегда с одного знака начинаться, просто удобно.
Павел Лоскутов написал: Мот быть кто-то уже писал индикатор внутреннего бара для квика, или какой-нибудь подобный. Может ли кто написать простой индикатор insidebar, чтобы он изменял цвет или он отмечался точкой или другим знаком?
написал такой вариант:
Код
name="nk_insBar";
Settings={Name =name};
local function Cn(i) local Ci,Oi=C(i),O(i);if Ci>=Oi then return Ci,Oi; end return Oi,Ci; end
j=1;
function OnCalculate(i)
Hi,Li=H(i),L(i);
if Hi~=Li then
BH,BL=Cn(i)
if i~=j then BH1,BL1=Cn(j); H1,L1=H(j),L(j); j=i; end
if H_ then
if Hi>H_ or L_>Li then H1_,L1_=H_,L_; H_,L_=nil; end
else
if H1>=Hi and Li>=L1 then BH_,BL_,H_,L_=BH1,BL1,H1,L1; end
end
end
if H_ then return H_,L_; else return H1_,L1_; end
end
function Init()
Settings.line = {
{Name = "H_",Color = RGB(0, 0, 255), Type =3, Width = 2},
{Name = "L_",Color = RGB(255, 0, 255), Type =3, Width = 2},
};
return #Settings.line;
end