Hello,
I am hoping the community can help me understand a reliability issue I have observed with a multi-timeframe ProScreener I am developing.
The issue:
A stock (Deutsche Bank ADR, ticker PT on IG/ProRealTime) appeared in my scan results on Friday 20 June 2026 with a score of 11. On Monday 23 June 2026, it was completely absent from results — despite the monthly, weekly, and daily chart conditions appearing visually unchanged over the weekend.
My scan structure:
The scan uses three TIMEFRAME blocks — monthly, weekly, and daily — each computing their own MA, SMI, and MACD conditions. A mandatory filter (AND across all three timeframes) must pass before a TotalScore is computed. The stock is only returned if qualifies = Mandatory AND TotalScore >= 8.
What I have already ruled out:
- A new monthly candle opening (weekend was not month-end)
- A change in daily price direction (chart visually consistent)
- The score falling below threshold (score was 11 on Friday, well above threshold 8)
My specific questions:
- Can the TIMEFRAME() blocks in ProScreener behave differently between a Friday close session and a Monday open session — for example due to how the current incomplete bar is handled?
- Is there any known issue with multi-timeframe ProScreeners where a higher timeframe condition (e.g. monthly) can temporarily evaluate differently depending on when intraday the scan is run?
- Is there a recommended way to test or log which specific condition within a multi-timeframe scan is causing a stock to fail — for example, by temporarily outputting sub-scores or intermediate Boolean values?
I am running ProRealTime with an IT-Finance real-time data feed, scanning NASDAQ + NYSE universe.
The full scan code is below for reference:
// RA Eq. Long TC1 V4
// Trend Continuation Type 1 — Early Stage Pullback Resume
// Validated: ACMR 14 Jan 2025, APLD 1 May 2025
// Prepared: 22 Jun 2026 18:28
TIMEFRAME(monthly)
mMA3 = Average[3](close)
mMA6 = Average[6](close)
mTC1 = (mMA3 < mMA6) AND (mMA3 > mMA3[1])
mPriceRising = close > close[1]
mMACDLine = MACDLine[12,26,9](close)
mMACDSignal = MACDSignal[12,26,9](close)
mMACDHist = mMACDLine - mMACDSignal
mMomentumReset = (mMACDHist < 0 AND mMACDHist > mMACDHist[1])
OR (SUMMATION[3](mMACDHist CROSSES OVER 0) > 0)
mMandatory = mTC1 AND mPriceRising AND mMomentumReset
TIMEFRAME(weekly)
wSMA3 = Average[3](close)
wSMA100 = Average[100](close)
wSMI = SMI[14,3,5](close)
wSMISignal = Average[5](wSMI)
wMACDLine = MACDLine[12,26,9](close)
wMACDSignal = MACDSignal[12,26,9](close)
wMACDHist = wMACDLine - wMACDSignal
w1 = close > wSMA3
w2 = wSMI > wSMISignal
w2plus = wSMISignal > wSMISignal[1]
w3a = wMACDHist < 0 AND wMACDHist > wMACDHist[1]
w3b = SUMMATION[3](wMACDHist CROSSES OVER 0) > 0
w3 = w3a OR w3b
w3c = wMACDLine > wMACDLine[1]
w4 = close > close[1]
w5 = wMACDLine < 0
w6 = wSMA100 > wSMA100[1]
wMandatory = w1 AND w2 AND w3 AND w4 AND w6
wScore = (2*w2plus) + (1*w3c) + (1*w5)
TIMEFRAME(daily)
dMA4 = Average[4](close)
dMA9 = Average[9](close)
dMA21 = Average[21](close)
dMA50 = Average[50](close)
dMA200 = Average[200](close)
dATR = AverageTrueRange[14]
atrPct = (dATR / close) * 100
d1 = SUMMATION[10](dMA4 CROSSES OVER dMA9) > 0
AND dMA4 > dMA4[1] AND dMA9 > dMA9[1] AND dMA4 > dMA9
dSMI = SMI[14,3,5](close)
dSMISignal = Average[5](dSMI)
d4 = dSMI > dSMISignal
dMACDLine = MACDLine[12,26,9](close)
dMACDSignal = MACDSignal[12,26,9](close)
dMACDHist = dMACDLine - dMACDSignal
d2 = dMACDHist > dMACDHist[1]
d3 = dMACDLine > dMACDSignal
d7 = dMACDLine < 0
d5 = close > close[1]
extension = (close - dMA50) / dATR
d6 = extension <= 5
AvgVol = Average[3](volume)
AvgCap = AvgVol * close
GatekeeperFilter = (AvgVol > 300000) AND (AvgCap > 20000000)
equityOK = atrPct > 0.7
dMandatory = d1 AND d2 AND d4 AND d5 AND d6 AND equityOK AND GatekeeperFilter
dScore = (1*d3) + (1*d7)
h1 = close > dMA21
h2 = close > dMA50
h3 = close > dMA200
h4 = dMA200 > dMA200[1]
maSpread = (MAX(MAX(MAX(MAX(dMA4,dMA9),dMA21),dMA50),dMA200)
- MIN(MIN(MIN(MIN(dMA4,dMA9),dMA21),dMA50),dMA200)) / dMA200
h5 = maSpread < 0.03
hScore = (1*h1) + (2*h2) + (2*h3) + (1*h4) + (2*h5)
Mandatory = mMandatory AND wMandatory AND dMandatory
TotalScore = wScore + dScore + hScore
qualifies = Mandatory AND TotalScore >= 8
SCREENER[qualifies](TotalScore)
Any insight into the session-to-session variability would be very much appreciated. Thank you.