Machine-Learning-Z-Score-Tradingview

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #250346 quote
    Ciccarelli FrancoCiccarelli Franco
    Participant
    Senior

    Richiedo , se è possibile, la traduzione di questo indicatore.

    https://it.tradingview.com/script/oJKrJF4L-Machine-Learning-Z-Score-Buy-and-Sell-SS/

    Grazie

    #250617 quote
    Iván GonzálezIván González
    Moderator
    Legend

    Ecco l’indicatore. Non avendo ancora la possibilità di creare funzioni proprie, mi è risultato complesso programmare la correlazione e consuma molte risorse.
    Nell’indicatore vedrai che per impostazione predefinita utilizzo un’approssimazione e, nel caso si desideri il coefficiente di Pearson, suggerisco di attivare l’opzione per calcolare solo sulle ultime X barre (200 per esempio).

    //-------------------------------------------------------------
    // PRC_Machine Learning Z-Score by Steversteves
    // version = 0
    // 10.09.25
    // Iván González @ www.prorealcode.com
    // Sharing ProRealTime knowledge
    //-------------------------------------------------------------
    //defparam calculateonlastbars=200
    //-------------------------------------------------------------
    // ===== Input parameters =====
    //-------------------------------------------------------------
    autoadjust = 1   // 1 = true, 0 = false
    lengthinput = 75 // default length if autoadjust = 0
    plottgt = 1      // 1 = true, 0 = false
    manualprice = 0  // 1 = true, 0 = false
    pullbacksd = 1.0 // pullback standard deviation factor
    aproxCorr = 1 // 1 = use R2 , 0 = use pearson correlation (uncomment defparam line)
    barcolor = 1 // 1 = true, 0 = false
    //-------------------------------------------------------------
    // Correlation calculation
    //-------------------------------------------------------------
    if aproxCorr then
       // ===== Correlation approximation with R2 =====
       cor1 = R2[50](close)
       cor2 = R2[100](close)
       cor3 = R2[150](close)
       cor4 = R2[200](close)
       cor5 = R2[250](close)
       cor6 = R2[300](close)
       cor7 = R2[350](close)
       cor8 = R2[400](close)
       cor9 = R2[450](close)
       cor10 = R2[500](close)
    else
       // ===== Pearson Correlation =====
       // --- Pearson correlation for 50 ---
       len = 50
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor1 = ABS(num / den)
       ELSE
          cor1 = 0
       ENDIF
       
       // --- Pearson correlation for 100 ---
       len = 100
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor2 = ABS(num / den)
       ELSE
          cor2 = 0
       ENDIF
       
       // --- Pearson correlation for 150 ---
       len = 150
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor3 = ABS(num / den)
       ELSE
          cor3 = 0
       ENDIF
       
       // --- Pearson correlation for 200 ---
       len = 200
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor4 = ABS(num / den)
       ELSE
          cor4 = 0
       ENDIF
       
       // --- Pearson correlation for 250 ---
       len = 250
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor5 = ABS(num / den)
       ELSE
          cor5 = 0
       ENDIF
       
       // --- Pearson correlation for 300 ---
       len = 300
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor6 = ABS(num / den)
       ELSE
          cor6 = 0
       ENDIF
       
       // --- Pearson correlation for 350 ---
       len = 350
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor7 = ABS(num / den)
       ELSE
          cor7 = 0
       ENDIF
       
       // --- Pearson correlation for 400 ---
       len = 400
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor8 = ABS(num / den)
       ELSE
          cor8 = 0
       ENDIF
       
       // --- Pearson correlation for 450 ---
       len = 450
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor9 = ABS(num / den)
       ELSE
          cor9 = 0
       ENDIF
       
       // --- Pearson correlation for 500 ---
       len = 500
       sumX = 0
       sumY = 0
       sumXY = 0
       sumX2 = 0
       sumY2 = 0
       
       FOR i = 0 TO len-1 DO
          xi = barindex[i]
          yi = close[i]
          sumX = sumX + xi
          sumY = sumY + yi
          sumXY = sumXY + xi * yi
          sumX2 = sumX2 + xi * xi
          sumY2 = sumY2 + yi * yi
       NEXT
       
       n = len
       num = n * sumXY - sumX * sumY
       den = SQRT((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY))
       
       IF den <> 0 THEN
          cor10 = ABS(num / den)
       ELSE
          cor10 = 0
       ENDIF
    endif
    
    maxcor = MAX(MAX(MAX(MAX(MAX(cor1,cor2),cor3),MAX(cor4,cor5)),MAX(cor6,cor7)),MAX(MAX(cor8,cor9),cor10))
    
    IF autoadjust = 1 THEN
       IF maxcor = cor1 THEN
          len = 50
       ELSIF maxcor = cor2 THEN
          len = 100
       ELSIF maxcor = cor3 THEN
          len = 150
       ELSIF maxcor = cor4 THEN
          len = 200
       ELSIF maxcor = cor5 THEN
          len = 250
       ELSIF maxcor = cor6 THEN
          len = 300
       ELSIF maxcor = cor7 THEN
          len = 350
       ELSIF maxcor = cor8 THEN
          len = 400
       ELSIF maxcor = cor9 THEN
          len = 450
       ELSE
          len = 500
       ENDIF
    ELSE
       len = lengthinput
    ENDIF
    //-------------------------------------------------------------
    // ===== Z-Score calculations =====
    //-------------------------------------------------------------
    a = Average[len](close)        // mean
    b = Std[len](close)            // standard deviation
    c = (close - a) / b            // z-score
    
    sma = Average[len](c)          // smoothed z-score
    
    IF manualprice = 1 THEN
       z0 = a + pullbacksd * b
    ELSE
       z0 = a + sma * b
    ENDIF
    
    highz = Highest[len](c)
    lowz  = Lowest[len](c)
    
    //-------------------------------------------------------------
    // ===== Buy & Sell logic =====
    //-------------------------------------------------------------
    ONCE buywait = 0
    ONCE sellwait = 0
    
    lowestprice = Lowest[20](low)
    highestprice = Highest[20](high)
    atr = AverageTrueRange[14](close)
    
    // ---- Buy signal ----
    IF c <= lowz THEN
       buywait = buywait + 1
       IF buywait > 8 THEN
          DRAWARROWUP(barindex,low-0.35*atr)coloured(0,255,0)
          DRAWTEXT("Z-Score= #c#", barindex, lowestprice - 3*atr) COLOURED("darkgreen")
          DRAWTEXT("Cor Length= #len#", barindex, lowestprice - 2*atr) COLOURED("darkgreen")
          DRAWTEXT("TP= #z0#", barindex, lowestprice - atr) COLOURED("darkgreen")
          IF plottgt = 1 THEN
             DRAWSEGMENT(barindex, z0, barindex+100, z0) coloured(0,255,0)
          ENDIF
          buywait = 0
       ENDIF
    ENDIF
    
    // ---- Sell signal ----
    IF c >= highz THEN
       sellwait = sellwait + 1
       IF sellwait > 8 THEN
          DRAWARROWDOWN(barindex,high+0.35*atr)coloured(255,0,0)
          DRAWTEXT("Z-Score= #c#", barindex, highestprice + 3*atr) COLOURED("darkred")
          DRAWTEXT("Cor Length= #len#", barindex, highestprice + 2*atr) COLOURED("darkred")
          DRAWTEXT("TP= #z0#", barindex, highestprice + 1*atr) COLOURED("darkred")
          IF plottgt = 1 THEN
             DRAWSEGMENT(barindex, z0, barindex+100, z0) COLOURED(255,0,0)
          ENDIF
          sellwait = 0
       ENDIF
    ENDIF
    //-------------------------------------------------------------
    // ===== Bar colors =====
    //-------------------------------------------------------------
    overbought = c >= 2
    oversold   = c <= -2
    if barcolor then
       IF overbought THEN
          DRAWCANDLE(open,high,low,close) COLOURED("fuchsia")
       ELSIF oversold THEN
          DRAWCANDLE(open,high,low,close) COLOURED("black")
       ENDIF
    endif
    //-------------------------------------------------------------
    return
    
Viewing 2 posts - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

Machine-Learning-Z-Score-Tradingview


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Summary

This topic contains 1 reply,
has 2 voices, and was last updated by Iván GonzálezIván González
1 year ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 09/04/2025
Status: Active
Attachments: No files
ProRealCode ProRealCode
Loading...