I have made an attempt at a strategy that combines John Ehlers Yet Another Improved RSI – RSIH & John Ehlers DMH – AN IMPROVED DIRECTIONAL MOVEMENT INDICATOR
Both of these indicators are coded by Bruno Carnazzi
What do you think. How can we make it better?
// Definition of code parameters
DEFPARAM CumulateOrders = False // Cumulating positions deactivated
//SnorreDK:s Stratetgy cobined of TASC DEC 2021 RSIH and DMH - Directional Movement using Hann Windowing
Sll = 1.3 // Stoploss long
SLs = 2 // Stoploss short
//Indicator: TASC DEC 2021 RSIH
// TASC JAN 2022
// RSIH - RSI with Hann Windowing
// (C) 2005-2021 John F. Ehlers
// Parameters
// Accumulate "Closes Up" and "Closes Down"
CU = 0
CD = 0
RSILength=14
for count = 1 to RSILength do
if Close[count - 1] - Close[count] > 0 then
CU = CU + (1 - cos(360*count / (RSILength + 1))) * (Close[count - 1] - Close[count])
endif
if Close[count] - Close[count - 1]> 0 then
CD = CD + (1 - cos(360*count / (RSILength + 1))) *(Close[count] - Close[count - 1])
endif
next
if CU + CD <> 0 then
MyRSI = (CU - CD) / (CU + CD)
endif
c2 = (MyRSI > 0.5)
c4 = (MyRSI < -0.7)
//--------------------------------
// DMH - Directional Movement using Hann Windowing
// (C) 2021 John F. Ehlers
// Parameters
Length= 14
// Vars
once DMH = 0
once EMA = 0
once SF = 1 / Length
if barindex > Length then
UpperMove = High - High[1]
LowerMove = Low[1] - Low
PlusDM = 0
MinusDM = 0
If UpperMove > LowerMove and UpperMove > 0 Then
PlusDM = UpperMove
ElsIf LowerMove > UpperMove and LowerMove > 0 Then
MinusDM = LowerMove
endif
EMA = SF*(PlusDM - MinusDM) + (1 - SF)* EMA[1]
//Smooth Directional Movements with Hann Windowed FIR filter
DMSum = 0
coef = 0
For count = 1 to Length do
DMSum = DMSum + (1 - cos(360*count / (Length + 1)))*EMA[count - 1]
coef = coef + (1 - cos(360*count / (Length + 1)))
next
If coef <> 0 Then
DMH = DMSum / coef
endif
endif
c1 = (DMH CROSSES OVER 0)
c3 = (DMH CROSSES under 0)
//------------------------------------
CB1 = C1 and C2
IF CB1 THEN
BUY 1 CONTRACT AT MARKET
SET STOP %LOSS SLl
ENDIF
CS1 = C3 and C4
IF CS1 THEN
SELLSHORT 1 CONTRACT AT MARKET
SET STOP %LOSS SLs
ENDIF
MS=0
TGL=10
TGS=6
TRP=14
// TRAILINGSTOP
//----------------------------------------------
atrtrail = averagetruerange[TRP]((close/10)*pipsize)/1000
trailingstartl = round(atrtrail*TGL)
trailingstarts = round(atrtrail*TGS)
if not onmarket or ((longonmarket and shortonmarket[1]) or (longonmarket[1] and shortonmarket)) then
maxprice = 0
minprice = close
exitprice = 0
endif
if longonmarket then
maxprice = max(maxprice,close)
if maxprice-tradeprice(1)>=trailingstartl*pointsize then
if maxprice-tradeprice(1)>=MS then
exitprice = maxprice-trailingstartl*pointsize
else
exitprice = maxprice - MS*pointsize
endif
endif
endif
if shortonmarket then
minprice = min(minprice,close)
if tradeprice(1)-minprice>=trailingstarts*pointsize then
if tradeprice(1)-minprice>=MS then
exitprice = minprice+trailingstarts*pointsize
else
exitprice = minprice + MS*pointsize
endif
endif
endif
if onmarket and exitprice>0 then
exitshort at exitprice stop
sell at exitprice stop
endif
Looks better on 10 min TF?
hmm? With same values? Not better for me. Would u like to show 1Munits backtest
Ah right, I knew there must be a reason?
I’m too old to use 1,000,000 bars … not got enough life left to wait for backtest to finish!!!! 🙂