Heikin-Ashi Smoothed

Here you can post and download custom indicators. PLEASE: Do not start topics unless you are posting your own indicator, they will be moved to appropriate section even if you do.

Moderator: admin

Heikin-Ashi Smoothed

Postby Nikolay.Gekht » Sun Apr 11, 2010 8:14 pm

HASM.png

The Heikin-Ashi smoothed indicator is similar to the regular Heikin-Ashi, but:

a) uses the smoothed open, close, high and low prices
b) smooths the candles

So, formula of the indicator is:

open = MVA(MVA(OPEN, N1)[-1] + MVA(CLOSE, N1) / 2, N2)
close = MVA(MVA(OPEN, N1) + MVA(CLOSE, N1) + MVA(HIGH, N1) + MVA(LOW, N1)/ 2, N2)
high = MAX(open, close, MVA(HIGH, N1), N2)
low = MIN(open, close, MVA(LOW, N1), N2)

By default, the indicator hides the source data and is shown instead of the source.
To show the both, source data and Heikin-Ashi chart:

1) Uncheck "Hide Source" on the "Data Source" tab of the indicator properties.
2) Check "Show indicator/oscillator in an new area..." on the "Location" tab of the indicator properties.

As the standard HA indicator, the HASM indicator result is a regular bar source, so you can apply any existing indicator on it.

HASM.lua
(5.88 KiB) Downloaded 2976 times

HASM with Alert.lua
(13.98 KiB) Downloaded 395 times

Transparent Heikin Ashi Smoothed.lua
(8.66 KiB) Downloaded 835 times

MTF MCP Heikin-Ashi Smoothed.png

MTF MCP Heikin-Ashi Smoothed.lua
(13.25 KiB) Downloaded 682 times

Indicator will show the current direction of Heikin-Ashi Smoothed indicator for all selected time frames and currency pairs.
Active Cross is graphically presented.
MTF MCP Heikin-Ashi Smoothed.png

MTF MCP Heikin-Ashi Smoothed (2).lua
(11.71 KiB) Downloaded 502 times

A similar indicator can be found here.
viewtopic.php?f=17&t=63347&p=105655#p105655
Nikolay.Gekht
FXCodeBase: Base Builder
 
Posts: 1222
Joined: Wed Dec 16, 2009 6:39 pm
Location: Cary, NC

Re: Heikin-Ashi Smoothed

Postby koyote44 » Thu May 27, 2010 4:30 pm

Hi Nikolay,

i think you have missing a part in your code.
see lines 60 and 75

[upd by ng:]
Download:
HASM.lua
(5.32 KiB) Downloaded 2925 times


The original version does not use, in fact, the specified N1 and N2 parameters, so, therefore, the default Moving Average parameter is used. This update fixes this error.

Code: Select all
function Init()
    indicator:name("Heikin-Ashi Smoothed");
    indicator:description("");
    indicator:requiredSource(core.Bar);
    indicator:type(core.Indicator);
    indicator:setTag("group", "Trend");
    indicator:setTag("replaceSource", "t");

    indicator.parameters:addString("Method1", "The smoothing method for prices", "The methods marked by the star (*) requires to have approriate indicators installed", "MVA");
    indicator.parameters:addStringAlternative("Method1", "MVA", "", "MVA");
    indicator.parameters:addStringAlternative("Method1", "EMA", "", "EMA");
    indicator.parameters:addStringAlternative("Method1", "LWMA", "", "LWMA");
    indicator.parameters:addStringAlternative("Method1", "SMMA*", "", "SMMA");
    indicator.parameters:addStringAlternative("Method1", "Vidya (1995)*", "", "VIDYA");
    indicator.parameters:addStringAlternative("Method1", "Vidya (1992)*", "", "VIDYA92");
    indicator.parameters:addStringAlternative("Method1", "Wilders*", "", "WMA");

    indicator.parameters:addInteger("N1", "Periods to smooth prices", "", 6, 1, 1000);

    indicator.parameters:addString("Method2", "The smoothing method for candles", "The methods marked by the star (*) requires to have approriate indicators installed", "MVA");
    indicator.parameters:addStringAlternative("Method2", "MVA", "", "MVA");
    indicator.parameters:addStringAlternative("Method2", "EMA", "", "EMA");
    indicator.parameters:addStringAlternative("Method2", "LWMA", "", "LWMA");
    indicator.parameters:addStringAlternative("Method2", "SMMA*", "", "SMMA");
    indicator.parameters:addStringAlternative("Method2", "Vidya (1995)*", "", "VIDYA");
    indicator.parameters:addStringAlternative("Method2", "Vidya (1992)*", "", "VIDYA92");
    indicator.parameters:addStringAlternative("Method2", "Wilders*", "", "WMA");

    indicator.parameters:addInteger("N2", "Periods to smooth candles", "", 6, 1, 1000);
end

local smopen = nil;
local smhigh = nil;
local smlow = nil;
local smclose = nil;

local iopen = nil;
local ihigh = nil;
local ilow = nil;
local iclose = nil;

local smiopen = nil;
local smihigh = nil;
local smilow = nil;
local smiclose = nil;

local open = nil;
local high = nil;
local low = nil;
local close = nil;

local first1 = 0;
local first2 = 0;

-- Routine
function Prepare()
    source = instance.source;
   
    -- was missing, so N1 was not set
    local N1 = instance.parameters.N1;
   
    smopen = core.indicators:create(instance.parameters.Method1, source.open, N1);
    smclose = core.indicators:create(instance.parameters.Method1, source.close, N1);
    smhigh = core.indicators:create(instance.parameters.Method1, source.high, N1);
    smlow = core.indicators:create(instance.parameters.Method1, source.low, N1);

    first1 = smopen.DATA:first() + 1;

    iopen = instance:addInternalStream(first1, 0);
    iclose = instance:addInternalStream(first1, 0);
    ihigh = instance:addInternalStream(first1, 0);
    ilow = instance:addInternalStream(first1, 0);
   
    -- was missing, so N2 was not set
    local N2 = instance.parameters.N2;
   
    smiopen = core.indicators:create(instance.parameters.Method2, iopen, N2);
    smiclose = core.indicators:create(instance.parameters.Method2, iclose, N2);
    smihigh = core.indicators:create(instance.parameters.Method2, ihigh, N2);
    smilow = core.indicators:create(instance.parameters.Method2, ilow, N2);

    first2 = smiopen.DATA:first() + 1;

    local name = "Heikin-Ashi Smoothed" .. "(" .. source:name() .. "," .. instance.parameters.Method1 .. "(" .. instance.parameters.N1 .. ")," .. instance.parameters.Method2 .. "(" .. instance.parameters.N2.. "))"
    instance:name(name);
    open = instance:addStream("open", core.Line, name, "open", core.rgb(0, 0, 0), first2)
    high = instance:addStream("high", core.Line, name, "high", core.rgb(0, 0, 0), first2)
    low = instance:addStream("low", core.Line, name, "low", core.rgb(0, 0, 0), first2)
    close = instance:addStream("close", core.Line, name, "close", core.rgb(0, 0, 0), first2)
    instance:createCandleGroup("HAS", "HAS", open, high, low, close);
end

-- Indicator calculation routine
function Update(period, mode)
    -- smooth source
    smopen:update(mode);
    smhigh:update(mode);
    smlow:update(mode);
    smclose:update(mode);

    if period >= first1 then
        -- calculate candles
        if (period == first1) then
            iopen[period] = (smopen.DATA[period - 1] + smclose.DATA[period - 1]) / 2;
        else
            iopen[period] = (iopen[period - 1] + iclose[period - 1]) / 2;
        end
        iclose[period] = (smopen.DATA[period] + smhigh.DATA[period] + smlow.DATA[period] + smclose.DATA[period]) / 4;
        ihigh[period] = math.max(iopen[period], iclose[period], smhigh.DATA[period]);
        ilow[period] = math.min(iopen[period], iclose[period], smlow.DATA[period]);

        -- smooth candles
        smiopen:update(mode);
        smihigh:update(mode);
        smilow:update(mode);
        smiclose:update(mode);
    end

    if period >= first2 then
        open[period] = smiopen.DATA[period];
        close[period] = smiclose.DATA[period];
        high[period] = math.max(open[period], close[period], smihigh.DATA[period]);
        low[period] = math.min(open[period], close[period], smilow.DATA[period]);
    end
end
koyote44
FXCodeBase: Confirmed User
 
Posts: 2
Joined: Thu May 20, 2010 1:04 pm

Re: Heikin-Ashi Smoothed

Postby Nikolay.Gekht » Thu May 27, 2010 7:43 pm

Thank you very much for spotting and fixing the problem.
Nikolay.Gekht
FXCodeBase: Base Builder
 
Posts: 1222
Joined: Wed Dec 16, 2009 6:39 pm
Location: Cary, NC

Re: Heikin-Ashi Smoothed

Postby kitar01 » Fri May 13, 2011 9:49 am

all ok but this indicator cancel all the candles and do not allow to watch both...
kitar01
 
Posts: 2
Joined: Fri May 13, 2011 9:33 am

Re: Heikin-Ashi Smoothed

Postby kitar01 » Fri May 13, 2011 9:56 am

ok it is working.
would be better if we can have a separated colour option...
thank you
kitar01
 
Posts: 2
Joined: Fri May 13, 2011 9:33 am

Re: Heikin-Ashi Smoothed

Postby Apprentice » Fri May 13, 2011 11:26 am

Color option added.
HASM.lua
(5.88 KiB) Downloaded 2416 times
User avatar
Apprentice
FXCodeBase: Confirmed User
 
Posts: 17510
Joined: Thu Dec 31, 2009 11:59 am
Location: Zagreb, Croatia

Re: Heikin-Ashi Smoothed

Postby lisa_baby_xx » Mon May 16, 2011 4:03 am

Hi,

I have only yesterday discoverd the joy of the Heikin-Ashi Smoothed Indicator.

:?: Is there a signal available for this type of indicator? One that signals when the bars change colour?

Many thanks and much love. XX
lisa_baby_xx
lisa_baby_xx
 
Posts: 76
Joined: Sun Apr 17, 2011 5:37 am

Re: Heikin-Ashi Smoothed

Postby Apprentice » Mon May 16, 2011 5:22 am

Signal that you seek is available here.
viewtopic.php?f=29&t=2344&p=5013&hilit=Heikin+Ashi#p5013
User avatar
Apprentice
FXCodeBase: Confirmed User
 
Posts: 17510
Joined: Thu Dec 31, 2009 11:59 am
Location: Zagreb, Croatia

Re: Heikin-Ashi Smoothed

Postby lisa_baby_xx » Mon May 16, 2011 5:24 am

Thanks sweetie. XX. ;)

lisa_baby_xx
lisa_baby_xx
 
Posts: 76
Joined: Sun Apr 17, 2011 5:37 am

Re: Heikin-Ashi Smoothed

Postby Platinum » Wed Jul 06, 2011 1:48 pm

Hi,

I love this indicator. Can anyone please explain wht MVA is?

I would like to program this indcator into excel Can anyone please help me with the formula? Any help would be greatly appreciated.

Many Thanks
Platinum
 
Posts: 1
Joined: Wed Jul 06, 2011 1:45 pm

Next

Return to Custom Indicators

Who is online

Users browsing this forum: Bing [Bot] and 12 guests