Hola, quiero crear un screeners donde la WMA30 debe cruzar hacia arriba a la de 60 y además el precio toque en retroceso o en lateral la WMA30 en semanal, pero me da demasiadas acciones, cómo puedo filtrar calidad o fuerza en la acción? O confirmación de la tendencia alcista, qué indicadores son buenos y confiables? Gracias.
Buenas! aqui tienes un screener de ejemplo.
Sobre que indicadores son “buenos y confiables”
RSI, MACD o estocastico encima de un sistema de medias no te van a filtrar nada util. Los tres se calculan a partir del mismo precio que ya has suavizado con las medias, asi que repiten la misma informacion con otro nombre. Te quitaran resultados, si, pero al azar, no te quitaran los malos.
Lo que si aporta informacion nueva es lo que viene de otra serie:
- Volumen (liquidez).
- El indice de referencia (fuerza relativa).
Y dos medidas que no son “otro indicador” sino la calidad de la propia tendencia:
- Pendiente de la WMA60. Un cruce puede producirse porque la lenta se aplana, no porque la rapida suba con fuerza. Exigir pendiente positiva mata esos casos.
- R2 (coeficiente de determinacion). Mide como de limpia es la subida, no si sube. Descarta las que suben a trompicones.
- Distancia al maximo de 52 semanas. El filtro de calidad mas simple y de los mas discriminantes: lo que esta a mas de un 25% de su maximo anual no es un lider.
Un aviso sobre el ADX, que es lo que suele recomendarse en estos casos: sube igual en tendencia bajista (mide fuerza, no direccion) y cae precisamente durante los retrocesos y laterales. Si lo pones como filtro te cargaras justo los setups que buscas.
//--------------------------------------------------//
//PRC_WMA Pullback Quality Screener
//version = 1
//01.09.2026
//Ivan Gonzalez @ www.prorealcode.com
//Sharing ProRealTime knowledge
//--------------------------------------------------//
// Unidad temporal del ProScreener : SEMANAL
// 1. cruce WMA30 / WMA60 al alza, reciente y todavia vigente
// 2. retroceso que toca la WMA30 y cierra por encima
// 3. filtros de calidad : liquidez, pendiente, R2, distancia al maximo
//--------------------------------------------------//
// --- Parametros ---
//--------------------------------------------------//
fastLen = 30 // WMA rapida
slowLen = 60 // WMA lenta
maxAge = 26 // el cruce debe haber ocurrido en las ultimas N semanas
touchTol = 2.0 // tolerancia del toque, en % por encima de la WMA rapida
minPop = 5.0 // separacion previa minima sobre la WMA rapida, en %
slopeLen = 8 // ventana para medir la pendiente de la WMA lenta
volLen = 20 // periodos de la media de volumen
minLiq = 2500000 // liquidez minima SEMANAL : volumen medio x cierre
qualLen = 26 // ventana del coeficiente de determinacion
minQual = 0.5 // calidad minima de la tendencia (0 a 1)
maxOff = 25.0 // distancia maxima al maximo de 52 semanas, en %
//--------------------------------------------------//
// --- Contexto ---
//--------------------------------------------------//
wmaF = weightedaverage[fastLen](close)
wmaS = weightedaverage[slowLen](close)
vavg = average[volLen](volume)
hi52 = highest[52](high)
hh6 = highest[6](high)
qual = R2[qualLen](close)
enoughBars = barindex > slowLen + maxAge + 2
//--------------------------------------------------//
// --- 1. El cruce : reciente Y todavia vigente ---
//--------------------------------------------------//
xAge = -1
IF enoughBars THEN
FOR i = 0 TO maxAge DO
IF xAge = -1 AND wmaF[i] > wmaS[i] AND wmaF[i+1] <= wmaS[i+1] THEN
xAge = i
ENDIF
NEXT
ENDIF
crossOK = xAge >= 0 AND wmaF > wmaS
//--------------------------------------------------//
// --- 2. Tendencia real, no un cruce por aplanamiento ---
//--------------------------------------------------//
slopeS = 0
IF enoughBars THEN
slopeS = (wmaS - wmaS[slopeLen]) / wmaS[slopeLen] * 100
ENDIF
trendOK = slopeS > 0 AND qual > minQual
//--------------------------------------------------//
// --- 3. El retroceso : venia extendido y ahora toca la WMA30 ---
//--------------------------------------------------//
touchBand = wmaF * (1 + touchTol / 100)
wasExt = hh6[1] >= wmaF[1] * (1 + minPop / 100)
touchOK = low <= touchBand AND close > wmaF AND wasExt
//--------------------------------------------------//
// --- 4. Calidad : liquidez y proximidad al maximo anual ---
//--------------------------------------------------//
liqOK = vavg * close > minLiq
off52 = 0
distPct = 0
IF enoughBars THEN
off52 = (hi52 - close) / hi52 * 100
distPct = (close - wmaF) / wmaF * 100
ENDIF
nearHi = off52 < maxOff
//--------------------------------------------------//
SCREENER[crossOK AND trendOK AND touchOK AND liqOK AND nearHi](xAge AS "Sem cruce", off52 AS "% al max 52s", qual AS "Calidad R2", distPct AS "% a WMA30")