- Code: Select all
function Init()
indicator:name("FAN of EMA");
indicator:description("");
indicator:requiredSource(core.Tick);
indicator:type(core.Indicator);
indicator.parameters:addInteger("Period_1", "First period", "No description", 5);
indicator.parameters:addString("Method", "Method", "", "Add");
indicator.parameters:addStringAlternative("Method", "Add", "", "Add");
indicator.parameters:addStringAlternative("Method", "Mult", "", "Mult");
indicator.parameters:addInteger("K", "K", "No description", 2);
indicator.parameters:addInteger("N", "Count of MA", "No description", 5);
end
local Period1;
local K;
local N;
local Method;
local first;
local source = nil;
local buffs={};
local Inds={};
function Prepare()
Period1 = instance.parameters.Period_1;
K = instance.parameters.K;
N = instance.parameters.N;
Method = instance.parameters.Method;
source = instance.source;
local Period=Period1;
for i=1,N,1 do
Ind=core.indicators:create("EMA", source, Period);
Inds[i]=Ind;
if Method=="Mult" then
Period=Period*K;
else
Period=Period+K;
end
end
first = Inds[N].DATA:first()+2;
local name = profile:id() .. "(" .. source:name() .. ", " .. Period1 .. ", " .. K .. ", " .. N .. ", " .. Method .. ")";
instance:name(name);
for i=1,N,1 do
if i<N/3 then
Color=core.rgb(i*155*3/N+100,0,0);
elseif i>=N/3 and i<2*N/3 then
Color=core.rgb(0,(i-N/3)*155/N+100,0);
else
Color=core.rgb(0,0,(i-N*2/3)*155/N+100);
end
buffs[i] = instance:addStream("buff" .. i, core.Line, name .. ".buff" .. i, "buff" .. i, Color, first);
end
end
function Update(period, mode)
if (period>first) then
for i=1,N,1 do
Inds[i]:update(mode);
buffs[i][period]=Inds[i].DATA[period];
end
end
end
MT4/Mq4 veersion is available here.
viewtopic.php?f=38&t=63780