RSI Wave Signals
Forums › ProRealTime forum Français › Support ProBuilder › RSI Wave Signals
- This topic has 6 replies, 3 voices, and was last updated 19 hours ago by
Bateson.
-
-
02/23/2025 at 11:48 AM #244215
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 !
RSI Wave Signals12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152// 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=5indicator("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] : 0vdd1=src<src[1] ? src[1]-src : 0vUD=math.sum(vud1,9)vDD=math.sum(vdd1,9)vCMO=nz((vUD-vDD)/(vUD+vDD))VAR=0.0VAR:=nz(valpha*math.abs(vCMO)*src)+(1-valpha*math.abs(vCMO))*nz(VAR[1])MAvg=VARfark=MAvg*percent*0.01longStop = MAvg - farklongStopPrev = nz(longStop[1], longStop)longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStopshortStop = MAvg + farkshortStopPrev = nz(shortStop[1], shortStop)shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStopdir = 1dir := nz(dir[1], dir)dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dirMT = dir==1 ? longStop: shortStopOTT=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") +1000overBoughtLevel = input(60,title="Overbought Level") +1000plot(overSoldLevel, title="Oversold",style=plot.style_circles,color=color.blue)plot(overBoughtLevel, title="Overbought",style=plot.style_circles,color=color.blue)02/23/2025 at 11:50 AM #244216Voici ma tentative de codage avec ProBuilder
RSI Wave Signals12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849// Déclaration des paramètresDEFPARAM Cumulateorders = True// Entrée des paramètresperiod1 = 2mtp1 = 0.7rsiLength = 12overSoldLevel = 40 + 1000overBoughtLevel = 60 + 1000// Fonction OTTsrc = rsilength = period1percent = mtp1valpha = 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 = rsiVAR = valpha * ABS(vCMO) * src + (1 - valpha * ABS(vCMO)) * VARMAvg = VARfark = MAvg * percent * 0.01longStop = MAvg - farklongStop = IIF(MAvg > longStop, MAX(longStop, longStop), longStop)shortStop = MAvg + farkshortStop = IIF(MAvg < shortStop, MIN(shortStop, shortStop), shortStop)dir = 1IF dir = -1 AND MAvg > REF(shortStop, 1) THEN dir = 1IF dir = 1 AND MAvg < REF(longStop, 1) THEN dir = -1MT = IIF(dir == 1, longStop, shortStop)OTT = IIF(MAvg > MT, MT * (200 + percent) / 200, MT * (200 - percent) / 200)// Calcul RSIrsi = RSI[ rsiLength ](close) + 1000// Calcul OTT// Calcul de OTT directementdir1 = dirott1 = OTTsl1 = MAvg// Affichage des courbesGRAPH 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)02/23/2025 at 12:44 PM #244220bonjour
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’indexationperiod1 = 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
NEXTvCMO = (vUD – vDD) / (vUD + vDD + 0.00001) // Évite la division par zéro
VAR = valpha * ABS(vCMO) * close[i] + (1 – valpha * ABS(vCMO)) * VARMAvg = 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é”02/23/2025 at 2:14 PM #244224Bonjour 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 🙂02/23/2025 at 2:45 PM #244227RSI Wave Signals12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152Once MAperiod = 2Once maTpercent = 0.7Once rsiPeriod = 12Once OttPeriod = 9once overSoldLevel = 40 +1000once overBoughtLevel = 60 +1000Once valpha = 2/(MAperiod+1)Once dir = 1MyRSI = RSI[rsiPeriod](close) +1000if barindex < rsiPeriod*2+1 thenvar = MyRSIelsevud1 = (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]endiffark = VAR*maTpercent*0.01longStop = VAR - farklongStopPrev = (longStop[1]>0)*longStop[1]+(longStop[1]=0)*longStopif VAR > longStopPrev thenlongStop = max(longStop,longStopPrev)endifshortStop = VAR + farkshortStopPrev = (shortStop[1]>0)*shortStop[1]+(shortStop[1]=0)*shortStopif VAR < shortStopPrev thenshortStop = min(shortStop,shortStopPrev)endifif dir = -1 and VAR > shortStopPrev thendir = 1elsif dir = 1 and VAR < longStopPrev thendir = -1endifMT = longStop*(dir = 1)+shortStop*(dir = -1)OTT = MT*(200+maTpercent*(VAR>MT)-maTpercent*(VAR<MT))/200dir1 = dirott1 = OTT[2]sl1 = VARReturn ott1 Style(line,2) Coloured("gray",255), sl1 Style(line,2) Coloured("cyan",255), overSoldLevel coloured("red",100), overBoughtLevel coloured("green",100)02/23/2025 at 3:13 PM #244231Je 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 🙂
02/23/2025 at 3:16 PM #244232Bonjour 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 -
AuthorPosts
Find exclusive trading pro-tools on