Hi. I made a pretty solid strategy based on ADX, momentum and ema8.
I would like to share it with you guys to see what you think and I’m open to new improvements that you might think of.
The strategy is currently running in DAX 15 min, but I think it might be also good in other times and products.
Would be good to know how it works with 200k units backtest instead of 100k…
Hope you like it!
// Definición de los parámetros del código
DEFPARAM Preloadbars = 50000
DEFPARAM CumulateOrders = false // Acumulación de posiciones desactivada
// Horario semanal
noEntryBeforeTime = 100000 // No abrir ordenes antes de las 08:30h. Las que estuvieran abiertas continuan abiertas.
hora1 = TIME >= noEntryBeforeTime
noEntryAfterTime = 180000 // No abrir ordenes despues de las 21:30h. Las que estuvieran abiertas continuan abiertas.
hora2 = TIME < noEntryAfterTime
// Position Size
positionsize=1
//opentime= 080000
//Pa=open
//sololargos= close > Pa
//solocortos= close < Pa
// Condiciones para entrada de posiciones largas
EMA8= ExponentialAverage[8](close)
EMAL= (EMA8 < close)
EMAS= (EMA8 > close)
ponderada34 = weightedaverage[34](close)
EMALW= (ponderada34 < close)
EMASW= (ponderada34 > close)
ponderada150 = weightedaverage[150](close)
tema15 = tema[15](close)
EMA200= ExponentialAverage[200](close)
EMA200L= (EMA200 < close)
EMA200S= (EMA200 > close)
green = ponderada150>ponderada150[1]
red=ponderada150<ponderada150[1]
azul = tema15>tema15[1]
violeta = tema15<tema15[1]
TEMAL= (tema15 < close)
TEMAC= (tema15 > close)
//PONDERADAL= (ponderada150 <close)
//PONDERADAC= (ponderada150 >close)
OT=Momentum[6]
MF = ADX[6]
plus=DIplus[10](close)
minus=DIminus[10](close)
ad=ADX[10]
limadx = 18// minval=1, title="ADX MA Active"
willy=Williams[40](close)
toro= willy >-50
oso=willy<-50
STO8=stochastic[8,3]
STOL= STO8 > STO8[3]
STOS= STO8 < STO8[3]
sto8=stochastic[8,3]
//c25 = (indicator7 < close)
indicador4 = ADX[10]
plus=DIplus[10](close)
minus=DIminus[10](close)
ad=ADX[10]
limadx = 18// minval=1, title="ADX MA Active")
SET STOP pLOSS 30
SET TARGET pPROFIT 120
//c45=(indicador4 crosses over 15 and sto8 > sto8[3])//Saluci
c4= (indicador4 crosses over 17 and sto8 > sto8[3])// Buen camino
c8= (indicador4 crosses over 20 and sto8 > sto8[3])//Trade
c9= (indicador4 crosses over 22 and sto8 > sto8[3])//F2
c10= (indicador4 crosses over 24 and sto8 > sto8[3])//F4
c11= (indicador4 crosses over 26 and sto8 > sto8[3])//F6
c12= (indicador4 crosses over 28 and sto8 > sto8[3])//F8
c13= (indicador4 crosses over 30 and sto8 > sto8[3])//F30
//c14= (indicador4 crosses over 35 and sto8 > sto8[3])//F30
//c15= (indicador4 crosses over 40 and sto8 > sto8[3])//F30
c6 = (summation[2](EMAL[1]) = 2)// 2 cierres por encima de la ema8
c7 = high > high[1] // Maximo a la vela anterior
IF NOT LONGONMARKET and EMAL AND EMALW AND STOL AND EMA200L AND ad> limadx and plus> minus AND MF>=MF[1] and OT>OT[1] and toro and TEMAL and green and azul and C6 AND c7 and ( c4 or c8 or c9 or c10 or c11 or c12 or c13 ) AND hora1 AND hora2 THEN
BUY positionsize CONTRACT AT MARKET
ENDIF
// Condiciones para entrada de posiciones cortas
//c16 = (summation[2](EMAS[1]) = 2)
//c17 = low < low[1]
//c46=(indicador4 crosses over 15 and sto8 < sto8[3])
//c18= (indicador4 crosses over 17 and sto8 < sto8[3])
//c19= (indicador4 crosses over 20 and sto8 < sto8[3])
c20= (indicador4 crosses over 22 and sto8 < sto8[3])
c21= (indicador4 crosses over 24 and sto8 < sto8[3])
c22= (indicador4 crosses over 26 and sto8 < sto8[3])
//c23= (indicador4 crosses over 28 and sto8 < sto8[3])
//c24= (indicador4 crosses over 30 and sto8 < sto8[3])
//c25= (indicador4 crosses over 35 and sto8 < sto8[3])
//c26= (indicador4 crosses over 40 and sto8 < sto8[3])
IF NOT SHORTONMARKET AND EMAS AND EMASW AND STOS AND ad>limadx and EMA200S AND plus < minus AND MF>=MF[1] and OT<OT[1] and oso AND VIOLETA AND red AND TEMAC AND ( c20 or c21 or c22 ) AND hora1 AND hora2 THEN
SELLSHORT positionsize CONTRACT AT MARKET
ENDIF
// TRAILING //////////////////////////////////////////////////////////////////////////////////////////////////////////
startBreakeven1 =10
startBreakeven2 =15
startBreakeven3 =25
startBreakeven4 =35
startBreakeven5 =45
startBreakeven6 =55
startBreakeven7 =65
startBreakeven8 =75
startBreakeven9 =85
startBreakeven10 =95
startBreakeven11 =105
startBreakeven12 =115
startBreakeven13 =125
startBreakeven14 =135
startBreakeven15 =145
startBreakeven16 =155
startBreakeven17 =165
startBreakeven18 =175
startBreakeven19 =185
startBreakeven20 =195
startBreakeven21 =205
startBreakeven22 =215
startBreakeven23 =225
startBreakeven24 =235
startBreakeven25 =245
PointsToKeep1 =5
PointsToKeep2 =10
PointsToKeep3 =15
PointsToKeep4 =25
PointsToKeep5 =35
PointsTokeep6 =45
PointsTokeep7 =55
PointsTokeep8 =65
PointsTokeep9 =75
PointsTokeep10 =85
PointsTokeep11 =95
PointsTokeep12 =105
PointsTokeep13 =115
PointsTokeep14 =125
PointsTokeep15 =135
PointsTokeep16 =145
PointsTokeep17 =155
PointsTokeep18 =165
PointsTokeep19 =175
PointsTokeep20 =185
PointsTokeep21 =195
PointsTokeep22 =205
PointsTokeep23 =215
PointsTokeep24 =225
PointsTokeep25 =235
//reset the breakevenLevel when no trade are on market
IF NOT ONMARKET THEN
breakevenLevel=0
ENDIF
// LARGOS
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven1*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep1*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven2*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep2*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven3*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep3*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven4*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep4*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven5*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep5*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven6*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep6*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven7*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep7*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven8*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep8*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven9*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep9*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven10*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep10*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven11*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep11*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven12*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep12*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven13*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep13*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven14*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep14*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven15*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep15*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven16*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep16*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven17*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep17*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven18*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep18*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven19*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep19*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven20*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep20*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven21*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep21*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven22*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep22*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven23*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep23*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven24*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep24*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven25*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep25*pipsize
ENDIF
// CORTOS
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven1*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep1*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven2*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep2*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven3*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep3*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven4*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep4*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven5*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep5*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven6*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep6*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven7*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep7*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven8*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep8*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven9*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep9*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven10*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep10*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven11*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep11*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven12*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep12*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven13*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep13*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven14*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep14*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven15*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep15*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven16*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep16*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven17*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep17*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven18*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep18*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven19*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep19*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven20*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep20*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven21*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep21*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven22*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep22*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven23*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep23*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven24*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep24*pipsize
ENDIF
// test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven25*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep25*pipsize
ENDIF
//place the new stop orders on market at breakevenLevel
IF breakevenLevel>0 THEN
SELL AT breakevenLevel STOP
EXITSHORT AT breakevenLevel STOP
ENDIF