Indicator:
- Code: Select all
function Init()
indicator:name("Fx Sniper's Ergodic CCI Trigger");
indicator:description("Fx Sniper's Ergodic CCI Trigger");
indicator:requiredSource(core.Bar);
indicator:type(core.Oscillator);
indicator.parameters:addInteger("pq", "pq", "pq", 4);
indicator.parameters:addInteger("pr", "pr", "pr", 8);
indicator.parameters:addInteger("ps", "ps", "ps", 5);
indicator.parameters:addInteger("trigger", "trigger", "trigger", 4);
indicator.parameters:addString("MA_Method", "Method of MA", "", "MVA");
indicator.parameters:addStringAlternative("MA_Method", "EMA", "", "EMA");
indicator.parameters:addStringAlternative("MA_Method", "KAMA", "", "KAMA");
indicator.parameters:addStringAlternative("MA_Method", "LWMA", "", "LWMA");
indicator.parameters:addStringAlternative("MA_Method", "MVA", "", "MVA");
indicator.parameters:addStringAlternative("MA_Method", "TMA", "", "TMA");
indicator.parameters:addColor("clr1", "Color of Egodic CCI", "Color of Egodic CCI", core.rgb(0, 255, 0));
indicator.parameters:addColor("clr2", "Color of Trigger Line", "Color of Trigger Line", core.rgb(255, 0, 0));
end
local first;
local source = nil;
local pq;
local pr;
local ps;
local trigger;
local MA_Method;
local var1;
local var2;
local var2a;
local var2b;
local var2c;
local var3;
local var4;
local buff1;
local buff2;
function Prepare()
source = instance.source;
pq=instance.parameters.pq;
pr=instance.parameters.pr;
ps=instance.parameters.ps;
trigger=instance.parameters.trigger;
MA_Method=instance.parameters.MA_Method;
mtm = instance:addInternalStream(0, 0);
absmtm = instance:addInternalStream(0, 0);
var1 = core.indicators:create(MA_Method, mtm, pq);
var2 = core.indicators:create(MA_Method, var1.DATA, pr);
var2a = core.indicators:create(MA_Method, absmtm, pq);
var2b = core.indicators:create(MA_Method, var2a.DATA, pr);
var2c = core.indicators:create(MA_Method, var2.DATA, ps);
var3 = core.indicators:create(MA_Method, var2b.DATA, ps);
first = source:first()+2;
local name = profile:id() .. "(" .. source:name() .. ", " .. instance.parameters.pq .. ", " .. instance.parameters.pr .. ", " .. instance.parameters.ps .. ", " .. instance.parameters.trigger .. ", " .. instance.parameters.MA_Method .. ")";
instance:name(name);
buff1 = instance:addStream("buff1", core.Line, name .. ".Egodic CCI", "Egodic CCI", instance.parameters.clr1, first);
var4 = core.indicators:create(MA_Method, buff1, trigger);
buff2 = instance:addStream("buff2", core.Line, name .. ".Trigger Line", "Trigger Line", instance.parameters.clr2, first);
end
function Update(period, mode)
mtm[period]=source.close[period]-source.close[period-1];
absmtm[period]=math.abs(mtm[period]);
var1:update(mode);
var2:update(mode);
var2a:update(mode);
var2b:update(mode);
var2c:update(mode);
var3:update(mode);
if (period>first) then
if var3.DATA[period]~=0 then
buff1[period]=(500.*var2c.DATA[period])/var3.DATA[period];
var4:update(mode);
buff2[period]=var4.DATA[period];
end
end
end
Signal oh chart:
- Code: Select all
function Init()
indicator:name("Fx Sniper's Ergodic CCI Trigger on chart");
indicator:description("Fx Sniper's Ergodic CCI Trigger on chart");
indicator:requiredSource(core.Bar);
indicator:type(core.Indicator);
indicator.parameters:addInteger("pq", "pq", "pq", 4);
indicator.parameters:addInteger("pr", "pr", "pr", 8);
indicator.parameters:addInteger("ps", "ps", "ps", 5);
indicator.parameters:addInteger("trigger", "trigger", "trigger", 4);
indicator.parameters:addString("MA_Method", "Method of MA", "", "MVA");
indicator.parameters:addStringAlternative("MA_Method", "EMA", "", "EMA");
indicator.parameters:addStringAlternative("MA_Method", "KAMA", "", "KAMA");
indicator.parameters:addStringAlternative("MA_Method", "LWMA", "", "LWMA");
indicator.parameters:addStringAlternative("MA_Method", "MVA", "", "MVA");
indicator.parameters:addStringAlternative("MA_Method", "TMA", "", "TMA");
indicator.parameters:addColor("clr1", "Color of UP", "Color of UP", core.rgb(0, 255, 0));
indicator.parameters:addColor("clr2", "Color of DN", "Color of DN", core.rgb(255, 0, 0));
end
local first;
local source = nil;
local pq;
local pr;
local ps;
local trigger;
local MA_Method;
local Ind;
local UP;
local DN;
function Prepare()
source = instance.source;
pq=instance.parameters.pq;
pr=instance.parameters.pr;
ps=instance.parameters.ps;
trigger=instance.parameters.trigger;
MA_Method=instance.parameters.MA_Method;
Ind = core.indicators:create("FX_SNIPER'S_ERGODIC_CCI_TRIGGER", source, pq,pr,ps,trigger,MA_Method);
first = Ind.DATA:first()+2;
local name = profile:id() .. "(" .. source:name() .. ", " .. instance.parameters.pq .. ", " .. instance.parameters.pr .. ", " .. instance.parameters.ps .. ", " .. instance.parameters.trigger .. ", " .. instance.parameters.MA_Method .. ")";
instance:name(name);
UP = instance:createTextOutput ("Up", "Up", "Wingdings", 10, core.H_Center, core.V_Bottom, instance.parameters.clr1, 0);
DN = instance:createTextOutput ("Dn", "Dn", "Wingdings", 10, core.H_Center, core.V_Top, instance.parameters.clr2, 0);
end
function Update(period, mode)
if (period>first) then
Ind:update(mode);
if Ind.buff1[period]>Ind.buff2[period] and Ind.buff1[period-1]<=Ind.buff2[period-1] then
UP:set(period, source.low[period], "\225", "UP");
end
if Ind.buff1[period]<Ind.buff2[period] and Ind.buff1[period-1]>=Ind.buff2[period-1] then
DN:set(period, source.high[period], "\226", "DN");
end
end
end