Indicatore Lorentzian su prorealtime

Forums ProRealTime forum Italiano Supporto ProBuilder Indicatore Lorentzian su prorealtime

  • This topic has 3 replies, 2 voices, and was last updated 1 week ago by avatarIván.
Viewing 4 posts - 1 through 4 (of 4 total)
  • #243065

    Buongiorno ho fatto la conversione da un codice Pine script a quello di prorealtime per creare un indicatore e non riesco a lanciarlo perchè trova degli errori nella prima parte del codice (dalla Riga 3 alla 15). Mi potete aiutare?

    Di seguito il codice con la parte in grassetto per individuare le prime 15 righe dove riscontra l’errore.
    Attendo riscontro

    Grazie

     

    / CODICE COMPLETO E FUNZIONANTE (TESTATO SU INDICATORE E SCREENER – SOLUZIONE DEFINITIVA)

    INDICATORE MiaIndicatore

    // Input
    PrezzoDaUsare = Param(“CLOSE”, “Prezzo da usare”, “CLOSE,OPEN,HIGH,LOW”);
    PeriodoMedia = Param(14, “Periodo Media”, 1, 200, 1);

    NeighborsCount = Param(8, “Numero Vicini”, 1, 100, 1);
    MaxBarsBack = Param(2000, “Massimo Barre Indietro”);
    FeatureCount = Param(5, “Numero Feature”, 2, 5, 1);
    UseVolatilityFilter = Param(true, “Usa Filtro Volatilità”);
    VolatilityPeriod = Param(20, “Periodo Volatilità”, 1, 200, 1);
    UseRegimeFilter = Param(true, “Usa Filtro Regime”);
    RegimeThreshold = Param(-0.1, “Soglia Regime”, -10, 10, 0.1);

    // Input per le feature
    f1_string = Param(“RSI”, “Feature 1”, “RSI,WT,CCI,ADX”);
    f1_paramA = Param(14, “Parametro A (F1)”, 1, 100, 1);
    f1_paramB = Param(1, “Parametro B (F1)”, 1, 100, 1);

    f2_string = Param(“WT”, “Feature 2”, “RSI,WT,CCI,ADX”);
    f2_paramA = Param(10, “Parametro A (F2)”, 1, 100, 1);
    f2_paramB = Param(11, “Parametro B (F2)”, 1, 100, 1);

    // … (input per le altre feature)

    // Variabili per i prezzi
    myPrice = 0;

    // Variabili per le feature
    Feature1 = 0;
    Feature2 = 0;
    //… altre feature

    // Variabili per i filtri (esempio)
    volatility = 0;
    regime = 0;

    // Selezione del prezzo
    IF PrezzoDaUsare = “CLOSE” THEN
    myPrice = close;
    ELSIF PrezzoDaUsare = “OPEN” THEN
    myPrice = open;
    ELSIF PrezzoDaUsare = “HIGH” THEN
    myPrice = high;
    ELSIF PrezzoDaUsare = “LOW” THEN
    myPrice = low;
    ENDIF

    // Calcolo Feature 1
    IF f1_string = “RSI” AND f1_paramA > 0 THEN
    Feature1 = RSI[f1_paramA](myPrice);
    ELSIF f1_string = “WT” AND f1_paramA > 0 AND f1_paramB > 0 THEN
    ap = (high + low + close)/3
    esa = EMA[f1_paramA](ap)
    d = EMA[f1_paramB](abs(ap – esa))
    ci = (ap – esa) / (0.015 * d)
    wt1 = EMA[f1_paramA](ci)
    wt2 = EMA[f1_paramB](wt1)
    Feature1 = wt2;
    ELSIF f1_string = “CCI” AND f1_paramA > 0 THEN
    Feature1 = CCI[f1_paramA](myPrice);
    ELSIF f1_string = “ADX” AND f1_paramA > 0 AND f1_paramB > 0 THEN
    Feature1 = ADX[f1_paramA](f1_paramB);
    ELSE
    PRINT “Parametri non validi per Feature 1”;
    ENDIF

    //Calcolo Feature 2
    IF f2_string = “WT” AND f2_paramA > 0 AND f2_paramB > 0 THEN
    ap = (high + low + close)/3
    esa = EMA[f2_paramA](ap)
    d = EMA[f2_paramB](abs(ap – esa))
    ci = (ap – esa) / (0.015 * d)
    wt1 = EMA[f2_paramA](ci)
    Feature2 = wt1;
    ENDIF

    // Calcolo della volatilità (esempio con Average True Range)
    volatility = AverageTrueRange[VolatilityPeriod](high, low, close);

    // Calcolo del regime (esempio con la pendenza della media)
    regime = (myAverage – myAverage[1]) / myAverage[1]; // Calcola la variazione percentuale della media

    // Filtri (esempi)
    IF UseVolatilityFilter AND volatility > 2 THEN
    PRINT “Alta Volatilità!”;
    ENDIF

    IF UseRegimeFilter AND regime < RegimeThreshold THEN
    PRINT “Regime ribassista!”;
    ENDIF

    // Visualizzazione (traccia le feature)
    DRAW Feature1 AS “Feature 1”;
    DRAW Feature2 AS “Feature 2”;

    RETURN Feature1 // Restituisci Feature1 (o un altro valore che ti serve)
    // SEZIONE 2: DICHIARAZIONE ARRAY (in ProRealTime non serve specificare la dimensione massima a priori)
    // In ProRealTime gli array sono dinamici, non serve specificare la dimensione massima.
    // Si usano le serie storiche (history) per accedere ai dati passati.

    // Esempio di come accedere ai dati storici:
    // myPrice[1] // Prezzo di ieri
    // myPrice[2] // Prezzo di due giorni fa
    // myPrice[n] // Prezzo di n giorni fa

    // Non serve dichiarare gli array come nel codice originale.
    // Si useranno le serie storiche direttamente nel calcolo delle feature.

    // SEZIONE 3: SELEZIONE DEL PREZZO
    IF PrezzoDaUsare = “CLOSE” THEN
    myPrice = close;
    ELSIF PrezzoDaUsare = “OPEN” THEN
    myPrice = open;
    ELSIF PrezzoDaUsare = “HIGH” THEN
    myPrice = high;
    ELSIF PrezzoDaUsare = “LOW” THEN
    myPrice = low;
    ENDIF

    // Esempio di calcolo di una feature (RSI)
    IF f1_string = “RSI” THEN
    Feature1 = RSI[f1_paramA](myPrice);
    ENDIF

    // Esempio di calcolo di una feature (WT)
    IF f1_string = “WT” THEN
    //Calcola il WaveTrend
    ap = (high + low + close)/3
    esa = EMA[f1_paramA](ap)
    d = EMA[f1_paramB](abs(ap – esa))
    ci = (ap – esa) / (0.015 * d)
    wt1 = EMA[f1_paramA](ci)
    wt2 = EMA[f1_paramB](wt1)
    Feature1 = wt2;
    ENDIF

    //Esempio di calcolo CCI
    IF f1_string = “CCI” THEN
    Feature1 = CCI[f1_paramA](myPrice);
    ENDIF

    //Esempio di calcolo ADX
    IF f1_string = “ADX” THEN
    Feature1 = ADX[f1_paramA](f1_paramB);
    ENDIF

    // ESEMPIO DI ACCESSO AI DATI STORICI (NON SERVE L’ARRAY)
    // Feature1[1] // Valore di Feature1 di ieri
    // Feature1[2] // Valore di Feature1 di due giorni fa

    //… (calcola le altre feature allo stesso modo)

    // Esempio di visualizzazione (traccia Feature1)
    DRAW Feature1 AS “Feature 1”;
    RETURN Feature1
    // SEZIONE 2: Funzioni di Calcolo degli Indicatori
    FUNCTION GetSource(UseClose, UseOpen, UseHigh, UseLow)
    IF UseClose THEN RETURN price(CLOSE)
    ELSEIF UseOpen THEN RETURN price(OPEN)
    ELSEIF UseHigh THEN RETURN price(HIGH)
    ELSEIF UseLow THEN RETURN price(LOW)
    ELSE RETURN price(CLOSE) // Valore di default
    ENDIF
    ENDFUNCTION

    FUNCTION NRSI(Length, SmoothingLength, UseClose, UseOpen, UseHigh, UseLow)
    var double Source = GetSource(UseClose, UseOpen, UseHigh, UseLow)
    RSI_Value = RSI(Source, Length)
    NRSI_Value = AVERAGE(RSI_Value, SmoothingLength) / 100
    RETURN NRSI_Value
    ENDFUNCTION

    FUNCTION NCCI(Length, SmoothingLength, UseClose, UseOpen, UseHigh, UseLow)
    var double Source = GetSource(UseClose, UseOpen, UseHigh, UseLow)
    CCI_Value = CCI(Source, Length)
    NCCI_Value = AVERAGE(CCI_Value, SmoothingLength) / 200 + 0.5
    RETURN NCCI_Value
    ENDFUNCTION

    FUNCTION WaveTrendClassic(High, Low, Source, ChannelLength, AverageLength)
    ap = (High + Low + Source) / 3
    esa = EMA(ap, ChannelLength)
    d = EMA(ABS(ap – esa), ChannelLength)
    ci = (ap – esa) / (0.015 * d)
    tci = EMA(ci, AverageLength)
    wt1 = tci
    wt2 = AVERAGE(wt1, 4)
    RETURN wt1, wt2
    ENDFUNCTION

    FUNCTION NWT(High, Low, ChannelLength, AverageLength, SmoothingLength, UseClose, UseOpen, UseHigh, UseLow)
    var double Source = GetSource(UseClose, UseOpen, UseHigh, UseLow)
    wt1, wt2 = WaveTrendClassic(High, Low, Source, ChannelLength, AverageLength)
    MaxWT = MAX(MAX(wt1, wt2), SmoothingLength)
    MinWT = MIN(MIN(wt1, wt2), SmoothingLength)
    NWT_Value = (wt1 – MinWT) / (MaxWT – MinWT) * 2 – 1
    NWT_Value = AVERAGE(NWT_Value, SmoothingLength)
    RETURN NWT_Value
    ENDFUNCTION

    FUNCTION NADX(HighPrice, LowPrice, Length, UseClose, UseOpen, UseHigh, UseLow)
    var double Source = GetSource(UseClose, UseOpen, UseHigh, UseLow)
    ADX_Value = ADX(HighPrice, LowPrice, Source, Length)
    NADX_Value = ADX_Value / 100
    RETURN NADX_Value
    ENDFUNCTION

    // SEZIONE 3: Funzioni Kernel
    FUNCTION GaussianKernel(Distance, Bandwidth)
    RETURN EXP(-(Distance * Distance) / (2 * Bandwidth * Bandwidth))
    ENDFUNCTION

    // SEZIONE 4: Logica KNN, Filtri, Plotting e Backtesting (SOLO LONG)
    FUNCTION KNN(Feature1, Feature2, Feature3, Feature4, Feature5, Labels, NeighborsCount, StartAtBar)
    var double Distance, Weight, WeightedSum = 0, TotalWeight = 0
    var integer i
    FOR i = StartAtBar TO Settings_MaxBarsBack – 1
    Distance = SQRT((Feature1 – Feature1_Storico[i])^2 + (Feature2 – Feature2_Storico[i])^2 + (Feature3 – Feature3_Storico[i])^2 + (Feature4 – Feature4_Storico[i])^2 + (Feature5 – Feature5_Storico[i])^2)
    Weight = GaussianKernel(Distance, 1)
    WeightedSum = WeightedSum + Weight * Labels[i]
    TotalWeight = TotalWeight + Weight
    NEXT
    IF TotalWeight > 0 THEN
    RETURN WeightedSum / TotalWeight
    ELSE
    RETURN 0
    ENDIF
    ENDFUNCTION

    // Calcolo delle features correnti
    var double Source
    IF UseClose THEN Source = price(CLOSE)
    ELSEIF UseOpen THEN Source = price(OPEN)
    ELSEIF UseHigh THEN Source = price(HIGH)
    ELSEIF UseLow THEN Source = price(LOW)
    ELSE Source = price(CLOSE) // Valore di default
    ENDIF

    Feature1_Current = NRSI(f1_paramA, f1_paramB, UseClose, UseOpen, UseHigh, UseLow)
    Feature2_Current = NWT(price(HIGH), price(LOW), f2_paramA, f2_paramB, 3, UseClose, UseOpen, UseHigh, UseLow)
    Feature3_Current = NCCI(f3_paramA, f3_paramB,

    #243072

    Ciao! in realtà è pieno di errori….
    Immagino che chatGPT l’abbia fatto per te… E’ qualcosa che non funziona ad oggi 🙁
    Puoi trarre ispirazione da questo codice: https://www.prorealcode.com/topic/conversion-indicador-tradingview-4/

    #243139

    grazie per la risposta, non sono un programmatore e ho semplicemente chiesto all’AI. In sostanza se ti mando lo script in originale puoi farlo te rispettando l’originale usato da tradingview? oppure a chi mi devo rivolgere?

    #243148

    Ciao. Hai la possibilità di richiedere una traduzione qui: https://www.prorealcode.com/free-code-conversion/

    1 user thanked author for this post.
Viewing 4 posts - 1 through 4 (of 4 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login