- Code: Select all
function Init()
indicator:name("SAR oscillator");
indicator:description("SAR oscillator");
indicator:requiredSource(core.Bar);
indicator:type(core.Oscillator);
indicator.parameters:addDouble("Step", "Step for SAR", "", 0.02, 1, 200);
indicator.parameters:addDouble("Max", "Max for SAR", "", 0.2, 1, 200);
indicator.parameters:addColor("clr_buff1", "Color of Buff1", "Color of Buff1", core.rgb(0, 255, 0));
indicator.parameters:addColor("clr_buff2", "Color of Buff2", "Color of Buff2", core.rgb(0, 128, 0));
indicator.parameters:addColor("clr_buff3", "Color of Buff3", "Color of Buff3", core.rgb(255, 0, 0));
indicator.parameters:addColor("clr_buff4", "Color of Buff4", "Color of Buff4", core.rgb(128, 0, 0));
indicator.parameters:addColor("clr_Line", "Color of Line", "Color of Line", core.rgb(255, 255, 0));
end
local first;
local source = nil;
local Step;
local Max;
local SAR;
local Buff1=nil;
local Buff2=nil;
local Buff3=nil;
local Buff4=nil;
local LineBuff=nil;
function Prepare()
source = instance.source;
Step=instance.parameters.Step;
Max=instance.parameters.Max;
SAR = core.indicators:create("SAR", source, Step, Max);
first = SAR.DATA:first()+2;
local name = profile:id() .. "(" .. source:name() .. ", " .. instance.parameters.Step .. ", " .. instance.parameters.Max .. ")";
instance:name(name);
Buff1 = instance:addStream("Buff1", core.Bar, name .. ".Buff1", "Buff1", instance.parameters.clr_buff1, first);
Buff2 = instance:addStream("Buff2", core.Bar, name .. ".Buff2", "Buff2", instance.parameters.clr_buff2, first);
Buff3 = instance:addStream("Buff3", core.Bar, name .. ".Buff3", "Buff3", instance.parameters.clr_buff3, first);
Buff4 = instance:addStream("Buff4", core.Bar, name .. ".Buff4", "Buff4", instance.parameters.clr_buff4, first);
LineBuff = instance:addStream("LineBuff", core.Line, name .. ".LineBuff", "LineBuff", instance.parameters.clr_Line, first);
end
function Update(period, mode)
if (period>first) then
SAR:update(mode);
LineBuff[period]=math.max(SAR.UP[period],SAR.DN[period])-source.close[period];
if LineBuff[period]<0. then
if LineBuff[period]>LineBuff[period-1] then
Buff1[period]=LineBuff[period];
else
Buff2[period]=LineBuff[period];
end
else
if LineBuff[period]>LineBuff[period-1] then
Buff3[period]=LineBuff[period];
else
Buff4[period]=LineBuff[period];
end
end
end
end
MT4/Mq4 version
viewtopic.php?f=38&t=63980&p=108612#p108612