Screener combinado Supply-Demand y Wick Pressure en PRT

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #260091 quote
    NicoGB67
    Participant
    Average

    Hola, tengo dos screeners combinados ambos dobles, se podrían agrupar para no tener que estar ejecutando uno y luego el otro y así tenerlos en uno solo:

    Este es uno:

    // Screener combinado: zonas de alerta
    // Dispara cuando Supply-Demand-CVD-Flow o Wick Pressure Zones
    // forman una zona nueva en el momento actual
    
    
    // === 1. Supply-Demand-CVD-Flow (ChartPrime) ===
    atrLen = 14
    momMult = 1.0
    myATR = averagetruerange[atrLen](close)
    
    brkBody = abs(close[1] - open[1])
    isDemand = 0
    isSupply = 0
    if barindex > 2 then
       if (close[2] < open[2]) and (close[1] > open[1]) and brkBody >= momMult * myATR[1] then
          isDemand = 1
       endif
       if (close[2] > open[2]) and (close[1] < open[1]) and brkBody >= momMult * myATR[1] then
          isSupply = 1
       endif
    endif
    
    // === 2. Wick Pressure Zones (BigBeluga) ===
    lookback = 200
    threshold = 80
    extendBars = 20
    rsiLen = 14
    
    bodyTop = max(open, close)
    bodyBot = min(open, close)
    denUp = max(bodyTop, 0.0000001)
    denLo = max(low, 0.0000001)
    upperWick = (high - bodyTop) / denUp
    lowerWick = (bodyBot - low) / denLo
    
    maxUpper = highest[lookback](upperWick)
    maxLower = highest[lookback](lowerWick)
    
    sizeUpWick = 0
    sizeLoWick = 0
    if maxUpper > 0 then
       sizeUpWick = floor((upperWick / maxUpper) * 100)
    endif
    if maxLower > 0 then
       sizeLoWick = floor((lowerWick / maxLower) * 100)
    endif
    
    myrsi = rsi[rsiLen](close)
    
    once startidx = -100000
    
    newUpper = 0
    newLower = 0
    if sizeUpWick >= threshold and sizeLoWick < threshold and myrsi > 50 and (barindex - startidx > extendBars) then
       newUpper = 1
       startidx = barindex
    endif
    if sizeLoWick >= threshold and sizeUpWick < threshold and myrsi < 50 and (barindex - startidx > extendBars) then
       newLower = 1
       startidx = barindex
    endif
    
    // === 3. Condicion combinada ===
    zoneFormed = isDemand or isSupply or newUpper or newLower
    
    // === 4. Tipo de zona detectada ===
    sType = 0
    if isDemand then
       sType = 1
    endif
    if isSupply then
       sType = -1
    endif
    if newLower then
       sType = 2
    endif
    if newUpper then
       sType = -2
    endif
    
    SCREENER[zoneFormed] (sType as "Zone Type")
    




    Y el otro:


    //———————————————————-//
    //PRC_Combined Screener: Double Top/Bottom + Elliott Wave Impulse
    //version = 0
    //25.03.2026
    //Iván González @ http://www.prorealcode.com
    //Sharing ProRealTime knowledge
    //———————————————————-//
    
    // ============================================
    // PART 1: DOUBLE TOP / DOUBLE BOTTOM
    // ============================================
    dtPrd = 5
    dtTol = 15
    
    ph = high = highest[dtPrd](high)
    pl = low = lowest[dtPrd](low)
    
    IF ph AND pl = 0 THEN
       zzDir = 1
    ELSIF pl AND ph = 0 THEN
       zzDir = -1
    ELSE
       zzDir = zzDir
    ENDIF
    
    zzDirChanged = zzDir <> zzDir[1]
    Box = 0
    
    IF ph OR pl THEN
       IF zzDirChanged THEN
          IF zzDir = 1 THEN
             $zigzag[zzT+1] = highest[dtPrd](high)
             zzT = zzT + 1
          ELSIF zzDir = -1 THEN
             $zigzag[zzT+1] = lowest[dtPrd](low)
             zzT = zzT + 1
          ENDIF
       ELSE
          IF zzDir = 1 AND highest[dtPrd](high) > $zigzag[zzT] THEN
             $zigzag[zzT] = highest[dtPrd](high)
          ELSIF zzDir = -1 AND lowest[dtPrd](low) < $zigzag[zzT] THEN
             $zigzag[zzT] = lowest[dtPrd](low)
          ENDIF
       ENDIF
    ENDIF
    
    IF zzT > 4 THEN
       //—-Double Top pattern—-//
       htop = ($zigzag[zzT-3] + $zigzag[zzT-1]) / 2 - $zigzag[zzT-2]
       TopHigh = $zigzag[zzT-3] + htop * dtTol / 100
       BotHigh = $zigzag[zzT-3] - htop * dtTol / 100
       DoubleTop = ($zigzag[zzT-1] >= BotHigh AND $zigzag[zzT-1] <= TopHigh) AND ($zigzag[zzT-3] > dtY1 AND $zigzag[zzT-3] > $zigzag[zzT-2] AND $zigzag[zzT-1] > $zigzag[zzT-2])
       IF DoubleTop AND NOT DoubleTop[1] THEN
          dtY1 = $zigzag[zzT-4]
          Box = 2
       ENDIF
       
       //—-Double Bottom pattern—-//
       hbot = $zigzag[zzT-2] - ($zigzag[zzT-3] + $zigzag[zzT-1]) / 2
       topLow = $zigzag[zzT-3] + hbot * dtTol / 100
       botLow = $zigzag[zzT-3] - hbot * dtTol / 100
       DoubleBot = ($zigzag[zzT-1] >= botLow AND $zigzag[zzT-1] <= topLow) AND ($zigzag[zzT-3] < $zigzag[zzT-4] AND $zigzag[zzT-3] < $zigzag[zzT-2] AND $zigzag[zzT-1] < $zigzag[zzT-2])
       IF DoubleBot AND NOT DoubleBot[1] THEN
          Box = 1
       ENDIF
    ENDIF
    
    // ============================================
    // PART 2: ELLIOTT WAVE IMPULSE
    // ============================================
    ewLength = 15
    ewError = 5
    
    ewErrMin = (100 - ewError) / 100
    ewErrMax = (100 + ewError) / 100
    
    waveFound = 0
    ewWdir = 0
    
    IF barindex >= ewLength THEN
       
       hb = highestbars[ewLength](high)
       lb = lowestbars[ewLength](low)
       
       IF hb = 0 AND lb <> 0 THEN
          ewPHigh = high
          ewPLow = undefined
          ewDir = 1
       ELSIF lb = 0 AND hb <> 0 THEN
          ewPHigh = undefined
          ewPLow = low
          ewDir = -1
       ELSIF hb = 0 AND lb = 0 THEN
          ewPHigh = high
          ewPLow = low
          ewDir = ewPrevDir
       ELSE
          ewPHigh = undefined
          ewPLow = undefined
          ewDir = ewPrevDir
       ENDIF
       
       ewHasPivot = 0
       IF ewPHigh <> undefined OR ewPLow <> undefined THEN
          ewHasPivot = 1
       ENDIF
       
       IF ewHasPivot THEN
          IF ewDir = 1 THEN
             ewNewVal = high
          ELSE
             ewNewVal = low
          ENDIF
          ewNewPDir = ewDir
          
          ewDirChanged = 0
          IF ewDir <> ewPrevDir AND ewPrevDir <> 0 THEN
             ewDirChanged = 1
          ENDIF
          
          // Same direction: replace pvt0 if more extreme
          IF ewDirChanged = 0 AND ewPCount >= 1 THEN
             IF ewDir = 1 THEN
                IF ewNewVal < ewPvt0 THEN
                   ewNewVal = ewPvt0
                ENDIF
             ELSE
                IF ewNewVal > ewPvt0 THEN
                   ewNewVal = ewPvt0
                ENDIF
             ENDIF
             
             IF ewPCount >= 3 THEN
                IF ewDir = 1 AND ewNewVal > ewPvt2 THEN
                   ewNewPDir = 2
                ELSIF ewDir = -1 AND ewNewVal < ewPvt2 THEN
                   ewNewPDir = -2
                ENDIF
             ENDIF
             
             ewPvt0 = ewNewVal
             ewPd0 = ewNewPDir
          ELSE
             // Direction change: FIFO shift + insert
             IF ewPCount >= 2 THEN
                IF ewDir = 1 AND ewNewVal > ewPvt1 THEN
                   ewNewPDir = 2
                ELSIF ewDir = -1 AND ewNewVal < ewPvt1 THEN
                   ewNewPDir = -2
                ENDIF
             ENDIF
             
             ewPvt3 = ewPvt2
             ewPvt2 = ewPvt1
             ewPd2 = ewPd1
             ewPvt1 = ewPvt0
             ewPd1 = ewPd0
             
             ewPvt0 = ewNewVal
             ewPd0 = ewNewPDir
             IF ewPCount < 6 THEN
                ewPCount = ewPCount + 1
             ENDIF
          ENDIF
          
          ewPrevDir = ewDir
       ENDIF
       
       // Wave detection
       IF ewPCount >= 4 THEN
          ewP2 = ewPvt1
          ewP2dir = ewPd1
          ewP1 = ewPvt2
          ewP1dir = ewPd2
          ewP0 = ewPvt3
          
          ewW1Len = abs(ewP1 - ewP0)
          ewW2Len = abs(ewP2 - ewP1)
          
          IF ewW1Len > 0 THEN
             ewIR2 = ewW2Len / ewW1Len
          ELSE
             ewIR2 = 0
          ENDIF
          
          ewIgnore = 0
          IF ewOldP0 = ewP0 AND ewOldP1 = ewP1 AND ewOldP2 = ewP2 THEN
             ewIgnore = 1
          ENDIF
          
          ewPatternOK = 0
          IF ewIR2 > 0.50 * ewErrMin AND ewIR2 < 0.50 * ewErrMax THEN
             ewPatternOK = 1
          ENDIF
          IF ewIR2 > 0.618 * ewErrMin AND ewIR2 < 0.618 * ewErrMax THEN
             ewPatternOK = 1
          ENDIF
          IF ewIR2 > 0.764 * ewErrMin AND ewIR2 < 0.764 * ewErrMax THEN
             ewPatternOK = 1
          ENDIF
          IF ewIR2 > 0.854 * ewErrMin AND ewIR2 < 0.854 * ewErrMax THEN
             ewPatternOK = 1
          ENDIF
          
          ewDirOK = 0
          IF (ewP1dir = 2 AND ewP2dir = -1) OR (ewP1dir = -2 AND ewP2dir = 1) THEN
             ewDirOK = 1
          ENDIF
          
          IF ewIgnore = 0 AND ewPatternOK = 1 AND ewDirOK = 1 THEN
             IF ewP0 > ewP1 THEN
                ewWdir = -1
             ELSE
                ewWdir = 1
             ENDIF
             
             waveFound = 1
             
             ewOldP0 = ewP0
             ewOldP1 = ewP1
             ewOldP2 = ewP2
          ENDIF
       ENDIF
       
    ENDIF
    
    // ============================================
    // COMBINED OUTPUT
    // ============================================
    // Signal: 1=Double Bottom, 2=Double Top, 3=Elliott Bull, 4=Elliott Bear
    IF Box = 1 THEN
       signal = 1
    ELSIF Box = 2 THEN
       signal = 2
    ELSIF waveFound = 1 AND ewWdir = 1 THEN
       signal = 3
    ELSIF waveFound = 1 AND ewWdir = -1 THEN
       signal = 4
    ELSE
       signal = 0
    ENDIF
    
    SCREENER[signal > 0](signal AS"1=DBot 2=DTop 3=EWBull 4=EWBear")
    



    #260111 quote
    robertogozzi
    Moderator
    Master

    Este es el screener donde se fusionaron los dos screener separados.


    No comprobé si los nombres de las variables eran idénticos en ambos screener ; de ser así, se asumirá el del segundo screener tro, ya que lo añadí al final del primero. Si hay nombres idénticos, cámbielos, aunque solo sea añadiendo una X al principio o al final.


    Este screener devuelve los siguientes valores:

    10 = anteriormente 1 (screener 1)

    20 = anteriormente 2 (screener 1)

    91 = anteriormente -1 (screener 1)

    92 = anteriormente -2 (screener 1)


    30 = anteriormente 1 (segundo screener )

    40 = anteriormente 2 (segundo screener )

    50 = anteriormente 3 (segundo screener )

    60 = anteriormente 4 (segundo screener )

    Añadí la condición:

    AND (close > 500)
    

    a la última línea para evitar que encuentre demasiados datos. Puedes eliminar o modificar 500 como quieras:

    // Screener combinado: zonas de alerta
    // Dispara cuando Supply-Demand-CVD-Flow o Wick Pressure Zones
    // forman una zona nueva en el momento actual
    //
    // returns:
    //
    //    10 = formerly 1  (screener 1)
    //    20 = formerly 2  (screener 1)
    //    91 = formerly -1 (screener 1)
    //    92 = formerly -2 (screener 1)
    //
    //    30 = formerly 1  (2nd screener)
    //    40 = formerly 2  (2nd screener)
    //    50 = formerly 3  (2nd screener)
    //    60 = formerly 4  (2nd screener)
    //
    //---------------------------------------------------------
    //   screener 1
    //
    //---------------------------------------------------------
    // === 1. Supply-Demand-CVD-Flow (ChartPrime) ===
    atrLen = 14
    momMult = 1.0
    myATR = averagetruerange[atrLen](close)
    
    brkBody = abs(close[1] - open[1])
    isDemand = 0
    isSupply = 0
    if barindex > 2 then
    if (close[2] < open[2]) and (close[1] > open[1]) and brkBody >= momMult * myATR[1] then
    isDemand = 1
    endif
    if (close[2] > open[2]) and (close[1] < open[1]) and brkBody >= momMult * myATR[1] then
    isSupply = 1
    endif
    endif
    
    // === 2. Wick Pressure Zones (BigBeluga) ===
    lookback = 200
    threshold = 80
    extendBars = 20
    rsiLen = 14
    
    bodyTop = max(open, close)
    bodyBot = min(open, close)
    denUp = max(bodyTop, 0.0000001)
    denLo = max(low, 0.0000001)
    upperWick = (high - bodyTop) / denUp
    lowerWick = (bodyBot - low) / denLo
    
    maxUpper = highest[lookback](upperWick)
    maxLower = highest[lookback](lowerWick)
    
    sizeUpWick = 0
    sizeLoWick = 0
    if maxUpper > 0 then
    sizeUpWick = floor((upperWick / maxUpper) * 100)
    endif
    if maxLower > 0 then
    sizeLoWick = floor((lowerWick / maxLower) * 100)
    endif
    
    myrsi = rsi[rsiLen](close)
    
    once startidx = -100000
    
    newUpper = 0
    newLower = 0
    if sizeUpWick >= threshold and sizeLoWick < threshold and myrsi > 50 and (barindex - startidx > extendBars) then
    newUpper = 1
    startidx = barindex
    endif
    if sizeLoWick >= threshold and sizeUpWick < threshold and myrsi < 50 and (barindex - startidx > extendBars) then
    newLower = 1
    startidx = barindex
    endif
    
    // === 3. Condicion combinada ===
    zoneFormed = isDemand or isSupply or newUpper or newLower
    
    // === 4. Tipo de zona detectada ===
    sType = 0
    if isDemand then
    sType = 10
    endif
    if isSupply then
    sType = 91
    endif
    if newLower then
    sType = 20
    endif
    if newUpper then
    sType = 92
    endif
    //---------------------------------------------------------
    //    screener 2
    //
    //———————————————————-//
    //PRC_Combined Screener: Double Top/Bottom + Elliott Wave Impulse
    //version = 0
    //25.03.2026
    //Iván González @ http://www.prorealcode.com
    //Sharing ProRealTime knowledge
    //———————————————————-//
    
    // ============================================
    // PART 1: DOUBLE TOP / DOUBLE BOTTOM
    // ============================================
    dtPrd = 5
    dtTol = 15
    
    ph = high = highest[dtPrd](high)
    pl = low = lowest[dtPrd](low)
    
    IF ph AND pl = 0 THEN
    zzDir = 1
    ELSIF pl AND ph = 0 THEN
    zzDir = -1
    ELSE
    zzDir = zzDir
    ENDIF
    
    zzDirChanged = zzDir <> zzDir[1]
    Box = 0
    
    IF ph OR pl THEN
    IF zzDirChanged THEN
    IF zzDir = 1 THEN
    $zigzag[zzT+1] = highest[dtPrd](high)
    zzT = zzT + 1
    ELSIF zzDir = -1 THEN
    $zigzag[zzT+1] = lowest[dtPrd](low)
    zzT = zzT + 1
    ENDIF
    ELSE
    IF zzDir = 1 AND highest[dtPrd](high) > $zigzag[zzT] THEN
    $zigzag[zzT] = highest[dtPrd](high)
    ELSIF zzDir = -1 AND lowest[dtPrd](low) < $zigzag[zzT] THEN
    $zigzag[zzT] = lowest[dtPrd](low)
    ENDIF
    ENDIF
    ENDIF
    
    IF zzT > 4 THEN
    //—-Double Top pattern—-//
    htop = ($zigzag[zzT-3] + $zigzag[zzT-1]) / 2 - $zigzag[zzT-2]
    TopHigh = $zigzag[zzT-3] + htop * dtTol / 100
    BotHigh = $zigzag[zzT-3] - htop * dtTol / 100
    DoubleTop = ($zigzag[zzT-1] >= BotHigh AND $zigzag[zzT-1] <= TopHigh) AND ($zigzag[zzT-3] > dtY1 AND $zigzag[zzT-3] > $zigzag[zzT-2] AND $zigzag[zzT-1] > $zigzag[zzT-2])
    IF DoubleTop AND NOT DoubleTop[1] THEN
    dtY1 = $zigzag[zzT-4]
    Box = 2
    ENDIF
       
    //—-Double Bottom pattern—-//
    hbot = $zigzag[zzT-2] - ($zigzag[zzT-3] + $zigzag[zzT-1]) / 2
    topLow = $zigzag[zzT-3] + hbot * dtTol / 100
    botLow = $zigzag[zzT-3] - hbot * dtTol / 100
    DoubleBot = ($zigzag[zzT-1] >= botLow AND $zigzag[zzT-1] <= topLow) AND ($zigzag[zzT-3] < $zigzag[zzT-4] AND $zigzag[zzT-3] < $zigzag[zzT-2] AND $zigzag[zzT-1] < $zigzag[zzT-2])
    IF DoubleBot AND NOT DoubleBot[1] THEN
    Box = 1
    ENDIF
    ENDIF
    
    // ============================================
    // PART 2: ELLIOTT WAVE IMPULSE
    // ============================================
    ewLength = 15
    ewError = 5
    
    ewErrMin = (100 - ewError) / 100
    ewErrMax = (100 + ewError) / 100
    
    waveFound = 0
    ewWdir = 0
    
    IF barindex >= ewLength THEN
       
    hb = highestbars[ewLength](high)
    lb = lowestbars[ewLength](low)
       
    IF hb = 0 AND lb <> 0 THEN
    ewPHigh = high
    ewPLow = undefined
    ewDir = 1
    ELSIF lb = 0 AND hb <> 0 THEN
    ewPHigh = undefined
    ewPLow = low
    ewDir = -1
    ELSIF hb = 0 AND lb = 0 THEN
    ewPHigh = high
    ewPLow = low
    ewDir = ewPrevDir
    ELSE
    ewPHigh = undefined
    ewPLow = undefined
    ewDir = ewPrevDir
    ENDIF
       
    ewHasPivot = 0
    IF ewPHigh <> undefined OR ewPLow <> undefined THEN
    ewHasPivot = 1
    ENDIF
       
    IF ewHasPivot THEN
    IF ewDir = 1 THEN
    ewNewVal = high
    ELSE
    ewNewVal = low
    ENDIF
    ewNewPDir = ewDir
          
    ewDirChanged = 0
    IF ewDir <> ewPrevDir AND ewPrevDir <> 0 THEN
    ewDirChanged = 1
    ENDIF
          
    // Same direction: replace pvt0 if more extreme
    IF ewDirChanged = 0 AND ewPCount >= 1 THEN
    IF ewDir = 1 THEN
    IF ewNewVal < ewPvt0 THEN
    ewNewVal = ewPvt0
    ENDIF
    ELSE
    IF ewNewVal > ewPvt0 THEN
    ewNewVal = ewPvt0
    ENDIF
    ENDIF
             
    IF ewPCount >= 3 THEN
    IF ewDir = 1 AND ewNewVal > ewPvt2 THEN
    ewNewPDir = 2
    ELSIF ewDir = -1 AND ewNewVal < ewPvt2 THEN
    ewNewPDir = -2
    ENDIF
    ENDIF
             
    ewPvt0 = ewNewVal
    ewPd0 = ewNewPDir
    ELSE
    // Direction change: FIFO shift + insert
    IF ewPCount >= 2 THEN
    IF ewDir = 1 AND ewNewVal > ewPvt1 THEN
    ewNewPDir = 2
    ELSIF ewDir = -1 AND ewNewVal < ewPvt1 THEN
    ewNewPDir = -2
    ENDIF
    ENDIF
             
    ewPvt3 = ewPvt2
    ewPvt2 = ewPvt1
    ewPd2 = ewPd1
    ewPvt1 = ewPvt0
    ewPd1 = ewPd0
             
    ewPvt0 = ewNewVal
    ewPd0 = ewNewPDir
    IF ewPCount < 6 THEN
    ewPCount = ewPCount + 1
    ENDIF
    ENDIF
          
    ewPrevDir = ewDir
    ENDIF
       
    // Wave detection
    IF ewPCount >= 4 THEN
    ewP2 = ewPvt1
    ewP2dir = ewPd1
    ewP1 = ewPvt2
    ewP1dir = ewPd2
    ewP0 = ewPvt3
          
    ewW1Len = abs(ewP1 - ewP0)
    ewW2Len = abs(ewP2 - ewP1)
          
    IF ewW1Len > 0 THEN
    ewIR2 = ewW2Len / ewW1Len
    ELSE
    ewIR2 = 0
    ENDIF
          
    ewIgnore = 0
    IF ewOldP0 = ewP0 AND ewOldP1 = ewP1 AND ewOldP2 = ewP2 THEN
    ewIgnore = 1
    ENDIF
          
    ewPatternOK = 0
    IF ewIR2 > 0.50 * ewErrMin AND ewIR2 < 0.50 * ewErrMax THEN
    ewPatternOK = 1
    ENDIF
    IF ewIR2 > 0.618 * ewErrMin AND ewIR2 < 0.618 * ewErrMax THEN
    ewPatternOK = 1
    ENDIF
    IF ewIR2 > 0.764 * ewErrMin AND ewIR2 < 0.764 * ewErrMax THEN
    ewPatternOK = 1
    ENDIF
    IF ewIR2 > 0.854 * ewErrMin AND ewIR2 < 0.854 * ewErrMax THEN
    ewPatternOK = 1
    ENDIF
          
    ewDirOK = 0
    IF (ewP1dir = 2 AND ewP2dir = -1) OR (ewP1dir = -2 AND ewP2dir = 1) THEN
    ewDirOK = 1
    ENDIF
          
    IF ewIgnore = 0 AND ewPatternOK = 1 AND ewDirOK = 1 THEN
    IF ewP0 > ewP1 THEN
    ewWdir = -1
    ELSE
    ewWdir = 1
    ENDIF
             
    waveFound = 1
             
    ewOldP0 = ewP0
    ewOldP1 = ewP1
    ewOldP2 = ewP2
    ENDIF
    ENDIF
       
    ENDIF
    
    // ============================================
    // COMBINED OUTPUT
    // ============================================
    // Signal: 1=Double Bottom, 2=Double Top, 3=Elliott Bull, 4=Elliott Bear
    IF Box = 1 THEN
    sType  = 30
    ELSIF Box = 2 THEN
    sType  = 40
    ELSIF waveFound = 1 AND ewWdir = 1 THEN
    sType  = 50
    ELSIF waveFound = 1 AND ewWdir = -1 THEN
    sType  = 60
    ENDIF
    //---------------------------------------------------------
    CombinedSignal = zoneFormed OR Box OR waveFound OR ewWdir
    SCREENER[CombinedSignal AND (close > 500)] (sType as "10/20/91/92=Zone Type,30=DBot,40=DTop,50=EWBull,60=EWBear")
    





    NicoGB67 thanked this post
    #260113 quote
    robertogozzi
    Moderator
    Master

    Este es el archivo ITF.


    NicoGB67 thanked this post
    CombinedScreener.itf
Viewing 3 posts - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.

Screener combinado Supply-Demand y Wick Pressure en PRT


ProScreener: Buscadores de Mercado y Rastreo

New Reply
Author
author-avatar
NicoGB67 @nicogb67 Participant
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by robertogozzi
5 days, 15 hours ago.

Topic Details
Forum: ProScreener: Buscadores de Mercado y Rastreo
Language: Spanish
Started: 04/10/2026
Status: Active
Attachments: 1 files
Logo Logo
Loading...