BollStarc TC Signal MT4 Indicator

If you need an Indicator or Signal developed or translated from other language, please post all Indicator development REQUESTS to this section here.

Moderator: admin

BollStarc TC Signal MT4 Indicator

Postby bjmerkel » Fri May 21, 2010 8:33 pm

Hello,

Can you convert this into a .lua?

Thanks.

http://forexarena.blogspot.com/2010/03/ ... cator.html
bjmerkel
 
Posts: 24
Joined: Wed Apr 21, 2010 2:50 pm

Re: BollStarc TC Signal MT4 Indicator

Postby Alexander.Gettinger » Mon May 24, 2010 11:30 pm

BollStarc.png


Code: Select all
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
Attachments
BollStarc.lua
(4.57 KiB) Downloaded 685 times
Alexander.Gettinger
FXCodeBase: Confirmed User
 
Posts: 3785
Joined: Wed Mar 31, 2010 9:40 pm
Location: Russia, Omsk


Return to Indicator and Signal Requests

Who is online

Users browsing this forum: No registered users and 18 guests