Following a request by user discovery2005 (https://www.prorealcode.com/topic/media-mobile-a-tempo/) on the italiam forum, I coded these 3 MA’s to limit calculations to the desired time range, without being affected by data outside that same range.
// TRSMA
//
// Time Range Simple Moving Average
//
DEFPARAM CalculateOnLastBars = 200
//Periods = 20
//StartTime = 090000
//EndTime = 180000
Periods = max(2,min(999,Periods))
StartTime = max(0,min(240000,StartTime))
EndTime = max(0,min(240000,EndTime))
//
i = 0
TRSMA = 0
FOR j = 0 TO 3000
IF opentime[j] >= StartTime AND opentime[j] <= EndTime THEN
TRSMA = TRSMA + close[j]
i = i + 1
IF i = Periods THEN
BREAK
ENDIF
ENDIF
NEXT
TRSMA = (TRSMA / Periods)
IF TRSMA = 0 THEN
TRSMA = close
ENDIF
Return TRSMA AS "TRSMA"
// TREMA
//
// Time Range Exponential Moving Average
//
DEFPARAM CalculateOnLastBars = 200
//Periods = 20
//StartTime = 090000
//EndTime = 175000
Periods = max(2,min(999,Periods))
StartTime = max(0,min(240000,StartTime))
EndTime = max(0,min(240000,EndTime))
//
Alpha = 2 / (Periods + 1)
i = 0
TREMA = close
FOR j = 0 TO 3000
IF opentime[j] >= StartTime AND opentime[j] <= EndTime THEN
i = i + 1
TREMA = ((close[j] - TREMA) * Alpha) + TREMA
IF i = Periods THEN
BREAK
ENDIF
ENDIF
NEXT
IF TREMA = 0 THEN
TREMA = close
ENDIF
Return TREMA AS "TREMA"
// TRWMA
//
// Time Range Weighted Moving Average
//
DEFPARAM CalculateOnLastBars = 200
//Periods = 20
//StartTime = 090000
//EndTime = 175000
Periods = max(2,min(999,Periods))
StartTime = max(0,min(240000,StartTime))
EndTime = max(0,min(240000,EndTime))
//
i = 0
Pond = 0
TRWMA = 0
FOR j = 0 TO 3000
IF opentime[j] >= StartTime AND opentime[j] <= EndTime THEN
i = i + 1
TRWMA = TRWMA + (close[j] * i)
Pond = Pond + i
IF i = Periods THEN
BREAK
ENDIF
ENDIF
NEXT
TRWMA = (TRWMA / Pond)
IF TRWMA = 0 THEN
TRWMA = close
ENDIF
Return TRWMA AS "TRWMA"