MetaStock™ Zone Forum & FAQ Artykuły Linki Elliott Waves EasyLanguage™ Zone

A B C D E F G H I J K L M N O P R S T U V W Y Z #

Moving Average - Phased by Jose Silva

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: spr_boy <no_reply[at]yahoogroups.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Thursday, January 11, 2007, 1:33:55 PM
Subject: [EquisMetaStock Group] JMA in AB syntax
Files: Wiad.html

I found jurik formula for Amibroker but I dunno how to translate this formula into MS. Hopefully someone in this forum is willing to share a bit of his or her knowledge in coding

function JMA( array, per )
{
TN1=MA(array,per);
s1=0;
for( i = 0; i < per; i=i+1 )
{
s1=s1+((per-(2*i)-1)/2)*Ref(array,-i);
}
return TN1+(((per/2)+1)*S1)/((per+1)*per);
}
k=Param("Period",15,1,100,1);
J=JMA(C,k);

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Ed Hoopes <reefbreak_sd[at]yahoo.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Friday, January 12, 2007, 6:26:53 AM
Subject: [EquisMetaStock Group] Re: JMA in AB syntax

Conceptually, this code is similar to the Zero Lag moving average which IS simple enough for MS-FL and available at several sites.

I don't think the AB JMA code can be done in MS-FL because of the lack of looping.

The TN1 array is easy enough - just a simple moving average of the closing price over 'per' bars.

s1 is a variable whose value is determined by looping over the 'per' number of periods. you would need to create a .dll with some external language like 'C' or whatever to compute s1.

the s1 value is then added to the TN1 moving average to create the Jurik moving average in the 'return' line.

The 'function' is present so that it can be repeatedly called from different spots in a larger routine, passing what ever 'array' and 'per' that is required.

Finally, the 'param' statement allows you to adjust the number of 'per's after the chart is displayed.

ReefBreak

PS
From comments I've read about this AB code, it is not EXACTLY the Jurik moving average, just an approximation.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Mark Jurik <mark_yahoo_equismetastock[at]jurikres.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Friday, January 12, 2007, 7:36:22 AM
Subject: [EquisMetaStock Group] Re: JMA in AB syntax


The code is simply a combination of a simple moving average and one way of approximating overall slope:

Result = SMA + slope

You can get the desired slope calc in MS by using the built-in linear regression slope function. This way, ...

Result = mov( data array, periods, simple )
+
linregslope( data array, periods ) * scaling_factor

You set the scaling factor as in input parameter, which allows you to adjust the amount of lag reduction. This approach to achieving low lag smoothing is NOT adaptive and has a significant overshoot penalty in proportion to the amount of lag reduction you request.

This formula poorly approximates JMA, which is adaptive, non-linear and has better lag/overshoot tradeoff properties. If you want the real thing, go to http://www.jurikres.com .

Mark Jurik
Jurik Research

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Ed Hoopes <reefbreak_sd[at]yahoo.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Friday, January 12, 2007, 5:13:01 PM
Subject: [EquisMetaStock Group] Re: JMA in AB syntax


Mark, I have also found that adding variable smoothing does help things - sometimes considerably. Even MS has a volatility based adjustable moving average with the VAR switch in the 'mov' function. But, as I'm sure you know, there are many ways to do the adjustments.

ReefBreak

PS
The formula MS gives for VAR in the user guide(p473) is wrong (as of Ver9) better go to the source in TASC.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Jose Silva <josesilva22[at]yahoo.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Friday, January 12, 2007, 5:00:58 PM
Subject: [EquisMetaStock Group] JMA approximation for MetaStock


The Metastock code below is based on Mark Jurik's post, and in no way is it meant to replace the original JMA available from http://www.jurikres.com .

MetaStock -> Tools -> Indicator Builder -> New
-> copy & paste complete formula between "---8<---" lines.

==========
MA - Jurik
==========
---8<-------------------------------------------

{ Non-adaptive approximation of Mark Jurik's JMA
available from http://www.jurikres.com - v1.0

CCopyright 2007 Jose Silva.
For personal use only.
http://www.metastocktools.com }

{ User inputs }
pds:=Input("JMA periods",1,2600,21);
factor:=Input("Lag reduction scaling factor [-1 = Auto]",-1,1000,-1);
x:=Input("use [1]Open [2]High [3]Low [4]Close [5]WCl [6]Vol",1,6,4);
type:=Input("[1]EMA [2]SMA [3]TmSr [4]Tri [5]Var [6]Vol [7]Wght",1,7,2);
shift:=Input("JMA bands spread %",0,100,5)/100;
plot:=Input("[1]JMA, [2]JMA+Bands, [3]Band crossover Signals",1,3,1);

{ Data array }
x:=If(x=1,O,
If(x=2,H,
If(x=3,L,
If(x=4,C,
If(x=5,WC(),
V)))));

{ MovAvg type:
1 - Exponential MA
2 - Simple MA
3 - Time Series MA
4 - Triangular MA
5 - Variable MA
6 - Volume adjusted MA
7 - Weighted MA }
ma:=
If(type=1,Mov(x,pds,E),
If(type=2,Mov(x,pds,S),
If(type=3,Mov(x,pds,T),
If(type=4,Mov(x,pds,TRI),
If(type=5,Mov(x,pds,VAR),
If(type=6,Mov(x,pds,VOL),
Mov(x,pds,W)))))));

{ JMA approximation }
factor:=If(factor>=0,factor,pds/4);
JMA:=(ma+LinRegSlope(x,pds)*factor);

{ JMA % bands }
upper:=JMA*(1+shift);
lower:=JMA*(1-shift);

{ JMA bands crossover signals }
entry:=Cross(C,upper);
exit:=Cross(lower,C);

{ Clean signals }
init:=Cum(IsDefined(entry+exit))=1;
bin:=ValueWhen(1,entry-exit<>0 OR init,entry);
long:=bin*(Alert(bin=0,2)
OR entry*Cum(entry)=1);
short:=(bin=0)*(Alert(bin,2)
OR exit*Cum(exit)=1);
signals:=long-short;

{Plot JMA on price chart, signals in own window}
If(plot=1,JMA,If(plot=2,upper,0));
If(plot=1,JMA,If(plot=2,lower,0));
If(plot=3,signals,JMA)

---8<-------------------------------------------

jose '-)
http://www.metastocktools.com

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Jose Silva <josesilva22[at]yahoo.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Tuesday, January 16, 2007, 12:13:31 AM
Subject: [EquisMetaStock Group] Phased MA for MetaStock

My last posted code may have generated some confusion - better to change "JMA" for "PMA" just in case some of these good people get upset:

JMA Inc.
JMA Forensics
JMA Groups
JMA Graphics
JMA Software
JMA Legal
JMA Consulting
JMA Engineering
Japan Medical Association
Japan Meteorological Agency
Japan Management Association
Japan Marketing Association
Jamaica Manufacturers' Association
John Mitchell & Associates
Jurik Moving Average

MetaStock -> Tools -> Indicator Builder -> New
-> copy & paste complete formula


Moving Average -Phased

{ PMA v1.0 -- Phased Moving Average.
As suggested by Mark Jurik of Jurik Research,
http://www.jurikres.com

CCopyright 2007 Jose Silva.
For personal use only.
http://www.metastocktools.com }

{ User inputs }
pds:=Input("PMA periods",1,2600,21);
factor:=Input("Lag reduction scaling factor [-1 = Auto]",-1,1000,-1);
x:=Input("use [1]Open [2]High [3]Low [4]Close [5]WCl [6]Vol",1,6,4);
type:=Input("[1]EMA [2]SMA [3]TmSr [4]Tri [5]Var [6]Vol [7]Wght",1,7,2);
shift:=Input("PMA bands spread %",0,100,5)/100;
plot:=Input("[1]PMA, [2]PMA+Bands, [3]Band crossover Signals",1,3,1);

{ Data array }
x:=If(x=1,O,
If(x=2,H,
If(x=3,L,
If(x=4,C,
If(x=5,WC(),
V)))));

{ MovAvg type:
1 - Exponential MA
2 - Simple MA
3 - Time Series MA
4 - Triangular MA
5 - Variable MA
6 - Volume adjusted MA
7 - Weighted MA }
ma:=
If(type=1,Mov(x,pds,E),
If(type=2,Mov(x,pds,S),
If(type=3,Mov(x,pds,T),
If(type=4,Mov(x,pds,TRI),
If(type=5,Mov(x,pds,VAR),
If(type=6,Mov(x,pds,VOL),
Mov(x,pds,W)))))));

{ PMA approximation }
factor:=If(factor>=0,factor,pds/4);
PMA:=(ma+LinRegSlope(x,pds)*factor);

{ PMA % bands }
upper:=PMA*(1+shift);
lower:=PMA*(1-shift);

{ PMA bands crossover signals }
entry:=Cross(C,upper);
exit:=Cross(lower,C);

{ Clean signals }
init:=Cum(IsDefined(entry+exit))=1;
bin:=ValueWhen(1,entry-exit<>0 OR init,entry);
long:=bin*(Alert(bin=0,2)
OR entry*Cum(entry)=1);
short:=(bin=0)*(Alert(bin,2)
OR exit*Cum(exit)=1);
signals:=long-short;

{Plot PMA on price chart, signals in own window}
If(plot=1,PMA,If(plot=2,upper,0));
If(plot=1,PMA,If(plot=2,lower,0));
If(plot=3,signals,PMA)

Moving_Average_Phased

jose
http://www.metastocktools.com

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Ron Berlin <rsb_44[at]hotmail.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Tuesday, January 16, 2007, 3:05:34 PM
Subject: [EquisMetaStock Group] Phased MA for MetaStock

Not sure that change is a good one.

Produce Marketing Association
Photo Marketing Association
Precision Metalforming Association
Pacific Maritime Association
Promotion Marketing Association
Pilates Method Alliance
Philippine Military Academy
Property Management Association

Just for a start...

;-)

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Lionel Issen <lissen[at]sbcglobal.net>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Tuesday, January 16, 2007, 5:41:51 PM
Subject: [EquisMetaStock Group] Phased MA for MetaStock

Really now, just consider the context in which a word/acronym appears.

Lionel

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: pumrysh <no_reply[at]yahoogroups.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Tuesday, January 16, 2007, 12:50:04 AM
Subject: [EquisMetaStock Group] Re: Phased MA for MetaStock

Or JMO for just my opinion.

Seriously, I tried the code and enjoyed the plot it gave. Thanks to you and Mark for the help with it. Kinda suprised that no one has jumped on making it adaptive though.

Preston

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: Jose Silva <josesilva22[at]yahoo.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Tuesday, January 16, 2007, 1:03:10 AM
Subject: [EquisMetaStock Group] Re: Phased MA for MetaStock


Hmmm... adaptive to what?

Actually, by default the PMA's "Lag reduction scaling factor" is adaptive to the MA's periodicity.

jose '-)
http://www.metastocktools.com

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From: pumrysh <no_reply[at]yahoogroups.com>
To: equismetastock[at]yahoogroups.com <equismetastock[at]yahoogroups.com>
Date: Tuesday, January 16, 2007, 5:38:21 AM
Subject: [EquisMetaStock Group] Re: Phased MA for MetaStock

My thoughts exactly! As of this point I haven't tried anything but was thinking of using some type of momentum oscillator.

Preston

Source / From: TOP
Metastockusers[at]yahoogroups[dot]com

Equis and MetaStock® and MetaStock Professional® are registered trademarks of Equis International. Achelis Binary Wave®, The DownLoader®,
Expert Advisor®, OptionScope®, Quotecenter® and Smart Charts® are trademarks of Equis International, a Thomson Reuters company.

TradeStation® Pro, TradeStation® 2000i, OptionStation®, SuperCharts®, PowerEditor® and EasyLanguage®
are registered trademarks of TradeStation Technologies, Inc. Other names and marks referred to are the property of their respective owners.

All information provided on this website is for educational purposes only. Trading involves risk, including possible loss of principal and other losses.

Ten i inne materiały na tej stronie zostały zamieszczone zostały jedynie w celach edukacyjnych, nie ponoszę żadnej odpowiedzialno¶ci za ich stosowanie.

Gra na giełdzie i rynkach walutowych (FOREX) niesie ze sob± ryzyko poważnych strat finansowych!