Hello,
Can you convert this into a .lua?
Thanks.
http://forexarena.blogspot.com/2010/03/ ... cator.html
Moderator: admin
function Init()
indicator:name("BollStarc indicator");
indicator:description("");
indicator:requiredSource(core.Bar);
indicator:type(core.Indicator);
indicator.parameters:addInteger("BB_Period", "BB_Period", "Period of Bands", 20);
indicator.parameters:addInteger("BB_Deviations", "BB_Deviations", "Deviations of Bands", 2);
indicator.parameters:addInteger("MA_Period", "MA_Period", "Period of MA", 13);
indicator.parameters:addInteger("ATR_Period", "ATR_Period", "Period of ATR", 21);
indicator.parameters:addDouble("KATR", "KATR", "KATR", 2);
indicator.parameters:addInteger("Shift", "Shift", "Shift", 1);
indicator.parameters:addDouble("ArrowDistance", "ArrowDistance", "Arrow distance", 0.3);
indicator.parameters:addColor("color1", "Moving Color", "Moving Color", core.rgb(128, 128, 128));
indicator.parameters:addColor("color2", "Upper Color", "Upper Color", core.rgb(255, 255, 0));
indicator.parameters:addColor("color3", "Lower Color", "Lower Color", core.rgb(255, 255, 0));
indicator.parameters:addColor("color4", "buff1 Color", "buff1 Color", core.rgb(0, 128, 255));
indicator.parameters:addColor("color5", "buff2 Color", "buff2 Color", core.rgb(0, 128, 255));
indicator.parameters:addColor("color6", "Arrow up Color", "Arrow up Color", core.rgb(0, 0, 255));
indicator.parameters:addColor("color7", "Arrow down Color", "Arrow down Color", core.rgb(255, 0, 0));
end
local first;
local source = nil;
local BB_Period;
local BB_Deviations;
local MA_Period;
local ATR_Period;
local KATR;
local Shift;
local ArrowDistance;
local MA=nil;
local BB=nil;
local ATR=nil;
local MovingBuffer;
local UpperBuffer;
local LowerBuffer;
local buff1;
local buff2;
local SigBufferUp=nil;
local SigBufferDn=nil;
function Prepare()
source = instance.source;
BB_Period=instance.parameters.BB_Period;
BB_Deviations=instance.parameters.BB_Deviations;
MA_Period=instance.parameters.MA_Period;
ATR_Period=instance.parameters.ATR_Period;
KATR=instance.parameters.KATR;
Shift=instance.parameters.Shift;
ArrowDistance=instance.parameters.ArrowDistance;
MA = core.indicators:create("EMA", source.close, MA_Period);
BB = core.indicators:create("BB", source.close, BB_Period,BB_Deviations);
ATR = core.indicators:create("ATR", source, ATR_Period);
first = math.max(MA.DATA:first(),BB.DATA:first(),ATR.DATA:first())+2;
local name = profile:id() .. "(" .. source:name() .. ", " .. BB_Period .. ", " .. BB_Deviations .. ", " .. MA_Period .. ", " .. ATR_Period .. ", " .. KATR .. ", " .. Shift .. ")";
instance:name(name);
MovingBuffer = instance:addStream("MovingBuffer", core.Line, name .. ".MovingBuffer", "MovingBuffer", instance.parameters.color1, first);
UpperBuffer = instance:addStream("UpperBuffer", core.Line, name .. ".UpperBuffer", "UpperBuffer", instance.parameters.color2, first);
LowerBuffer = instance:addStream("LowerBuffer", core.Line, name .. ".LowerBuffer", "LowerBuffer", instance.parameters.color3, first);
buff1 = instance:addStream("buff1", core.Line, name .. ".buff1", "buff1", instance.parameters.color4, first);
buff2 = instance:addStream("buff2", core.Line, name .. ".buff2", "buff2", instance.parameters.color5, first);
SigBufferUp = instance:createTextOutput ("SigBufferUp", "SigBufferUp", "Wingdings", 10, core.H_Center, core.V_Top, instance.parameters.color6, first);
SigBufferDn = instance:createTextOutput ("SigBufferDn", "SigBufferDn", "Wingdings", 10, core.H_Center, core.V_Top, instance.parameters.color7, first);
end
function Update(period, mode)
MA:update(mode);
BB:update(mode);
ATR:update(mode);
if (period>first) then
MovingBuffer[period]=MA.DATA[period-Shift];
UpperBuffer[period]=MovingBuffer[period]+(KATR*ATR.DATA[period-Shift]);
LowerBuffer[period]=MovingBuffer[period]-(KATR*ATR.DATA[period-Shift]);
buff1[period]=BB.TL[period];
buff2[period]=BB.BL[period];
local SigDistance=ArrowDistance*(KATR*ATR.DATA[period-Shift]);
if buff1[period-1]<UpperBuffer[period-1] and buff2[period-1]>=LowerBuffer[period-1] and buff2[period]<LowerBuffer[period] and MovingBuffer[period-1]<MovingBuffer[period] then
SigBufferUp:set(period, buff2[period]-SigDistance, "\225", "");
end
if buff1[period-1]<=UpperBuffer[period-1] and buff2[period-1]>LowerBuffer[period-1] and buff1[period]>UpperBuffer[period] and MovingBuffer[period-1]>MovingBuffer[period] then
SigBufferDn:set(period, buff1[period]+SigDistance, "\226", "");
end
end
end
Return to Indicator and Signal Requests
Users browsing this forum: No registered users and 18 guests