Machine-Learning-Z-Score-Tradingview

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

    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ález
    Moderator
    Master

    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.

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ález
4 months, 3 weeks ago.

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