Here is a one for Dax 15m thats been live since February 2024 and has worked good for me.
//————————————————————————-
// Main code : DAX_15M_VECTORIAL_LIVE
//————————————————————————-
// M15
// SPREAD 3
// Optimize date – FEB 2024
DEFPARAM CumulateOrders = false
DEFPARAM Preloadbars = 50000
// Variabler för handelstid
ONCE zz = 36.0
ONCE dd = 64.0
ONCE bb = 41.0
ONCE xx = 8.0
CtimeA = time >= 080000 and time <= 220000
CtimeB = time >= 080000 and time <= 220000
ONCE BarLong = 350 // Avslutar lång position efter detta antal barer
ONCE BarShort = 350 // Avslutar kort position efter detta antal barer
// Positionstorlek
ONCE PositionSizeLong = 0.5 // Storlek på lång position
ONCE PositionSizeShort = 1 // Storlek på kort position
// Strategi – Vektorberäkning av vinkel
ONCE PeriodeA = xx // Period för exponentiellt glidande medelvärde (öka för mer stabilitet) (kortsiktig trend)
ONCE nbChandelierA = zz // Antal ljus för vinkelberäkning (öka för att jämna ut beräkningen)
MMA = Exponentialaverage[PeriodeA](close)
ADJASUROPPO = (MMA – MMA[nbChandelierA] * pipsize) / nbChandelierA
ANGLE = (ATAN(ADJASUROPPO)) // Beräkning av vinkel
CondBuy1 = ANGLE >= 20 // Köpvillkor baserat på vinkel
CondSell1 = ANGLE <= -45 // Säljvillkor baserat på vinkel
// Vektorberäkning av lutning och dess glidande medelvärde
ONCE PeriodeB = dd // Period för exponentiellt glidande medelvärde av lutning (öka för att fånga längre trender)
ONCE nbChandelierB = bb // Antal ljus för lutningsberäkning (öka för att jämna ut beräkningen)
lag = 6 // Fördröjning av signalen (öka för att fördröja signalen)
MMB = Exponentialaverage[PeriodeB](close)
pente = (MMB – MMB[nbChandelierB] * pipsize) / nbChandelierB
trigger = Exponentialaverage[PeriodeB + lag](pente)
CondBuy2 = (pente > trigger) AND (pente < 0) // Köpvillkor baserat på lutning
CondSell2 = (pente CROSSES UNDER trigger) AND (pente > -1) // Säljvillkor baserat på lutning
// Ingångar i position
CONDBUY = CondBuy1 and CondBuy2 and CTimeA // Villkor för köp
CONDSELL = CondSell1 and CondSell2 and CtimeB // Villkor för sälj
// Lång position
IF CONDBUY THEN
buy PositionSizeLong contract at market
SET TARGET %PROFIT 5.0 // Mål för vinst i procent
ENDIF
// Kort position
IF CONDSELL THEN
Sellshort PositionSizeShort contract at market
SET TARGET %PROFIT 1.5 // Mål för vinst i procent
ENDIF
// Variabler för trailing stop
ONCE trailingStopType = 1 // Trailing stop – 0 AV, 1 PÅ
ONCE trailingstoplong = 10 // Trailing stop för lång position (öka för att skydda vinst)
ONCE trailingstopshort = 7 // Trailing stop för kort position (öka för att skydda vinst)
ONCE atrtrailingperiod = 30 // Period för ATR (justera för marknadsvolatilitet)
ONCE minstop = 0.8 // Minsta avstånd för trailing stop (öka för större avstånd)
// Trailing stop-logik
atrtrail = AverageTrueRange[atrtrailingperiod]((close / 10) * pipsize) / 1000
trailingstartl = round(atrtrail * trailingstoplong)
trailingstartS = round(atrtrail * trailingstopshort)
if trailingStopType = 1 THEN
TGL = trailingstartl
TGS = trailingstartS
if not onmarket then
MAXPRICE = 0
MINPRICE = close
PREZZOUSCITA = 0
ENDIF
if longonmarket then
MAXPRICE = MAX(MAXPRICE, close)
if MAXPRICE – tradeprice(1) >= TGL * pointsize then
if MAXPRICE – tradeprice(1) >= minstop then
PREZZOUSCITA = MAXPRICE – TGL * pointsize
ELSE
PREZZOUSCITA = MAXPRICE – minstop * pointsize
ENDIF
ENDIF
ENDIF
if shortonmarket then
MINPRICE = MIN(MINPRICE, close)
if tradeprice(1) – MINPRICE >= TGS * pointsize then
if tradeprice(1) – MINPRICE >= minstop then
PREZZOUSCITA = MINPRICE + TGS * pointsize
ELSE
PREZZOUSCITA = MINPRICE + minstop * pointsize
ENDIF
ENDIF
ENDIF
if onmarket and PREZZOUSCITA > 0 then
EXITSHORT AT PREZZOUSCITA STOP
SELL AT PREZZOUSCITA STOP
ENDIF
ENDIF
// Exit zombie trade
IF POSITIONPERF < 0 THEN
IF shortOnMarket AND BARINDEX – TRADEINDEX(1) >= barshort THEN
EXITSHORT AT MARKET
ENDIF
ENDIF
IF POSITIONPERF < 0 THEN
IF LongOnMarket AND BARINDEX – TRADEINDEX(1) >= barlong THEN
SELL AT MARKET
ENDIF
ENDIF