vampiricaura Posted October 9, 2011 Report Posted October 9, 2011 Hi can somebody please convert this great indi code into mql4? Thanks in advance. Here is the code.... -- Indicator profile initialization routine -- Defines indicator profile properties and indicator parameters function Init() indicator:name("Hodrick-Prescott Filter"); indicator:description("Hodrick-Prescott Filter"); indicator:requiredSource(core.Bar); indicator:type(core.Indicator); indicator.parameters:addGroup("Calculation"); indicator.parameters:addInteger("Filter", "HP Filter Period", "", 50); indicator.parameters:addInteger("Bars", "Max Bars to calculate", "", 300, 100, 1000); indicator.parameters:addGroup("Style"); indicator.parameters:addColor("HPF_color", "Color of HPF", "Color of HPF", core.rgb(255, 0, 0)); indicator.parameters:addInteger("width", "Line Width", "", 1, 1, 5); indicator.parameters:addInteger("style", "DEMA Line Style", "", core.LINE_SOLID); indicator.parameters:setFlag("style", core.FLAG_LEVEL_STYLE); end -- Indicator instance initialization routine -- Processes indicator parameters and creates output streams -- Parameters block local bars; local first; local source = nil; local HPF = nil; local lambda; -- Routine function Prepare() Filter = instance.parameters.Filter; bars = instance.parameters.Bars; source = instance.source; first = source:first(); lambda = 0.0625 / (math.sin(3.14159265 / Filter) ^ 4); local name = profile:id() .. "(" .. source:name() .. "," .. Filter .. "," .. bars .. ")"; instance:name(name); assert(source:first() == 0, "The indicator can be applied on the price data only"); HPF = instance:addStream("HPF", core.Line, name, "HPF", instance.parameters.HPF_color, 0, -1); HPF:setWidth(instance.parameters.width); HPF:setStyle(instance.parameters.style); end local last = nil; local last_period = 0; function Update(period, mode) if last_period > period then last = nil; end last_period = period; -- update only on the last period and only once per bar if period == source:size() - 1 and period > 6 and (last == nil or last ~= source:serial(period)) then HPFF(period - 1, math.min(period - 1, bars)); last = source:serial(period); end end function HPFF(N, max) local i; local h1 = 0; local h2 = 0; local h3 = 0; local h4 = 0; local h5 = 0; local hh1 = 0; local hh2 = 0; local hh3 = 0; local hh5 = 0; local hb = 0; local hc = 0; local z = 0; local a, b, c; local close = source.close; local ifirst; ifirst = N - max + 1; a = {}; b = {}; c = {}; a[1] = 1 + lambda; b[1] = -2 * lambda; c[1] = lambda; for i = 2, max - 2, 1 do a = 6 * lambda + 1; b = -4 * lambda; c = lambda; end a[2] = 5 * lambda + 1; a[max - 1] = 5 * lambda + 1; a[max] = 1 + lambda; b[max - 1] = -2 * lambda; b[max] = 0; c[max - 1] = 0; c[max] = 0; for i = 1, max, 1 do z = a - h4 * h1 - hh5 * hh2; hb = b; hh1 = h1; if z ~= 0 then h1 = (hb - h4 * h2) / z; end b = h1; hc = c; hh2 = h2; if z ~= 0 then h2 = hc / z; end c = h2; if z ~= 0 then a = (close[ifirst + i - 1] - hh3 * hh5 - h3 * h4) / z; end hh3 = h3; h3 = a; h4 = hb - h5 * hh1; hh5 = h5; h5 = hc; end h2 = 0; h1 = a[1]; local j; for i = max, 1, -1 do j = ifirst + i - 1; HPF[j] = a - b * h1 - c * h2; h2 = h1; h1 = HPF[j]; end core.eraseStream(HPF, core.range(0, ifirst - 1)); end
iwjw Posted October 9, 2011 Report Posted October 9, 2011 https://rs916l33.rapidshare.com/#!download|916tg|406881910|hp_window.zip|1|R~0962F2B084CFF9F92EE7D5F6A752FF7E|0|0 taipan and vampiricaura 2
vampiricaura Posted October 10, 2011 Author Report Posted October 10, 2011 https://rs916l33.rapidshare.com/#!download|916tg|406881910|hp_window.zip|1|R~0962F2B084CFF9F92EE7D5F6A752FF7E|0|0 Thanks a lot bro taipan 1
iwjw Posted October 10, 2011 Report Posted October 10, 2011 Thanks a lot bro you're welcome Can you tell me how to trade with this indi?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now