You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Is there anybody who can write the latest Ehlers indicator from Tradestation to MQL4?
Thanks!
http://www.traders.com/Documentation/FEEDbk_docs/TradersTips/TradersTips.html
Strategy: EhlerBandPassStrat
inputs:
Price( MedianPrice ) ;
variables:
alpha1( 0 ),
alpha1Plus1( 0 ),
Log10( 0 ),
HP( 0 ),
SmoothHP( 0 ),
EhlersDelta( 0.1 ),
EhlersBeta( 0 ),
Cos720Delta( 0 ),
EhlersGamma( 0 ),
alpha( 0 ),
OneMinusAlpha( 0 ),
OnePlusAlpha( 0 ),
N( 0 ),
TwoPi( 6.2831854 ),
MaxAmpl( 0 ),
Num( 0 ),
Denom( 0 ),
DC( 0 ),
DomCyc( 0 ),
Cos720DeltaDom( 0 ),
SineLine( 0 ),
CosineLine( 0 ) ;
arrays:
EhlersI[50]( 0 ),
OldI[50]( 0 ),
OlderI[50]( 0 ),
Q[50]( 0 ),
OldQ[50]( 0 ),
OlderQ[50]( 0 ),
Real[50]( 0 ),
OldReal[50]( 0 ),
OlderReal[50]( 0 ),
Imag[50]( 0 ),
OldImag[50]( 0 ),
OlderImag[50]( 0 ),
Ampl[50]( 0 ),
OldAmpl[50]( 0 ),
DB[50]( 0 ) ;
if CurrentBar = 1 then
begin
{ 360 / 40 = 9 }
alpha1 = ( 1 - Sine( 9 ) ) / Cosine( 9 ) ;
alpha1Plus1 = alpha1 + 1 ;
Log10 = Log( 10 ) ;
end ;
HP = 0.5 * alpha1Plus1 * ( Price - Price[1] ) +
alpha1 * HP[1] ;
SmoothHP = ( HP + 2 * HP[1] + 3 * HP[2] + 3 * HP[3] +
2 * HP[4] + HP[5] ) / 12 ;
if CurrentBar = 1 then
SmoothHP = 0
else if CurrentBar < 7 then
SmoothHP = Price - Price[1] ;
EhlersDelta = -0.015 * CurrentBar + 0.5 ;
EhlersDelta = MaxList( 0.15, EhlersDelta ) ;
if CurrentBar > 6 then
begin
for N = 8 to 50
begin
EhlersBeta = Cosine( 360 / N ) ;
Cos720Delta = Cosine( 720 * EhlersDelta / N ) ;
if Cos720Delta <> 0 then
EhlersGamma = 1 / Cos720Delta ;
alpha = EhlersGamma -
SquareRoot( Square( EhlersGamma ) - 1 ) ;
OneMinusAlpha = 1 - alpha ;
OnePlusAlpha = 1 + alpha ;
Q[N] = ( N / TwoPi ) * ( SmoothHP -
SmoothHP[1] ) ;
EhlersI[N] = SmoothHP ;
Real[N] = 0.5 * OneMinusAlpha * ( EhlersI[N] -
OlderI[N] ) + EhlersBeta * OnePlusAlpha *
OldReal[N] - alpha * OlderReal[N] ;
Imag[N] = 0.5 * OneMinusAlpha * ( Q[N] -
OlderQ[N] ) + EhlersBeta * OnePlusAlpha *
OldImag[N] - alpha * OlderImag[N] ;
Ampl[N] = ( Square( Real[N] ) +
Square( Imag[N] ) ) ;
end ;
end ;
for N = 8 to 50
begin
OlderI[N] = OldI[N] ;
OldI[N] = EhlersI[N] ;
OlderQ[N] = OldQ[N] ;
OldQ[N] = Q[N] ;
OlderReal[N] = OldReal[N] ;
OldReal[N] = Real[N] ;
OlderImag[N] = OldImag[N] ;
OldImag[N] = Imag[N] ;
OldAmpl[N] = Ampl[N] ;
end ;
MaxAmpl = Ampl[10] ;
for N = 8 to 50
begin
if Ampl[N] > MaxAmpl then
MaxAmpl = Ampl[N] ;
end ;
for N = 8 to 50
begin
if MaxAmpl <> 0 and ( Ampl[N] / MaxAmpl ) > 0 then
DB[N] = -10 * Log( 0.01 / ( 1 - .99 * Ampl[N] /
MaxAmpl ) ) / Log10 ;
if DB[N] > 20 then
DB[N] = 20 ;
end ;
Num = 0 ;
Denom = 0 ;
for N = 10 to 50
begin
if DB[N] <= 3 then
begin
Num = Num + N * ( 20 - DB[N] ) ;
Denom = Denom + ( 20 - DB[N] ) ;
end ;
if Denom <> 0 then
DC = Num / Denom ;
end ;
DomCyc = Median( DC, 10 ) ;
if DomCyc < 8 then
DomCyc = 20 ;
EhlersBeta = Cosine( 360 / DomCyc ) ;
Cos720DeltaDom = Cosine( 720 * EhlersDelta / DomCyc ) ;
if Cos720DeltaDom <> 0 then
EhlersGamma = 1 / Cos720DeltaDom ;
alpha = EhlersGamma - SquareRoot( Square( EhlersGamma )
- 1 ) ;
SineLine = 0.5 * ( 1 - alpha ) * ( SmoothHP -
IndicatorIndicator SmoothHP[1] ) + EhlersBeta * ( 1 + alpha ) *
SineLine[1] - alpha * SineLine[2] ;
CosineLine = ( DomCyc / TwoPi ) * ( SineLine -
SineLine[1] ) ;
if CurrentBar > 10 then
begin
if CosineLine crosses over SineLine then
Buy next bar market
else if CosineLine crosses under SineLine then
Sell short next bar at market ;
end ;