bonjour,
Je voudrais calculer le rescaled range (https://en.wikipedia.org/wiki/Rescaled_range) pour arriver à l’exposant de Hurst (mémoire longue) sur une période glissante de n périodes
Je n’arrive pas à programmer les boucles qui servent à :
1- calculer les écarts à la moyenne sur n périodes (passées bien sûr),
2- faire pour chaque période le cumul de ces écarts,
3- prendre les maxi et mini de cette somme (toujours sur n périodes).
Merci d’avance pour votre aide.
Il y a déjà quelques topics au sujet des formules de Hurst, mais je pense que ta demande fait référence à ce type d’indicateur:
https://www.prorealcode.com/topic/indicateur-fractal-bands-conversion-mq4-vers-prorealtime/
https://www.prorealcode.com/prorealtime-indicators/fractal-bands/
On peut trouver pas mal de choses avec l’outil de recherche du site.
Bonjour,
Merci mais ça ne me semble pas correspondre à ce que je cherche. J’avais bien sûr utilisé un moteur de recherche avant de poster mon message…
Espérant trouver une solution…
Le rescaled range, ça n’est pas la première partie du FDI (Fractal Dimension Index) ?: https://www.prorealcode.com/prorealtime-indicators/fractal-dimension-index-fdi/
Euh…non. Pour le calcul du R/S, on prend la moyenne (des rentabilités et pas des prix car il faut que la série soit stationnaire) sur la période considérée. Ensuite on calcule les écarts à la moyenne pour chaque période. On fait la somme de ces écarts puis on prend le plus grand et le plus petit de ces écarts. Etc, etc.
Dans le FDI, c’est le cours le plus haut et le plus bas qui sont à la base du calcul.
Merci pour l’aide…
En lisant la description du lien Wikipedia, je comprends que le range de la série est la valeur la plus haute moins la valeur la plus basse (notion statistique élémentaire). Puis de diviser ce résultat par l’écart type de cette même série pour obtenir le “rescaled range”.
Avec ta dernière description je pense que je pourrai m’en sortir, mais que prends-tu en considération pour les valeurs de début et fin de périodes et revenu pour la “rentabilité” ?
On “stationnarise” la série des cours en travaillant sur (prix – prix de la période précédente)/prix de la période précédente (rentabilité ou return).
Je n’ai pas vraiment compris la question pour valeurs de début et de fin de période… Ce que j’entendais par période, c’est un jour sur graphique daily, une heure sur graphique horaire, etc.
Je ne sais pas si j’ai été assez clair…
Voilà ce que j’ai fais:
period = 100
MAtype = 1
rent = (customclose-customclose[1])/customclose[1]
if barindex>period then
avg = average[period,MAtype](rent)
//SQUAREROOT[(summation(from d = 1 to n)(Close-Moving average on n days)²]
ecart = SQR(summation[period](square(rent-avg)))
sum = summation[period](ecart)
hh = highest[period](sum)
ll = lowest[period](sum)
diff = hh-ll
endif
return diff
Ici on retourne que la différence “diff”, je ne sais pas par quelle valeur il faut la diviser ensuite, par ecart ou par sum?
Bonjour,
Gros merci pour la proposition de code et désolé pour la réponse tardive.
Ca me parait bien, je me demande pourquoi je suis parti dans des boucles quand j’ai essayé de le faire !!
C’est un détail mais, pour l’écart à la moyenne, on prend les valeurs réelles négatives ou positives (pas besoin de carré/racine ou valeur absolue). Par ailleurs, il ne me semble pas conforme d’utiliser summation dans le calcul de ecart. Ecart est la différence, pour chaque observation sur la période (period), entre rent et la moyenne des rent. Si je comprends bien, le langage Prorealtime calcule l’historique de cette valeur automatiquement et on peut alors faire la somme
diff doit donner le Rescaled range (R/S) après les petites modif décrites à la ligne précédente. Pour obtenir R/S, il suffit de diviser diff par l’écart-type des rent calculé sur la même période.
Ensuite, on obtient l’exposant de Hurst en divisant le log de R/S par le log de period.
Pour info, si on suit Chamoli and al., 2007 (Computers & Geosciences 33), il faudrait éviter de choisir une période plus petite que 180 observations.
Encore merci.
Bonjour,
J’ai essayé de de faire les modifs à partir de votre code (cf. ci-dessous) mais j’ai le même problème qu’avec ce que j’avais fait : les valeurs initiales de l’exposant de Hurst sont très basses voire négatives, ce qui est plus qu’improbable ! Ensuite, il y a une hausse progressive pour aller vers des valeurs très réalistes.
//duree calcul Hurst exponent per = 160
rent = (close - close[1])/close[1]
if barindex>per then
avg = average[per](rent)
ecart = rent-avg
sum = summation[per](ecart)
hh = highest[per](sum)
ll = lowest[per](sum)
diff = hh-ll
stdret = STD[per](rent)
endif
rs = diff / stdret
hu = LOG(rs) / LOG(per)
b = 0.5
RETURN hu AS "Exposant de Hurst", b AS "0,5"
J’obtiens des valeurs qui partage la même échelle, peu importe l’instrument, ci-dessous DAX ou GBP/JPY. Quelle devrait être le type de valeur ?
Au-dessus de 0,5, les valeurs faibles (fortes) de variation de l’indice tendent à être suivies par des valeurs faibles (fortes) (persistance), au-dessous, de 0,5, c’est le contraire (anti-persistance). A 0,5, c’est une marche au hasard. Plus l’écart à 0,5 est important, plus la caractéristique est marquée. Le domaine de définition est environ -0,9<=>+0,9.
N’avez-vous pas des valeurs curieuses (très faibles) sur les premiers calculs, juste après que la condition sur barindex soit remplie ?
Cela semble logique au regard des variables hh et ll qui ont besoins de 160 périodes calculés de sum pour obtenir une plage complète.
Je crois que j’ai compris. Il y a probablement un souci avec le calcul de sum. Ce n’est pas très facile à expliquer mais, si on prend un calcul sur 200 périodes, sum[199] (1er calcul pour 200 périodes) est égale à ecart puis sum[198] est égale à sum[199] + ecart[198], etc, etc. Ensuite, on prend le max et le min de sum sur les 200 calculs.