## 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.

### Heikin-Ashi Smoothed

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

Transparent Heikin Ashi Smoothed.lua

MTF MCP Heikin-Ashi Smoothed.lua

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 (2).lua

A similar indicator can be found here.
viewtopic.php?f=17&t=63347&p=105655#p105655

The indicator was revised and updated
Nikolay.Gekht
FXCodeBase: Base Builder

Posts: 1222
Joined: Wed Dec 16, 2009 6:39 pm
Location: Cary, NC

### Re: Heikin-Ashi Smoothed

Hi Nikolay,

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

[upd by ng:]
HASM.lua

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);endlocal 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;-- Routinefunction 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 routinefunction 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]);    endend`
koyote44
FXCodeBase: Confirmed User

Posts: 2
Joined: Thu May 20, 2010 1:04 pm

### Re: Heikin-Ashi Smoothed

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

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

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

HASM.lua

Apprentice
FXCodeBase: Confirmed User

Posts: 19823
Joined: Thu Dec 31, 2009 11:59 am
Location: Zagreb, Croatia

### Re: Heikin-Ashi Smoothed

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

Signal that you seek is available here.
viewtopic.php?f=29&t=2344&p=5013&hilit=Heikin+Ashi#p5013

Apprentice
FXCodeBase: Confirmed User

Posts: 19823
Joined: Thu Dec 31, 2009 11:59 am
Location: Zagreb, Croatia

### Re: Heikin-Ashi Smoothed

Thanks sweetie. XX.

lisa_baby_xx
lisa_baby_xx

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

### Re: Heikin-Ashi Smoothed

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

### Who is online

Users browsing this forum: Bing [Bot], Google [Bot] and 28 guests