Compréhension fine des formules utilisées par PRT

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #258863 quote
    ZeHannibal
    Participant
    New

    Bonjour à tous,

    Je travaille sur un indicateur personnalisé, et je bute sur des écarts que je n’arrive pas à expliquer. Avant de chercher un bug dans mon code, j’aimerais m’assurer que je comprends correctement le comportement interne de certaines fonctions PRT. J’ai plusieurs questions précises.

    1. ExponentialAverage[N] — quelle profondeur de données ?

    Quand on écrit ExponentialAverage[20](close), le calcul utilise-t-il :

    • uniquement les 20 dernières barres (fenêtre glissante stricte), ou
    • un filtre récursif classique (α = 2/(N+1)) qui se propage depuis la première barre chargée sur le graphique ?

    Autrement dit : si j’affiche le même indicateur sur un graphique avec 500 barres chargées vs 5000 barres chargées, est-ce que la valeur sur la dernière bougie sera identique ? Ou est-ce qu’elle peut légèrement différer à cause de l’initialisation ?


    2. ExponentialAverage — valeur d’initialisation

    Comment l’EMA est-elle initialisée sur la toute première barre ?

    • ema[0] = close[0] (première valeur brute)
    • ema[0] = SMA(close, N) sur les N premières barres (moyenne simple comme seed)
    • Autre méthode ?


    3. DEMA[N] — composition exacte

    DEMA[N](close) est-elle bien strictement 2 * EMA[N](close) - EMA[N](EMA[N](close)) ?

    Ou existe-t-il une variante interne (par exemple, est-ce que le deuxième EMA utilise la même période N, ou un paramètre différent) ?


    4. RSI[N] — type de lissage

    La documentation indique : RSI(sur N périodes) = 100 - 100 / (1 + p) avec p = (moyenne des hausses sur les N dernières périodes) / (moyenne des baisses sur les N dernières périodes).

    Ma question : cette “moyenne” est-elle :

    • une moyenne arithmétique simple (SMA) sur les N derniers changements — ce qu’on appelle parfois le “RSI de Cutler”
    • un lissage exponentiel de Wilder (RMA) avec α = 1/N, récursif — le RSI classique de Wilder
    • autre chose ?

    La distinction est importante car le RSI Cutler est purement fenêtré (ne dépend que des N dernières barres), tandis que le RSI Wilder est récursif (la mémoire s’étend au-delà de la fenêtre N).


    5. RSI[N] appliqué à un indicateur (pas au close)

    Quand on écrit RSI[5](monIndicateur)monIndicateur est lui-même le résultat d’un calcul (par exemple une DEMA), est-ce que le RSI s’applique de la même manière que sur le close ? Autrement dit, le RSI traite-t-il son entrée comme une série de prix quelconque, sans traitement spécial ?


    6. Chaînage de fonctions — ordre d’évaluation

    Quand on imbrique plusieurs fonctions, par exemple RSI[14](DEMA[10](ExponentialAverage[20](close))), est-ce que PRT :

    • évalue de l’intérieur vers l’extérieur sur l’historique complet (d’abord l’EMA sur toutes les barres, puis DEMA sur le résultat complet, puis RSI sur le résultat complet)
    • ou applique-t-il une logique différente (par exemple, chaque fonction ne “voit” qu’un nombre limité de valeurs en entrée) ?

    Plus généralement, quand on chaîne 3 ou 4 fonctions imbriquées, est-ce que chaque couche dispose bien de l’intégralité de la série produite par la couche précédente ?


    7. Nombre de barres nécessaires pour la convergence

    Quand on imbrique plusieurs EMA/DEMA avec des périodes longues (par exemple DEMA[50] ou DEMA[80]) puis qu’on applique un RSI par-dessus, combien de barres d’historique faut-il au minimum pour que la valeur finale soit stable ? Est-ce que PRT considère le résultat comme valide dès qu’on a assez de barres pour la plus grande période utilisée, ou faut-il un multiple de cette période pour la convergence des couches imbriquées ?


    Merci d’avance pour vos éclairages. Je cherche à comprendre les écarts entre mon modèle et PRT, et la moindre différence dans l’une de ces étapes se propage et crée des écarts significatifs sur le résultat final. Vous êtes un peu moin dernier espoir 😉

    #258891 quote
    robertogozzi
    Moderator
    Master

    Voici le code EMA standard sur 20 périodes ; il utilise une SMA pour les 20 premières périodes, puis applique la formule. Ainsi, sur 500 ou plus de 5 000 périodes, le calcul reste identique.

    Probuilder précharge toujours 500 barres.

    Par conséquent, pour l’EMA, il n’utilise que les 20 dernières barres (fenêtre glissante étroite), conformément à la formule.

    // EMA - Exponential Moving Average
    //
    //https://school.stockcharts.com/doku.php?id=technical_indicators:moving_averages
    //https://sciencing.com/calculate-exponential-moving-averages-8221813.html
    //https://corporatefinanceinstitute.com/resources/knowledge/trading-investing/exponential-moving-average-ema/
    //https://www.investopedia.com/terms/e/ema.asp
    //
    //Periods = 20
    ONCE Periods = max(1,min(999,Periods))
    ONCE Multip  = 2 / (Periods + 1)        //weighting multiplier or smoothing constant
    src          = CustomClose
    IF BarIndex > (Periods + 1) THEN
       Ema       = (close - Ema[1]) * Multip + Ema[1]
    ELSE
       Ema       = average[Periods,0](src)  //First EMA is the SMA of the same periods
    ENDIF
    return Ema AS "Ema"
    


    Voici la formule RSI :

    //              (https://en.wikipedia.org/wiki/Relative_strength_index)

    //

    //         Calculation

    //

    // For each trading period an upward change U or downward change D is calculated. Up periods are characterized by the close being higher than the previous close:

    //

    //  U = close now − close previous {\displaystyle U={\text{close}}_{\text{now}}-{\text{close}}_{\text{previous}}}

    //  U = {\text{close}}_{{\text{now}}}-{\text{close}}_{{\text{previous}}}

    //

    //  D = 0  {\displaystyle D=0} D=0

    //

    // Conversely, a down period is characterized by the close being lower than the previous period’s close (note that D is nonetheless a positive number),

    //

    //  U = 0 {\displaystyle U=0} U=0

    //  D = close previous − close now {\displaystyle D={\text{close}}_{\text{previous}}-{\text{close}}_{\text{now}}}

    //

    //  D = 0  {\text{close}}_{{\text{previous}}}-{\text{close}}_{{\text{now}}}

    //

    // If the last close is the same as the previous, both U and D are zero. The average U and D are calculated using an n-period smoothed or modified moving average // (SMMA or MMA) which is an exponentially smoothed Moving Average with α = 1/period. Some commercial packages, like AIQ, use a standard exponential moving

    // average (EMA) as the average instead of Wilder’s SMMA.

    //

    // Wilder originally formulated the calculation of the moving average as: newval = (prevval * (period – 1) + newdata) / period. This is fully equivalent to the

    // aforementioned exponential smoothing. New data is simply divided by period which is equal to the alpha calculated value of 1/period. Previous average values

    // are modified by (period -1)/period which in effect is period/period – 1/period and finally 1 – 1/period which is 1 – alpha.

    //

    // The ratio of these averages is the relative strength or relative strength factor:

    //

    //  RS = SMMA(U,n)/SMMA(D,n)     {\displaystyle RS={\frac {{\text{SMMA}}(U,n)}{{\text{SMMA}}(D,n)}}} RS={\frac {{\text{SMMA}}(U,n)}{{\text{SMMA}}(D,n)}}

    //

    // If the average of D values is zero, then according to the equation, the RS value will approach infinity, so that the resulting RSI, as computed below, will

    // approach 100.

    //

    //The relative strength factor is then converted to a relative strength index between 0 and 100:[1]

    //

    //  RSI = 100 − (100 / (1 + RS))   {\displaystyle RSI=100-{100 \over {1+RS}}} RSI=100-{100 \over {1+RS}}

    //

    // The smoothed moving averages should be appropriately initialized with a simple moving average using the first n values in the price series.

    //

    //         Interpretation

    //

    // Basic configuration:   Relative strength index 14-period

    //

    // The RSI is presented on a graph above or below the price chart. The indicator has an upper line, typically at 70, a lower line at 30, and a dashed mid-line

    // at 50. Wilder recommended a smoothing period of 14 (see exponential smoothing, i.e. α = 1/14 or N = 14). 


    // Stochastic RSI (prt)
    //
    // https://www.prorealcode.com/topic/errore-calcolo-rsi/#post-114040
    //
    Periods = 14                                    //14
    Ob      = 70                                    //70 - 30
    Ob        = max(0,min(100,Ob))                    //0 - 100
    Os        = 100 - Ob
    Periods   = max(2,min(999,Periods))               //2 - 999
    MyRsi     = RSI[Periods](close)
    MinRSI    = lowest[Periods](MyRsi)
    MaxRSI    = highest[Periods](MyRsi)
    StochRSI  = (MyRsi-MinRSI) / (MaxRSI-MinRSI) * 100
    RETURN StochRSI AS "Stochastic RSI",Ob AS "Ob",Os AS "Os"
    


    Pour un nombre donné de barres, une EMA a besoin d’environ deux fois plus de barres que de périodes.

    Iván González thanked this post
    #258892 quote
    Nicolas
    Keymaster
    Master

    Le RSI de la plateforme utilise bien le lissage de Wilder. Pour les autres points je vais essayer d’apporter plus de détails dans un post à venir.

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

Compréhension fine des formules utilisées par PRT


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
ZeHannibal @hannibal Participant
Summary

This topic contains 2 replies,
has 3 voices, and was last updated by Nicolas
11 hours, 18 minutes ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 03/09/2026
Status: Active
Attachments: No files
Logo Logo
Loading...