**Instantaneous
Trendline and Sinewave Indicator**
**by John Ehlers **
Here is the MetaStock 6.52 or higher formula code for the
Instantaneous Trendline and Sinewave Indicator as described
by John Ehlers in his article “At Last! A Trend-Friendly
Oscillator”. To implement them the following formulas
must be created in MetaStock’s Indicator Builder.
Each formula must be created separately and must be named
exactly as it appears below. Only the last two formulas
are plotted, so you may wish to prevent the others from
being displayed in the Indicator QuickList by unchecking
the “Display In QuickList” option when creating
the formula.
To download and install the formulas use the following steps
Download the MS65FORM.DTA file into a temp folder
To Download the file for this formula click MS65FORM.DTA
Use the following instructions to Import the MS65FORM.DTA
file from the temp file it was downloaded to.
1. Run MetaStock.
2. Choose Indicator Builder from the Tools menu.
3. Click the Organize button to launch the Formula Organizer
Wizard.
4. Follow the on-screen instructions.
Name: H cycle count 1a
value:= Fml("Hilbert cycle period - 1a");
If(Sum(value,6)>=360 AND Sum(value,5)<360 ,6,0) +
If(Sum(value,7)>=360 AND Sum(value,6)<360 ,7,0) +
If(Sum(value,8)>=360 AND Sum(value,7)<360 ,8,0) +
If(Sum(value,9)>=360 AND Sum(value,8)<360 ,9,0) +
If(Sum(value,10)>=360 AND Sum(value,9)<360 ,10,0)
+
If(Sum(value,11)>=360 AND Sum(value,10)<360 ,11,0)
+
If(Sum(value,12)>=360 AND Sum(value,11)<360 ,12,0)
+
If(Sum(value,13)>=360 AND Sum(value,12)<360 ,13,0)
+
If(Sum(value,14)>=360 AND Sum(value,13)<360 ,14,0)
+
If(Sum(value,15)>=360 AND Sum(value,14)<360 ,15,0)
Name: H cycle count 2a
value:= Fml("Hilbert cycle period - 1a");
If(Sum(value,16)>=360 AND Sum(value,15)<360 ,16,0)
+
If(Sum(value,17)>=360 AND Sum(value,16)<360 ,17,0)
+
If(Sum(value,18)>=360 AND Sum(value,17)<360 ,18,0)
+
If(Sum(value,19)>=360 AND Sum(value,18)<360 ,19,0)
+
If(Sum(value,20)>=360 AND Sum(value,19)<360 ,20,0)
+
If(Sum(value,21)>=360 AND Sum(value,20)<360 ,21,0)
+
If(Sum(value,22)>=360 AND Sum(value,21)<360 ,22,0)
+
If(Sum(value,23)>=360 AND Sum(value,22)<360 ,23,0)
+
If(Sum(value,24)>=360 AND Sum(value,23)<360 ,24,0)
+
If(Sum(value,25)>=360 AND Sum(value,24)<360 ,25,0)
Name: H cycle count 3a
value:= Fml("Hilbert cycle period - 1a");
If(Sum(value,26)>=360 AND Sum(value,25)<360 ,26,0)
+
If(Sum(value,27)>=360 AND Sum(value,26)<360 ,27,0)
+
If(Sum(value,28)>=360 AND Sum(value,27)<360 ,28,0)
+
If(Sum(value,29)>=360 AND Sum(value,28)<360 ,29,0)
+
If(Sum(value,30)>=360 AND Sum(value,29)<360 ,30,0)
+
If(Sum(value,31)>=360 AND Sum(value,30)<360 ,31,0)
+
If(Sum(value,32)>=360 AND Sum(value,31)<360 ,32,0)
+
If(Sum(value,33)>=360 AND Sum(value,32)<360 ,33,0)
+
If(Sum(value,34)>=360 AND Sum(value,33)<360 ,34,0)
+
If(Sum(value,35)>=360 AND Sum(value,34)<360 ,35,0)
Name: H ip sum 1
pd:=Int(Fml("Hilbert cycle period - final-a"));
pr:=(H+L)/2;
(Cos(0)*pr)+
(Cos(360*(1/pd))*Ref(pr,-1))+
(Cos(360*(2/pd))*Ref(pr,-2))+
(Cos(360*(3/pd))*Ref(pr,-3))+
(Cos(360*(4/pd))*Ref(pr,-4))+
(Cos(360*(5/pd))*Ref(pr,-5))+
If(pd>6, Cos(360*(6/pd))*Ref(pr,-6), 0)+
If(pd>7, Cos(360*(7/pd))*Ref(pr,-7), 0)+
If(pd>8, Cos(360*(8/pd))*Ref(pr,-8), 0)+
If(pd>9, Cos(360*(9/pd))*Ref(pr,-9), 0)+
If(pd>10, Cos(360*(10/pd))*Ref(pr,-10), 0)+
If(pd>11, Cos(360*(11/pd))*Ref(pr,-11), 0)+
If(pd>12, Cos(360*(12/pd))*Ref(pr,-12), 0)+
If(pd>13, Cos(360*(13/pd))*Ref(pr,-13), 0)+
If(pd>14, Cos(360*(14/pd))*Ref(pr,-14), 0)
Name: H ip sum 2
pd:=Int(Fml("Hilbert cycle period - final-a"));
pr:=(H+L)/2;
If(pd>15, Cos(360*(15/pd))*Ref(pr,-15), 0)+
If(pd>16, Cos(360*(16/pd))*Ref(pr,-16), 0)+
If(pd>17, Cos(360*(17/pd))*Ref(pr,-17), 0)+
If(pd>18, Cos(360*(18/pd))*Ref(pr,-18), 0)+
If(pd>19, Cos(360*(19/pd))*Ref(pr,-19), 0)+
If(pd>20, Cos(360*(20/pd))*Ref(pr,-20), 0)+
If(pd>21, Cos(360*(21/pd))*Ref(pr,-21), 0)+
If(pd>22, Cos(360*(22/pd))*Ref(pr,-22), 0)+
If(pd>23, Cos(360*(23/pd))*Ref(pr,-23), 0)+
If(pd>24, Cos(360*(24/pd))*Ref(pr,-24), 0)
Name: H ip sum 3
pd:=Int(Fml("Hilbert cycle period - final-a"));
pr:=(H+L)/2;
If(pd>25, Cos(360*(25/pd))*Ref(pr,-25), 0)+
If(pd>26, Cos(360*(26/pd))*Ref(pr,-26), 0)+
If(pd>27, Cos(360*(27/pd))*Ref(pr,-27), 0)+
If(pd>28, Cos(360*(28/pd))*Ref(pr,-28), 0)+
If(pd>29, Cos(360*(29/pd))*Ref(pr,-29), 0)+
If(pd>30, Cos(360*(30/pd))*Ref(pr,-30), 0)+
If(pd>31, Cos(360*(31/pd))*Ref(pr,-31), 0)+
If(pd>32, Cos(360*(32/pd))*Ref(pr,-32), 0)+
If(pd>33, Cos(360*(33/pd))*Ref(pr,-33), 0)+
If(pd>34, Cos(360*(34/pd))*Ref(pr,-34), 0)
Name: H rp sum 1
pd:=Int(Fml("Hilbert cycle period - final-a"));
pr:=(H+L)/2;
(Sin(0)*pr)+
(Sin(360*(1/pd))*Ref(pr,-1))+
(Sin(360*(2/pd))*Ref(pr,-2))+
(Sin(360*(3/pd))*Ref(pr,-3))+
(Sin(360*(4/pd))*Ref(pr,-4))+
(Sin(360*(5/pd))*Ref(pr,-5))+
If(pd>6, Sin(360*(6/pd))*Ref(pr,-6), 0)+
If(pd>7, Sin(360*(7/pd))*Ref(pr,-7), 0)+
If(pd>8, Sin(360*(8/pd))*Ref(pr,-8), 0)+
If(pd>9, Sin(360*(9/pd))*Ref(pr,-9), 0)+
If(pd>10, Sin(360*(10/pd))*Ref(pr,-10), 0)+
If(pd>11, Sin(360*(11/pd))*Ref(pr,-11), 0)+
If(pd>12, Sin(360*(12/pd))*Ref(pr,-12), 0)+
If(pd>13, Sin(360*(13/pd))*Ref(pr,-13), 0)+
If(pd>14, Sin(360*(14/pd))*Ref(pr,-14), 0)
Name: H rp sum 2
pd:=Int(Fml("Hilbert cycle period - final-a"));
pr:=(H+L)/2;
If(pd>15, Sin(360*(15/pd))*Ref(pr,-15), 0)+
If(pd>16, Sin(360*(16/pd))*Ref(pr,-16), 0)+
If(pd>17, Sin(360*(17/pd))*Ref(pr,-17), 0)+
If(pd>18, Sin(360*(18/pd))*Ref(pr,-18), 0)+
If(pd>19, Sin(360*(19/pd))*Ref(pr,-19), 0)+
If(pd>20, Sin(360*(20/pd))*Ref(pr,-20), 0)+
If(pd>21, Sin(360*(21/pd))*Ref(pr,-21), 0)+
If(pd>22, Sin(360*(22/pd))*Ref(pr,-22), 0)+
If(pd>23, Sin(360*(23/pd))*Ref(pr,-23), 0)+
If(pd>24, Sin(360*(24/pd))*Ref(pr,-24), 0)
Name: H rp sum 3
pd:=Int(Fml("Hilbert cycle period - final-a"));
pr:=(H+L)/2;
If(pd>25, Sin(360*(25/pd))*Ref(pr,-25), 0)+
If(pd>26, Sin(360*(26/pd))*Ref(pr,-26), 0)+
If(pd>27, Sin(360*(27/pd))*Ref(pr,-27), 0)+
If(pd>28, Sin(360*(28/pd))*Ref(pr,-28), 0)+
If(pd>29, Sin(360*(29/pd))*Ref(pr,-29), 0)+
If(pd>30, Sin(360*(30/pd))*Ref(pr,-30), 0)+
If(pd>31, Sin(360*(31/pd))*Ref(pr,-31), 0)+
If(pd>32, Sin(360*(32/pd))*Ref(pr,-32), 0)+
If(pd>33, Sin(360*(33/pd))*Ref(pr,-33), 0)+
If(pd>34, Sin(360*(34/pd))*Ref(pr,-34), 0)
Name: H TL sum 1
value:=Int(Fml("Hilbert cycle period - final-a"));
If(value=6, Mov((H+L)/2,8,S),0) +
If(value=7, Mov((H+L)/2,9,S),0) +
If(value=8, Mov((H+L)/2,10,S),0) +
If(value=9, Mov((H+L)/2,11,S),0) +
If(value=10, Mov((H+L)/2,12,S),0) +
If(value=11, Mov((H+L)/2,13,S),0) +
If(value=12, Mov((H+L)/2,14,S),0) +
If(value=13, Mov((H+L)/2,15,S),0) +
If(value=14, Mov((H+L)/2,16,S),0) +
If(value=15, Mov((H+L)/2,17,S),0)
Name: H TL sum 2
value:=Int(Fml("Hilbert cycle period - final-a"));
If(value=16, Mov((H+L)/2,18,S),0) +
If(value=17, Mov((H+L)/2,19,S),0) +
If(value=18, Mov((H+L)/2,20,S),0) +
If(value=19, Mov((H+L)/2,21,S),0) +
If(value=20, Mov((H+L)/2,22,S),0) +
If(value=21, Mov((H+L)/2,23,S),0) +
If(value=22, Mov((H+L)/2,24,S),0) +
If(value=23, Mov((H+L)/2,25,S),0) +
If(value=24, Mov((H+L)/2,26,S),0) +
If(value=25, Mov((H+L)/2,27,S),0)
Name: H TL sum 3
value:=Int(Fml("Hilbert cycle period - final-a"));
If(value=26, Mov((H+L)/2,28,S),0) +
If(value=27, Mov((H+L)/2,29,S),0) +
If(value=28, Mov((H+L)/2,30,S),0) +
If(value=29, Mov((H+L)/2,31,S),0) +
If(value=30, Mov((H+L)/2,32,S),0) +
If(value=31, Mov((H+L)/2,33,S),0) +
If(value=32, Mov((H+L)/2,34,S),0) +
If(value=33, Mov((H+L)/2,35,S),0) +
If(value=34, Mov((H+L)/2,36,S),0) +
If(value=35, Mov((H+L)/2,37,S),0)
Name: Hilbert cycle period - 1a
value1:=((H+L)/2) - Ref(((H+L)/2),-6);
value2:= Ref(value1,-3);
value3:=0.75*(value1-Ref(value1,-6)) + 0.25*(Ref(value1,-2)-Ref(value1,-4));
inphase:= 0.33 * value2 + (0.67 * PREV);
quad:= 0.2 * value3 + ( 0.8 * PREV);
p1:=Atan(Abs(quad+Ref(quad,-1)),Abs(inphase+Ref(inphase,-1)));
phase:=If(inphase<0 AND quad>0, 180-p1,
If(inphase<0 AND quad<0, 180+p1,
If(inphase>0 AND quad<0, 360-p1,p1)));
dp:=If(Ref(phase,-1)<90 AND phase>270, 360+Ref(phase,-1)-phase,Ref(phase,-1)-phase);
dp2:=If(dp < 1, 1,
If(dp > 60, 60, dp));
dp2
Name: Hilbert cycle period - final-a
c1:= Fml( "H cycle count 1a") + Fml( "H cycle count 2a")
+ Fml( "H cycle count 3a") ;
c2:=If(c1=0,PREV,c1);
(0.25*c2) + (0.75*PREV)
Name: Instantaneous Trend Line
pr:=(H+L)/2;
(Fml("H TL sum 1") + Fml("H TL sum 2") + Fml("H TL sum 3"));
0.33*(pr + (0.5*(pr-Ref(pr,-3)))) + (0.67*PREV)
Name: Sinewave Indicator
pd:=Int(Fml("Hilbert cycle period - final-a"));
cp:=Fml("Hilbert cycle period - final-a");
ip:=Fml( "H ip sum 1") + Fml( "H ip sum 2") +
Fml( "H ip sum 3");
rp:=Fml( "H rp sum 1") + Fml( "H rp sum 2") +
Fml( "H rp sum 3");
dc1:=If(Abs(ip)>0.001, Atan(rp/ip,1), 90*If(rp>=0,1,-1));
dc2:=If(pd<30 AND cp>0,dc1+((6.818/cp - 0.227)*360),dc1);
dc3:=If(ip<0, dc2+270, dc2+90);
dcp:=If(dc3>315, dc3-360, dc3);
Sin(dcp);
Sin(dcp+45)
(Go
Top) |

**INSYNC
Index**
The formula from Equis: Insync Index (rev. 01/06/97)
The interpretation for the following formulas came from
the article "The Insync Index", by Norm North, in Technical
Analysis of Stocks & Commodities Jan 1995.
All of these formulas are necessary for the last one, Insync
Index to run properly. They are listed in the order in which
they should be copied and pasted into the MetaStock Formula
Builder
BOLInSLB
Mov( C ,20 ,S ) - 2 * ( Std( C ,20 ) )
BOLInSUB
Mov( C ,20 ,S ) + 2 * ( Std( C ,20 ) )
BOLInS2
( C - Fml( "BOLInSLB" ) ) / ( Fml( "BOLInSUB" ) - Fml( "BOLInSLB"
) )
BOLInSLL
If( Fml( "BOLInS2" ) ,< , .05 ,-5 ,If( Fml( "BOLInS2"
) ,> ,.95 ,5 ,0 ) )
CCIInS
If( CCI(14 ) ,> ,100 ,5 ,If ( CCI(14 ) ,< ,-100 ,-5
,0 ) )
EMVInS2
EMV(10 ,S ) - Mov( EMV(10 ,S) ,10 ,S )
EMVInSB
If( Fml( "EMVInS2" ) ,< ,0 ,If( Mov( EMV(10 ,S ) ,10
,S ) ,< ,0 ,-5 ,0 ) ,0 )
EMVInSS
If( Fml( "EMVInS2" ) ,> ,0 ,If( Mov( EMV(10 ,S ) ,10
,S ) ,> ,0 ,5 ,0 ) ,0 )
MACDInS2
MACD( ) - Mov( MACD( ) ,10 ,S )
MACDinSB
If( Fml( "MACDInS2" ) ,< ,0 ,If( Mov( MACD( ) ,10 ,S
) ,< ,0 ,-5 ,0 ) ,0 )
MACDInSS
If( Fml( "MACDInS2" ) ,> ,0 ,If( Mov( MACD( ) ,10 ,S)
,> ,0 ,5 ,0 ) ,0 )
MFIInS
If( MFI( 20 ) ,> ,80 ,5 , If( MFI( 20 ) ,< ,20 ,-5
,0 ) )
PDOInS2
DPO( 18 ) - Mov( DPO( 18 ) ,10 ,S )
PDOInSB
If( Fml( "PDOInS2" ) ,< ,0 ,If( Mov( DPO( 18 ) ,10 ,
S) ,< ,0 ,-5 ,0 ) ,0 )
PDOInSS
If( Fml( "PDOInS2" ) ,> ,0 ,If( Mov( DPO ( 18 ) ,10 ,S)
,> ,0 ,5 ,0 ) ,0 )
ROCInS2
ROC( C ,10 ,$ ) - Mov( ROC( C ,10 ,$ ) ,10 ,S )
ROCInSB
If( Fml( "ROCInS2" ) ,< ,0 ,If( Mov( ROC( C ,10 ,$ )
,10 ,S ) ,< ,0 ,-5 ,0 ) ,0 )
ROCInSS Index
If( Fml( "ROCInS2" ) ,> ,0 ,If( Mov( ROC( C ,10 ,$ )
,10 ,S ) ,> ,0 ,5 ,0 ) ,0 )
RSIInS
If( RSI(14 ) ,> ,70 ,5 ,If( RSI(14 ), < ,30 ,-5 ,0
) )
STO%dInS
If( Stoch(14 ,3 ) ,> ,80 ,5 ,If( Stoch(14 ,3 ) ,<
,20 ,-5 ,0 ) )
STO%kInS
If( Stoch(14 ,1) ,> ,80 ,5 ,If( Stoch(14 ,1 ) ,< ,20
,-5 ,0 ) )
InSync Index
50 + Fml( "CCIInS" ) + Fml( "BOLInSLL" ) + Fml( "RSIInS"
) + Fml( "STO%kInS " ) +
Fml( "STO%dInS" ) + Fml( "MFIInS"
) + Fml( "EMVInSB" ) + Fml( "EMVInSS" ) +
Fml( "ROCInSS"
) + Fml( "ROCInSB" ) + Ref (Fml( "PDOInSS" ) ,-10 ) +
Ref
(Fml( "PDOInSB" ) ,-10 ) + Fml( "MACDInS S" ) + Fml( "MACDInSB"
)
*These formulas were provided by Barry Millman. All questions
should be addressed to him at [email protected]*
Mr. Millman wrote these formulas using many Custom Formula
slots for clarity and ease of understanding. Please note
that the final formula `InSync Index' requires all of the
previous formulas to be correct.
(Go
Top) |