- Code: Select all
-- Indicator profile initialization routine
-- Defines indicator profile properties and indicator parameters
function Init()
indicator:name("Fractal Based Support/Resistance lines");
indicator:description("");
indicator:requiredSource(core.Bar);
indicator:type(core.Indicator);
indicator.parameters:addColor("R_color", "Color of R", "Color of R", core.rgb(255, 192, 0));
indicator.parameters:addColor("S_color", "Color of S", "Color of S", core.rgb(0, 192, 255));
end
-- Indicator instance initialization routine
-- Processes indicator parameters and creates output streams
-- Parameters block
local first;
local source = nil;
-- Streams block
local R = nil;
local S = nil;
-- Routine
function Prepare()
source = instance.source;
first = source:first() + 4;
local name = profile:id() .. "(" .. source:name() .. ")";
instance:name(name);
R = instance:addStream("R", core.Dot, name .. ".R", "R", instance.parameters.R_color, first);
S = instance:addStream("S", core.Dot, name .. ".S", "S", instance.parameters.S_color, first);
end
-- Indicator calculation routine
function Update(period)
if period >= first and source:hasData(period) then
-- defect fractals on two periods ago
local up, down, curr;
up = false;
down = false;
curr = source.high[period - 2];
if (curr >= source.high[period - 4] and curr >= source.high[period - 3] and
curr >= source.high[period - 1] and curr >= source.high[period]) then
up = true;
end
if up then
R[period - 2] = curr;
R[period - 1] = curr;
R[period] = curr;
else
if R:hasData(period - 1) then
R[period] = R[period - 1];
end
end
curr = source.low[period - 2];
if (curr <= source.low[period - 4] and curr <= source.low[period - 3] and
curr <= source.low[period - 1] and curr <= source.low[period]) then
down = true;
end
if down then
S[period - 2] = curr;
S[period - 1] = curr;
S[period] = curr;
else
if S:hasData(period - 1) then
S[period] = S[period - 1];
end
end
end
end
Download:
FBSR with Fibonacci levels