LUA индикатор фрактальные уровни.

Страницы: 1
RSS
LUA индикатор фрактальные уровни., LUA индикатор на основе фракталов
 
Добрый день .
Народ, очень нужна ваша помощь по данному индикатору. А если кто поделится готовым, буду очень благодарен.
Намедни решил поколдовать с фрактальным индикатором, так что бы фракталы растянуть по уровню.
В итоге вот что у меня получилось. Не ахти, сразу скажу.
Я конечно не спец в программировании, только учусь, поэтому и обращаюсь сюда за помощью.
Как его исправить, что бы фрактальный уровень рисовался с самого начала (там где треугольники на картинке, это обычный индикатор фрактала) и  заканчивался в том случае когда цена пересечёт этот уровень выше или ниже.

Вот сам индикатор:

Settings =
{Name = "Fracta_l",
period=21,
line =
{{
Name = "Level_High",
Color = RGB(0,255,0),
Type = TYPE_POINT,
Width = 1
},{
Name = "Level_Low",
Color = RGB(255,0,0),
Type = TYPE_POINT,
Width = 1
}}}
idx_prosl=0

function Init()
return #Settings.line
end
function OnCalculate(idx)
if idx==1 then
P = math.floor(Settings.period/2)*2+1
t_H,t_L={},{}
end
if idx~=nil and idx>P then
if idx_prosl~=idx then
local l=idx-P
for l=l,idx-1 do
t_H[l]=H(l)
t_L[l]=L(l)
end
if t_H[#t_H-(P-1)/2]==math.max(unpack(t_H,#t_H-P+1,#t_H)) then
H_ind_value=t_H[#t_H-(P-1)/2]
end
if t_L[#t_L-(P-1)/2]==math.min(unpack(t_L,#t_L-P+1,#t_L)) then
L_ind_value=t_L[#t_L-(P-1)/2]
end
end
else
H_ind_value=nil
L_ind_value=nil
end
idx_prosl=idx
return H_ind_value, L_ind_value
end
 
Здравствуйте,
Сам скрипт составлен некорректно.
Индикатор фракталов предполагает установку значений на предыдущей свечке а не на текущей.
В связи с чем, рекомендуется устанавливать значения функцией SetValue
На нашем сайтеВы можете найти готовые примеры индикаторов на LUA
рекомендуем использовать скрипт из примера.
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Сам скрипт составлен некорректно.
Индикатор фракталов предполагает установку значений на предыдущей свечке а не на текущей.
В связи с чем, рекомендуется устанавливать значения функцией SetValue
На нашем  сайте Вы можете найти готовые примеры индикаторов на LUA
рекомендуем использовать скрипт из примера.
Да, я знаю что он написан не корректно.
Но в том, который сбросилы вы, не удаётся начертить линию, пускай даже точками, что бы построить фрактальный уровень.


Settings = {
Name = "*FRACTALS (Fractals)",
Period = 5,
line = {{
Name = "Horizontal line",
Type = TYPE_LINE,
Color = RGB(140, 140, 140)
},
{
Name = "FRACTALS - Up",
Type = TYPE_TRIANGLE_UP,
Color = RGB(0, 206, 0)
},
{
Name = "FRACTALS - Down",
Type = TYPE_TRIANGLE_DOWN,
Color = RGB(221, 44, 44)
}
},
Round = "off",
Multiply = 1,
Horizontal_line="off"
}

function Init()
func = FRACTALS()
return #Settings.line
end

function OnCalculate(Index)
local Out1,Out2 = func(Index, Settings)
SetValue(Out1, 2, ConvertValue(Settings,H(Out1)))
SetValue(Out2, 3, ConvertValue(Settings,L(Out2)))
return tonumber(Settings.Horizontal_line),nil,nil
end

function FRACTALS() --Fractals ("FRACTALS")
local H_tmp={}
local L_tmp={}
local it = {[1]=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 5)
if (P>0) then
if I == 1 then
H_tmp={}
L_tmp={}
it = {[1]=0, l=0}
end
if CandleExist(I,ds) then
if I~=it[Squeeze(it.l,P)] then
it.l = it.l + 1
it[Squeeze(it.l,P)] = I
end
local Ip,Ipppp = Squeeze(it.l,P),Squeeze(it.l,P-1)+1
local nP = math.floor(P/2)*2+1
H_tmp[Ipppp] = GetValueEX(it[Ip],HIGH,ds)
L_tmp[Ipppp] = GetValueEX(it[Ip],LOW,ds)
if it.l >= nP then
local S = it[Squeeze(it.l-nP+1+math.floor(nP/2),P)]
local val_h=math.max(unpack(H_tmp))
local val_l=math.min(unpack(L_tmp))
local L = GetValueEX(S,LOW,ds)
local H = GetValueEX(S,HIGH,ds)
if (val_h == H) and (val_h >0)
and (val_l == L) and (val_l > 0) then
return S,S
else
if (val_h == H) and (val_h > 0) then
return S,nil
end
if (val_l == L) and (val_l > 0) then
return nil,S
end
end
end
end
end
return nil,nil
end
end


SMA,MMA,EMA,WMA,SMMA,VMA = "SMA","MMA","EMA","WMA","SMMA","VMA"
OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = "O","H","L","C","V","M","T","W","D","A"

function CandleExist(I,ds)
return (type©=="function" and C(I)~=nil) or
(type(ds)=="table" and (ds[I]~=nil or (type(ds.Size)=="function" and (I>0) and (I<=ds:Size()))))
end

function Squeeze(I,P)
return math.fmod(I-1,P+1)
end

function ConvertValue(T,...)
local function r(V, R)
if R and string.upper®== "ON" then R=0 end
if V and tonumber® then
if V >= 0 then return math.floor(V * 10^R + 0.5) / 10^R
else return math.ceil(V * 10^R - 0.5) / 10^R end
else return V end
end
if arg.n > 0 then
for i = 1, arg.n do
arg[i]=arg[i] and r(arg[i] * ((T and T.Multiply) or 1), (T and T.Round) or "off")
end
return unpack(arg)
else return nil end
end

function GetValueEX(I,VT,ds)
VT=(VT and string.upper(string.sub(VT,1,1))) or ANY
if VT == OPEN then --Open
return (O and O(I)) or (ds and ds:O(I))
elseif VT == HIGH then --High
return (H and H(I)) or (ds and ds:H(I))
elseif VT == LOW then --Low
return (L and L(I)) or (ds and ds:L(I))
elseif VT == CLOSE then --Close
return (C and C(I)) or (ds and ds:C(I))
elseif VT == VOLUME then --Volume
return (V and V(I)) or (ds and ds:V(I))
elseif VT == MEDIAN then --Median
return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2)
elseif VT == TYPICAL then --Typical
return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)
elseif VT == WEIGHTED then --Weighted
return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4)
elseif VT == DIFFERENCE then --Difference
return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))
else --Any
return (ds and ds[I])
end
return nil
end


С чем это связано...?
Или это странность самого языка Lua?
 
При включении горизонтальных линий он вообще тарабарщину рисует.
 
 
Хорошо, давайте постепенно, КАК в моём приведённом https://forum.quik.ru/messages/forum10/message33177/topic3955/#message33177
выше коде переместить фрактальный уровень, что бы он начинался там, где отображаются треугольники.  
 
Цитата
RayIntraday написал:
Но в том, который сбросилы вы, не удаётся начертить линию, пускай даже точками, что бы построить фрактальный уровень.
Но ведь Вы ничего не сделали для того чтобы отображались линии. А сами по себе они отображаться не будут, т.к. в нашем примере это не предусмотрено.
Цитата
RayIntraday написал:
При включении горизонтальных линий он вообще тарабарщину рисует.
Комментарий не понятен, индикатор фракталов сам по себе и не должен отображаться в виде горизонтальных линий.

Цитата
RayIntraday написал:
Хорошо, давайте постепенно, КАК в моём приведённом  https://forum.quik.ru/messages/forum10/message33177/topic3955/#message33177  
выше коде переместить фрактальный уровень, что бы он начинался там, где отображаются треугольники.

На это уже был ответ:
Цитата
Sergey Gorokhov написал:
Индикатор фракталов предполагает установку значений на предыдущей свечке а не на текущей.
В связи с чем, рекомендуется устанавливать значения функцией SetValue
Страницы: 1
Читают тему
Наверх