RSI Wave Signals

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #244215 quote
    Bateson
    Participant
    New

    Bonjour

    J’ai essayé de coder l’indicateur de trading Vieuw ci-dessous mais il affiche des erreurs que je n’arrive pas à corrier.

    Je vous remercie par avance de vos retours  !

    // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
    // © bartua
    
    // Optimized Trend Tracker function under copyright and courtesy of KivancOzbilgic.
    
    //@version=5
    indicator("RSI Wave Signals", overlay=false)
    
    period1 = input(2,"Period For MA")
    mtp1 = input.float(0.7,"Trailing Percentage of MA",step=0.1)
    
    
    rsiLength = input(12,"RSI Length")
    
    ottFunction(src,length,percent)=>
        valpha=2/(length+1)
        vud1=src>src[1] ? src-src[1] : 0
        vdd1=src<src[1] ? src[1]-src : 0
        vUD=math.sum(vud1,9)
        vDD=math.sum(vdd1,9)
        vCMO=nz((vUD-vDD)/(vUD+vDD))
        VAR=0.0
        VAR:=nz(valpha*math.abs(vCMO)*src)+(1-valpha*math.abs(vCMO))*nz(VAR[1])
        MAvg=VAR
        fark=MAvg*percent*0.01
        longStop = MAvg - fark
        longStopPrev = nz(longStop[1], longStop)
        longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop
        shortStop =  MAvg + fark
        shortStopPrev = nz(shortStop[1], shortStop)
        shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
        dir = 1
        dir := nz(dir[1], dir)
        dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
        MT = dir==1 ? longStop: shortStop
        OTT=MAvg>MT ? MT*(200+percent)/200 : MT*(200-percent)/200 
        [dir,OTT[2],MAvg]
    
    //MACD Calculations//
    
    rsi = ta.rsi(close,rsiLength)+1000
    
    [dir1,ott1,sl1] = ottFunction(rsi,period1,mtp1)
    
    plot(ott1,title="OTT",linewidth=1,color=color.white)
    plot(sl1,title="SL",linewidth=2,color=color.aqua)
    
    overSoldLevel = input(40,title="Oversold Level") +1000
    overBoughtLevel = input(60,title="Overbought Level") +1000
    
    plot(overSoldLevel, title="Oversold",style=plot.style_circles,color=color.blue)
    plot(overBoughtLevel, title="Overbought",style=plot.style_circles,color=color.blue)
    
    
    
    
    
    #244216 quote
    Bateson
    Participant
    New

    Voici ma tentative de codage avec ProBuilder

    // Déclaration des paramètres
    DEFPARAM Cumulateorders = True
    
    // Entrée des paramètres
    period1 = 2
    mtp1 = 0.7
    rsiLength = 12
    overSoldLevel = 40 + 1000
    overBoughtLevel = 60 + 1000
    
    // Fonction OTT
    src = rsi
    length = period1
    percent = mtp1
    
    valpha = 2 / (length + 1)
    vUD = SUMmation(IF(src > REF(src, 1), src - REF(src, 1), 0), 9)
    vDD = SUM(IF(src < REF(src, 1), REF(src, 1) - src, 0), 9)
    vCMO = (vUD - vDD) / (vUD + vDD)
    VAR = rsi
    VAR = valpha * ABS(vCMO) * src + (1 - valpha * ABS(vCMO)) * VAR
    MAvg = VAR
    fark = MAvg * percent * 0.01
    longStop = MAvg - fark
    longStop = IIF(MAvg > longStop, MAX(longStop, longStop), longStop)
    shortStop = MAvg + fark
    shortStop = IIF(MAvg < shortStop, MIN(shortStop, shortStop), shortStop)
    dir = 1
    IF dir = -1 AND MAvg > REF(shortStop, 1) THEN dir = 1
    IF dir = 1 AND MAvg < REF(longStop, 1) THEN dir = -1
    MT = IIF(dir == 1, longStop, shortStop)
    OTT = IIF(MAvg > MT, MT * (200 + percent) / 200, MT * (200 - percent) / 200)
    
    
    
    // Calcul RSI
    rsi = RSI[ rsiLength ](close) + 1000
    
    // Calcul OTT
    // Calcul de OTT directement
    dir1 = dir
    ott1 = OTT
    sl1 = MAvg
    
    // Affichage des courbes
    GRAPH ott1 AS "OTT" COLOURED(255,255,255)
    GRAPH sl1 AS "SL" COLOURED(0,255,255)
    GRAPH overSoldLevel AS "Oversold" COLOURED(0,0,255)
    GRAPH overBoughtLevel AS "Overbought" COLOURED(0,0,255)
    #244220 quote
    jacquesgermain
    Participant
    Senior

    bonjour

    voici le mien pour test

    / ==========================
    // RSI Wave Signals – ProRealTime
    // Conversion depuis Pine Script
    // Indicateur basé sur OTT et RSI
    // © bartua & KivancOzbilgic
    // ==========================

    // 🔹 Paramètres Utilisateur
    DEFPARAM calculateonlastbars = 500 // Charge un nombre suffisant de barres pour éviter les erreurs d’indexation

    period1 = 2
    mtp1 = 0.7
    rsiLength = 12
    overSoldLevel = 40
    overBoughtLevel = 60

    // 🔹 Calcul du RSI
    MONrsi = RSI[rsiLength](CLOSE)

    // ==========================
    // Initialisation des variables
    // ==========================
    dir = 1
    VAR = 0
    longStop = 0
    shortStop = 0
    ott1 = 0
    sl1 = 0

    // ==========================
    // Boucle principale pour calculer OTT
    // ==========================
    FOR i = 10 TO 500 DO // Commencer à 10 pour éviter les erreurs d’indexation
    valpha = 2 / (period1 + 1)

    // Calcul du CMO (Chande Momentum Oscillator)
    vUD = 0
    vDD = 0
    FOR j = 1 TO 9 DO // J varie de 1 à 9
    IF close[j] > close[j+1] THEN // Utilisation correcte des valeurs historiques
    vUD = vUD + (close[j] – close[j+1])
    ELSIF close[j] < close[j+1] THEN
    vDD = vDD + (close[j+1] – close[j])
    ENDIF
    NEXT

    vCMO = (vUD – vDD) / (vUD + vDD + 0.00001) // Évite la division par zéro
    VAR = valpha * ABS(vCMO) * close[i] + (1 – valpha * ABS(vCMO)) * VAR

    MAvg = VAR
    fark = MAvg * mtp1 / 100

    // Calcul du Long Stop
    longStopPrev = longStop
    longStop = MAX(MAvg – fark, longStopPrev)

    // Calcul du Short Stop
    shortStopPrev = shortStop
    shortStop = MIN(MAvg + fark, shortStopPrev)

    // Détermination de la tendance
    dirPrev = dir
    IF dirPrev = -1 AND MAvg > shortStopPrev THEN
    dir = 1
    ELSIF dirPrev = 1 AND MAvg < longStopPrev THEN
    dir = -1
    ENDIF

    // Sélection de MT en fonction de la tendance
    IF dir = 1 THEN
    MT = longStop
    ELSE
    MT = shortStop
    ENDIF

    // Calcul de OTT1
    IF MAvg > MT THEN
    ott1 = MT * (200 + mtp1) / 200
    ELSE
    ott1 = MT * (200 – mtp1) / 200
    ENDIF

    // Stockage de la moyenne mobile SL
    sl1 = MAvg
    NEXT

    // ==========================
    // Affichage des Résultats
    // ==========================
    RETURN ott1 AS “OTT”, sl1 AS “SL”, overSoldLevel AS “Survendu”, overBoughtLevel AS “Suracheté”

    #244224 quote
    Bateson
    Participant
    New

    Bonjour Jacques
    Merci beaucoup pour la contribution
    Le code fonctionne mais ne retourne pas le résultat attendu 🙁
    Je rajoute l’image de ce que j’obtiens avec ce code, et l’image du résultat souhaitée.
    le point positif c’est qu’au moins il n’y a plus d’erreur de code 🙂

    Capture-decran-2025-02-23-141214.png Capture-decran-2025-02-23-141214.png Capture-decran-2025-02-23-141444.png Capture-decran-2025-02-23-141444.png
    #244227 quote
    LucasBest
    Participant
    Average
    Once MAperiod = 2
    Once maTpercent = 0.7
    Once rsiPeriod = 12
    Once OttPeriod = 9
    
    once overSoldLevel = 40 +1000
    once overBoughtLevel = 60 +1000
    
    Once valpha = 2/(MAperiod+1)
    Once dir = 1
    
    MyRSI = RSI[rsiPeriod](close) +1000
    
    if barindex < rsiPeriod*2+1 then
    var = MyRSI
    else
    vud1 = (MyRSI>MyRSI[1])*(MyRSI-MyRSI[1])
    vdd1 = (MyRSI<MyRSI[1])*(MyRSI[1]-MyRSI)
    vUD = summation[OttPeriod](vud1)
    vDD = summation[OttPeriod](vdd1)
    vCMO = (vUD-vDD)/(vUD+vDD)
    VAR = (valpha*abs(vCMO)*MyRSI)+(1-valpha*abs(vCMO))*VAR[1]
    endif
    
    fark = VAR*maTpercent*0.01
    
    longStop = VAR - fark
    longStopPrev = (longStop[1]>0)*longStop[1]+(longStop[1]=0)*longStop
    if VAR > longStopPrev then
    longStop = max(longStop,longStopPrev)
    endif
    
    shortStop = VAR + fark
    shortStopPrev = (shortStop[1]>0)*shortStop[1]+(shortStop[1]=0)*shortStop
    if VAR < shortStopPrev then
    shortStop = min(shortStop,shortStopPrev)
    endif
    
    if dir = -1 and VAR > shortStopPrev then
    dir = 1
    elsif dir = 1 and VAR < longStopPrev then
    dir = -1
    endif
    
    MT = longStop*(dir = 1)+shortStop*(dir = -1)
    OTT = MT*(200+maTpercent*(VAR>MT)-maTpercent*(VAR<MT))/200
    
    dir1 = dir
    ott1 = OTT[2]
    sl1 = VAR
    
    Return ott1 Style(line,2) Coloured("gray",255), sl1 Style(line,2) Coloured("cyan",255), overSoldLevel coloured("red",100), overBoughtLevel coloured("green",100)
    Iván González thanked this post
    #244231 quote
    LucasBest
    Participant
    Average

    Je ne pense pas que ce soit une très bonne idée d’appliquer l’OTT de KivancOzbilgic au RSI, car les mouvement du RSI ne sont pas égaux et varient en fonction du niveau du RSI… Entre 45 et 55, les mouvements positifs et négatifs se valent, mais plus on s’approche de 100, plus un petit mouvement du RSI vers le haut équivaut à un grand mouvement de prix vers le haut, alors qu’un grand mouvement du RSI vers le bas équivaut à un petit mouvement des prix vers le bas… Et inversement lorsque le RSI est plus proche de 0…
    De ce fait, les seuils de changement de direction de l’OTT sont inadéquats plus on se rapproche de 0 ou de 100, puisqu’ils sont équivalents vers le haut et vers le bas (ce qui n’a pas de sens sur un indicateur borné…).

    L’OTT est un excellent indicateur quand il est appliqué au prix, mais il devient médiocre lorsqu’il est appliqué à des oscillateurs et ne permet plus de suivre une tendance. Je pense que cet indicateur est une fausse bonne idée ; bref, comment rendre nul un concept excellent à la base 🙂

    #244232 quote
    Bateson
    Participant
    New

    Bonjour Lucasbest
    merci pour l contribution.
    C’est maintenant très proche de ce que recherche :-)up :-)Je vais encore essayer de faire évoluer le code avec des variables et pouvoir bouger les lignes up et down mais vraiment merci beaucoup

Viewing 7 posts - 1 through 7 (of 7 total)
  • You must be logged in to reply to this topic.

RSI Wave Signals


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
Bateson @bateson Participant
Summary

This topic contains 6 replies,
has 3 voices, and was last updated by Bateson
1 year ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 02/23/2025
Status: Active
Attachments: 2 files
Logo Logo
Loading...