Индикатор insidebar

Страницы: 1
RSS
Индикатор insidebar, Написать индикатор
 
Мот быть кто-то уже писал индикатор внутреннего бара для квика, или какой-нибудь подобный. Может ли кто написать простой индикатор 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
 
VPM, спасибо, но я не знаю этого языка. В квике при добавлении выдает ошибку:
unexpected symbol near '<\255>'.
Что это?
 
Код
Попробуйте так, должен выводить внутренний бар и внешний бар поглощения. надеюсь ничего не напутал, давно не пользуюсь, но это самый простой и понятный вариант.

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

Должен выводить точки в момент появления новой свечи
 
VPM, не загружает. Ошибка
 
Да действительно, вот исправленный проверил у себя, пробуйте
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.
Но его нет в списке.
 
Нужен формат 1251, воспользуйтесь стандартным блокнотом, скопируйте и сохраните в этом формате, проверь настройки квик там поставьте lua 5.4  
 
В блокноте это ANSI
 
VPM, все так, но нет. lua 5.4.1
 
Что в списке было удобно и быстро находить измените имя индикатора например так
Settings.Name = "1Structure";
это будет самописные блокировать в группу а Ваш поиск будет всегда с одного знака начинаться, просто удобно.
 
Цитата
Skyrider50 написал:
VPM, все так, но нет. lua 5.4.1
В квике: система - настройки - основные - луа скрипты, вообще то хотя я и пишу в среде 5.4 но тут нет ничего такого что не воспроизвёл бы даже луа 5.1
 
VPM, нашел, но выдает ошибку при загрузке.
attempt to call a nil value (global 'string_sub')
 
Посмотрите внимательней вы пропустили строку

local string_upper,string_sub=string.upper,string.sub;

поставьте перед функцией function Value(I,VType,ds)
 
VPM, все заработал. Большое спасибо, что откликнулись и помогли. Удачи Вам в ваших делах.
 
Цитата
Павел Лоскутов написал:
Мот быть кто-то уже писал индикатор внутреннего бара для квика, или какой-нибудь подобный. Может ли кто написать простой индикатор 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

Страницы: 1
Читают тему
Наверх