# Ehlers Deviation-Scaled Moving Average (TASC July 2018)  [SOLVED]

Questions about MultiCharts and user contributed studies.
LRP
Posts: 135
Joined: 07 Apr 2008
Location: Switzerland
Has thanked: 84 times
Been thanked: 12 times

### Ehlers Deviation-Scaled Moving Average (TASC July 2018)

Dear All

May I ask kindly MC-Support or the community for a PowerLanguage conversion of Traders Tip of TASC July 2018?

Code: Select all

```Function: EhlersDSMA // Deviation Scaled Moving Average (DSMA) // (c) 2013 - 2018 John F. Ehlers // TASC JUL 2018 // EhlersDSMA function using elsystem ; inputs: Period( numericsimple ) ; variables: a1( 0 ), b1( 0 ), c1( 0 ), c2( 0 ), c3( 0 ), Zeros( 0 ), Filt( 0 ), ScaledFilt( 0 ), RMS( 0 ), count( 0 ), alpha1( 0 ), DSMA( 0 ) ; once begin if Period <= 0 then throw Exception.Create( "The 'Period' input to the " + "EhlersDSMA function must be greater than 0." ) ; //Smooth with a Super Smoother a1 = ExpValue( -1.414 * 3.14159 / ( .5 * Period ) ) ; b1 = 2 * a1 * Cosine( 1.414 * 180 / ( .5 * Period ) ) ; c2 = b1 ; c3 = -a1 * a1 ; c1 = 1 - c2 - c3 ; end ; //Produce Nominal zero mean with zeros in the transfer //response at DC and Nyquist with no spectral distortion //Nominally whitens the spectrum because of 6 dB //per octave rolloff Zeros = Close - Close[2] ; //SuperSmoother Filter Filt = c1 * ( Zeros + Zeros[1] ) / 2 + c2 * Filt[1] + c3 * Filt[2] ; //Compute Standard Deviation RMS = 0; For count = 0 to Period - 1 begin RMS = RMS + Filt[count] * Filt[count] ; end ; RMS = SquareRoot( RMS / Period ) ; //Rescale Filt in terms of Standard Deviations If RMS <> 0 then ScaledFilt = Filt / RMS ; alpha1 = AbsValue( ScaledFilt ) * 5 / Period ; DSMA = alpha1 * Close + ( 1 - alpha1 ) * DSMA[1] ; EhlersDSMA = DSMA ; Indicator: DSMA // TASC JUL 2018 // Ehlers DSMA inputs: Period( 40 ) ; variables: DSMAValue( 0 ) ; DSMAValue = EhlersDSMA( Period ) ; Plot1( DSMAValue, "DSMA" ) ; if AlertEnabled then begin if Close crosses over DSMAValue then Alert( "Price crossing over DSMA" ) else if Close crosses under DSMAValue then Alert( "Price crossing under DSMA" ) ; end ; Strategy: DSMA // TASC JUL 2018 // Ehlers DSMA inputs: FastPeriod( 40 ), SlowPeriod( 100 ) ; variables: FastDSMAValue( 0 ), SlowDSMAValue( 0 ) ; FastDSMAValue = EhlersDSMA( FastPeriod ) ; SlowDSMAValue = EhlersDSMA( SlowPeriod ) ; if FastDSMAValue crosses above SlowDSMAValue then Buy next bar at Market else if FastDSMAValue crosses below SlowDSMAValue then SellShort next bar at Market ;```
@ MC-Support: It would be a great service for learning purposes, to provide to the Multicharts community examples of PowerLanguage code from the "Trader's Tips" of the very well known and established TASC Magazine.: http://technical.traders.com/content/ba ... rchive.asp with a large readership.

Tank you very much and
kind regards,
LRP
Last edited by LRP on 15 Mar 2019, edited 3 times in total.

ABC
Posts: 631
Joined: 16 Dec 2006
Has thanked: 119 times
Been thanked: 356 times
Contact:

### Re: Ehlers Deviation-Scaled Moving Average (TASC July 2018)  [SOLVED]

Hi LRP,

you should be able to get this code working in Multicharts by changing the conflicting (i.e. not recognized) reserved words/functionalty within the function. Indicator and strategy should work fine already.
1. Remove the using declaration near the top of the function code
2. Change throw Exception.Create to the corresponding PowerLanguage reserved words RaiseRunTimeError

That should do it.

Regards,

ABC

LRP
Posts: 135
Joined: 07 Apr 2008
Location: Switzerland
Has thanked: 84 times
Been thanked: 12 times

### Re: Ehlers Deviation-Scaled Moving Average (TASC July 2018)

Hi ABC,

Thank you very much for this great and fast hints, it works!

Is there a look-up table available, to convert different reserved words from EL to PL replacements with the same functions?

Kind regards,
LRP