Utiliser une variable dynamique comme période pour une SMA
Forums › ProRealTime forum Français › Support ProBuilder › Utiliser une variable dynamique comme période pour une SMA
- This topic has 3 replies, 2 voices, and was last updated 2 days ago by Bodaris.
-
-
12/14/2024 at 10:05 PM #241428
Bonjour à tous,
Je travaille actuellement sur un projet d’indicateur dans ProRealTime, et je rencontre une limite technique que je souhaiterais soumettre à vos expertises pour confirmer ou infirmer mes observations. Voici un résumé de la problématique, des tentatives effectuées, et de mes conclusions.
—
### **Ce Que Je Cherche à Faire**
Je souhaite utiliser une période dynamique pour calculer une moyenne mobile simple (SMA) dans ProRealTime. L’idée est que la période de la SMA soit basée sur une variable calculée dynamiquement, appelée
BestX
. Cette variable est obtenue à partir d’une logique précise qui détecte les niveaux pertinents sur le graphique.Exemple simplifié :
prorealtime
1234567IF BestX > 1 THENSMAPrice = Average[BestX](Close) // Calculer une SMA avec la période dynamiqueELSESMAPrice = 0ENDIFRETURN SMAPrice
Cependant, cette approche renvoie une erreur car ProRealTime exige que la période soit un entier positif **constant** et non une variable dynamique.—
### **Tentatives et Expériences**
Voici ce que j’ai testé pour contourner cette limitation :
1. **Arrondi et Quantification de la Période Dynamique** :
– J’ai essayé d’arrondirBestX
à l’entier le plus proche et de le limiter à des plages fixes (5, 10, 20, 50).
– Exemple :
prorealtime
1234567891011121314c2 = Average[20](BestX) // Moyenne glissante de BestXPeriodDynamic = ROUND(c2)IF PeriodDynamic <= 5 THENPeriodDynamic = 5ELSEIF PeriodDynamic <= 10 THENPeriodDynamic = 10ELSEIF PeriodDynamic <= 20 THENPeriodDynamic = 20ELSEPeriodDynamic = 50ENDIFResistanceDynamic = Average[PeriodDynamic](Close)RETURN ResistanceDynamic
**Résultat** : Cela fonctionne mais ne renvoie que la valeur de la SMA calculée (le prix moyen) et non la période dynamique elle-même.2. **Stockage dans un Array** :
– J’ai pré-calculé plusieurs SMA fixes (SMA5, SMA10, etc.) et tenté de choisir dynamiquement celle qui correspond àBestX
via un array.
– Exemple :
prorealtime
12345678910$SMA[5] = Average[5](Close)$SMA[10] = Average[10](Close)$SMA[20] = Average[20](Close)$SMA[50] = Average[50](Close)IF isset($SMA[PeriodDynamic]) THENResistanceDynamic = $SMA[PeriodDynamic]ELSEResistanceDynamic = 0ENDIF
**Résultat** : ProRealTime demande toujours un entier constant pour l’indice de l’array, ce qui bloque l’utilisation de variables dynamiques commePeriodDynamic
.3. **Conditions Fixes** :
– Plutôt que d’utiliser des arrays, j’ai créé des conditions explicites pour chaque SMA fixe.
– Exemple :
prorealtime
1234567891011121314151617SMA5 = Average[5](Close)SMA10 = Average[10](Close)SMA20 = Average[20](Close)IF BestX > 1 THENIF BestX <= 5 THENSMAPrice = SMA5ELSEIF BestX <= 10 THENSMAPrice = SMA10ELSESMAPrice = SMA20ENDIFELSESMAPrice = 0ENDIFRETURN SMAPrice
**Résultat** : Cela fonctionne, mais encore une fois, la valeur retournée est celle de la SMA (le prix) et non la période dynamique utilisée.—
### **Conclusions**
1. **Blocage Principal :**
– ProRealTime exige une période constante (entier fixe) dans les fonctions commeAverage[x](Close)
.
– Même les valeurs arrondies ou quantifiées ne sont pas acceptées si elles proviennent de variables dynamiques commeBestX
.2. **Ce Qui Fonctionne :**
– Les SMA fixes et leur sélection dynamique par conditions sont exploitables.
– Cependant, elles ne permettent pas de refléter directement une logique totalement dynamique comme celle visée initialement.3. **Limitation Confirmée (?) :**
– Il semble impossible d’utiliser une variable dynamique comme période pour une SMA dans PRT.
– Avant d’abandonner cette piste, je souhaite valider cela avec vous.—
### **Questions**
1. **Est-ce Confirmé ?**
– ProRealTime ne permet-il vraiment pas d’utiliser une variable dynamique comme période dans une fonction SMA (même après arrondi ou quantification) ?2. **Solutions Alternatives :**
– Si vous avez rencontré ce type de problème, auriez-vous des idées ou des contournements qui pourraient fonctionner dans ce cas ?Merci d’avance pour vos réponses et vos conseils. 😊
Je rajoute le code d’origine que j’utilise pour calculer la variable dynamique Bestx sachant que je veux l’utiliser comme cela : MySMABESTX=Average[Bestx](close)
BESTX = la variable dynamique1234567891011121314151617181920212223242526272829N = 100 // Maximum PeriodCloseTarget = High // Le plus haut de la bougie couranteBestX = 0 // Période de la SMA la plus procheBestSMAX = 0 // Valeur de la SMA la plus procheMinDifference = 1000000 // Différence minimale initialisée à une grande valeur// Parcourir les périodes pour calculer les SMAFOR x = 2 TO N DOIF BarIndex >= x THEN // Vérifier qu'il y a assez de données pour calculer la SMASMAX = Average[x](Close) // Calculer la SMA pour x périodesDifference = ABS(SMAX - CloseTarget) // Calculer la différence avec le plus haut// Si cette SMA est plus proche du plus haut, la sauvegarderIF Difference < MinDifference THENMinDifference = DifferenceBestX = xBestSMAX = SMAXENDIFENDIFNEXT// Afficher les résultats pour la bougie courante//DrawText("Période SMA", BarIndex, High + 5) COLOURED("blue")DrawText(BestX, BarIndex, High + 10) COLOURED("green") // Afficher la période//DrawText("Valeur SMA", BarIndex, High + 15) COLOURED("blue")//DrawText(BestSMAX, BarIndex, High + 20) COLOURED("green") // Afficher la valeur de la SMA// Retourner la meilleure SMA trouvéeRETURN BestSMAX12/15/2024 at 5:26 PM #241442J’ai l’impression que tu compliques ton problème de base qui m’a l’air très simple…
Exemple : https://www.tradingview.com/script/oejqyqHP-Adaptive-Moving-Average-AMA/
A chaque bougie tu calcules ton bestX
La valeur de la SMA à “barindex-n” est :
Average[BestX[n]](Close[n])Tu peux aussi stocker la valeur de la SMA dans un tableau à la barindex pour chaque nouvelle bougie.
1 user thanked author for this post.
12/15/2024 at 5:28 PM #241443https://www.tradingview.com/script/ZSyG0zv6-Adaptive-Moving-Average-AMA-Signals-Zeiierman/
C’est ça que tu cherches à faire ? 🙂
1 user thanked author for this post.
12/16/2024 at 7:44 AM #241447Bonjour Lucas,
Je te vous remercie beaucoup pour votre réponse et votre intérêt. Effectivement, j’aurais pu y pensé. Mais ce n’est pas tout à fait pareil dans la finalité.
- AMA est une moyenne mobile avancée, qui lisse les mouvements en fonction de la volatilité.
- BestX, en revanche, calcule une valeur optimale pour aligner une SMA sur des niveaux stratégiques, comme un plus haut ou un plus bas. Cette approche n’est pas lissée, elle est ciblée. Mon idée est de trouver la valeur de la période de la moyenne mobile dynamique qui fait support ou résistance.
Je cherche à identifier des niveaux de résistances ou supports dynamiques.
j’ai contourné mon problème avec ce code, le résultat est un peu différent, mais cela marche.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849// Initialisation des SMA fixesSMA1 = Average[1](Close)SMA2 = Average[2](Close)SMA3 = Average[3](Close)// ... Jusqu'à SMA100SMA100 = Average[10](Close)// Initialisation des variablesHighestPeriod = 0// Comparer le prix à chaque SMAFOR Period = 1 TO 100 DOIF high <= Average[Period](Close) THENHighestPeriod = PeriodELSE//BREAK // Arrêter si le prix dépasse une SMAENDIFNEXTc1=Average[highestperiod](close)c2=close>highest[50](c1)[1]// Retourner la période correspondante// Initialisation des SMA fixesSMA11 = Average[1](Close)SMA21 = Average[2](Close)SMA31 = Average[3](Close)// ... Jusqu'à SMA100SMA1001 = Average[10](Close)// Initialisation des variablesHigestPeriod1 = 0// Comparer le prix à chaque SMAFOR Period1 = 1 TO 100 DOIF low <= Average[Period1](Close) THENHighestPeriod1 = Period1ELSE//BREAK // Arrêter si le prix dépasse une SMAENDIFNEXTc11=Average[highestperiod1](close)c21=close>highest[50](c11)[1]// Retourner la période correspondanteRETURN c11//HighestPeriod, HighestPeriod1// AS "Période Supérieure"//RETURN HighestPeriod AS "Période Supérieure"Visuellement la différence avec l’AMA en capture d’écran 1
La capture 2 c’est ma variable affichée avec proorder au lieu de probuilder pour contourner l’impossiblité d’utiliser une variable dynamique comme période de moyenne mobile sur probuilder. j’ai une légère différence sur le comportement
Mon idée et but de départ ressemble à la capture 3
Je vous remercie pour votre solution proposée, elle est très intéressante. Mais elle ne répond pas à ce que cherche exactement. Mais vous avez peut-être raison, je me complique éventuellement trop la vie :p
-
AuthorPosts
Find exclusive trading pro-tools on