MetaStock -> Tools -> Indicator Builder -> New -> Copy and paste formulae below. ==================== Normalized Indicator ==================== ---8<--------------------------- { Normalizes indicator to 0~100% boundaries } { From: http://www.metastocktools.com } { User inputs } plot:=Input("plot: [1]Indicator, [2]Oscillator",1,2,2); pds:=Input("Indicator periods",1,2600,21); { Indicator - EMA example } Ind:=Mov(C,pds,E); { Normalize indicator to historical highs/lows } Oscillator:=(Ind-Lowest(Ind)) /Max(Highest(Ind)-Lowest(Ind),.000001)*100; { Plot: Indicator on chart, oscillator in own window } If(plot=1,Ind,Oscillator) ---8<--------------------------- I often get asked something along this line of thinking: "My price chart is out of scale when I apply the MACD to it - how can I get MACD()/price crossover signals?" Before we can apply any relative comparisons between a chart and unscaled indicator, both plots need to be normalized to a common scale. There are two easy ways to normalize plots to 0~100%: using historical High/Lows, or x periods' High/Low: =============================== Normalization - Price/Indicator =============================== ---8<-------------------------- { Normalizes two data array plots to within 0~100% boundaries, and allows direct comparisons between the two plots. } {©Copyright 2004 Jose Silva For personal use only. http://www.metastocktools.com } { Choose between normalizing lookback periods or historical High/Low normalization } pds:=Input("Normalizing lookback periods (1= historical Hi/Lo)",1,2600,126); { Plot 1: Price section } PriceX:=C; { Choose x pds or historical Price High/Low } Hi:=If(pds>1,HHV(PriceX,pds),Highest(PriceX)); Lo:=If(pds>1,LLV(PriceX,pds),Lowest(PriceX)); { Price normalized to 0~100% } PriceNorm:=(PriceX-Lo)/Max(Hi-Lo,.000001)*100; { Plot 2: Indicator/Oscillator section } IndX:=MACD(); { Choose x pds or historical Indicator High/Low} Hi:=If(pds>1,HHV(IndX,pds),Highest(IndX)); Lo:=If(pds>1,LLV(IndX,pds),Lowest(IndX)); { Indicator normalized to 0~100% } IndicatorNorm:=(IndX-Lo)/Max(Hi-Lo,.000001)*100; { Plot in own window } PriceNorm;IndicatorNorm ---8<-------------------------- ========== Normalizer ========== ---8<-------------------------- { Plot normalizer v1.0 Normalize any plot to specific limits. http://www.metastocktools.com } { Indicator inputs } nuMax:=Input("Normalization Upper limit",-999999,999999,100); nuMin:=Input("Normalization Lower limit",-999999,999999,-100); { Data array or formula } x:=MACD(); { Normalize to historical High/Low } norm:=nuMin+(nuMax-nuMin)*(x-Lowest(x)) /Max(Highest(x)-Lowest(x),.000001); { Plot in own window } norm ---8<-------------------------- http://www.metastocktools.com