Quid de l’intérêt des tableaux ?
Forums › ProRealTime forum Français › Support ProBuilder › Quid de l’intérêt des tableaux ?
- This topic has 18 replies, 6 voices, and was last updated 1 year ago by
Nicolas.
-
-
10/23/2022 at 12:48 PM #202943
Je ne comprends pas l’intérêt des tableaux dans prorealtime… Alors peut-être n’ai je pas tout compris ou mon niveau de programmation en prorealtime est trop basique pour comprendre ?!
Si j’ai bien compris :
- les tableaux dans prorealtime n’ont qu’une seule dimension. C’est bien un tableau avec une seule ligne ?
- Les données enregistrées dans le tableau sont indépendante de la bar/du chandelier en cours. C’est la seule chose qui différencie un tableau d’une variable classique ?
- Une fois que l’on a enregistré une donnée dans une case (pourquoi parler de colonne quand il n’y a qu’une seule ligne?!), on ne peut plus l’effacer ou la changer. Si c’est possible, quel est l’instruction pour le faire ?
- Si c’est possible d’effacer une case… Est ce que les données des cases suivantes reculent d’une case pour ne pas laisser une case vide (à la manière des piles qui existaient en langage machine) ?
Que peut-on faire avec un tableau que l’on ne peut faire sans ?
Merci d’avance pour votre éclairage, je ne saisi pas trop l’intérêt des tableaux ou comment en tirer complètement profit.
10/24/2022 at 9:44 AM #202970Bonjour, point par point :
« Une dimension »… pour le moment… on ne sait pas encore si la suggestion d’augmenter le nombre de dimensions sera accordée. On peut toutefois faire du 2 dimensions limité, la limite étant qu’il faut que le nombre N d’éléments dans la 2e dimension soit connu d’avance, et pas trop grand (praticité d’écriture…), puisque si on a fait des math matricielles N vecteurs à même 1 dimension feront 1 matrice 2d à N éléments sur sa 2e dimension
« données indépendantes des chandeliers » c’est la chose la plus importante pour garder le plus de liberté possible
« enregistré dans une case/ne peut plus la changer » (colonne ou ligne, peu importe, s’il y a une dimension c’est le long de « la » dimension dans un cas comme dans l’autre). Si, on peut la changer, ou la remettre à zéro : avec un tableau qui s’appelle $tableau, en son rang i, en écrivant simplement $tableau[i]=0 (ou = sa nouvelle valeur) pour lui réattribuer au rang i une nouvelle valeur s’il en avait déjà une
« cases reculent » non, chaque élément reste à son rang
« Que peut-on faire avec un tableau que l’on ne peut faire sans ? » En ce qui me concerne, transformation de mon volume profile PRTv10.3(sans tableaux) à nombre fixe de 80 barres d’épaisseur variable en un volume profile PRTv11(avec tableaux) à nombre variable de barres d’épaisseur fixe, tpo profiles, et footprint uptick/downtick (à défaut de pouvoir être bid/ask tant qu’on ne peut pas lire le carnet)… mais aussi dans les requêtes du forum tu as peut-être vu passer des besoins de mise en mémoire d’événements quel que soit le moment et le niveau, tels que : plusieurs plus hauts/plus bas dans un ordre voulu, mémoriser des divergences, mémoriser des gaps, etc… de façon générale tout ce qui va avoir besoin d’être mémorisé sans savoir à l’avance combien il y en aura sur 1 dimension, car avec l’indexation par rang pour un seul nom (de tableau), tu peux travailler en quantité indéfinie à l’avance au lieu de devoir nommer sans tableau par variables un nombre fixe connu d’avance d’éléments.
1 user thanked author for this post.
10/24/2022 at 9:49 AM #202971On parle de tableaux, avec des colonnes, car on a l’habitude de représenter une variable en tableau comme dans l’image attachée.
L’intérêt des arrays (variables en tableaux), c’est qu’on peut en créer à la volée autant qu’on veut (et y revenir par la suite pour utiliser leurs informations rapidement).
Avec des variables ordinaires, on doit savoir à l’avance combien de variables seront nécessaires.
Si par exemple, je veux enregistrer tous les fractals de période 10 de mon historique, sans un tableau je ne pourrais pas, hors ici je peux faire:
1234if fractalHigh then // je détecte un nouveau fractal$top[i] = fractalValue // je stocke sa valeur dans la colonne ii=i+1 // j'incrémente la colonne pour le prochain stockageendifPeu importe la quantité de fractals qu’on a à stocker, une seule variable le permet !
Imagine que tu veuilles calculer un niveau de support sur un niveau de prix donné. Sans ce tableau qu’on vient de créer, tu devrais refaire une boucle complète dans l’historique, avec les problèmes de temps de calcul que l’on connaît et une précision moindre..
Beaucoup d’exemples dans le sujet anglophone: https://www.prorealcode.com/topic/array-variables-availability-in-prorealtime/
Exemple récent dans la library: Supply & Demand – Order Blocks
Dans le marketplace:
https://market.prorealcode.com/product/graphic-patterns-indicator/
https://market.prorealcode.com/product/tpo-profiles-for-prorealtime/
https://market.prorealcode.com/product/horus-footprint-pack/
1 user thanked author for this post.
10/24/2022 at 2:24 PM #202981Bonjour, point par point :
« Si, on peut la changer, ou la remettre à zéro : avec un tableau qui s’appelle $tableau, en son rang i, en écrivant simplement $tableau[i]=0 (ou = sa nouvelle valeur) pour lui réattribuer au rang i une nouvelle valeur s’il en avait déjà une
Si l’on peut réattribuer une valeur à n’importe quelle colonne du tableau, que retourne lastset ? i ? ou la colonne la plus à droite du tableau ?
D’ailleurs, à quoi servent les instructions ArrayMin et ArrayMax ? Rien à voir avec les colonnes ? Ces instructions comparent le contenu du tableau ?10/24/2022 at 2:26 PM #202982Bonjour, point par point :
« cases reculent » non, chaque élément reste à son rang.
Est-il alors au moins possible de diminuer la longueur du tableau, si l’on “efface” ou si l’on met à zéro une case… Y a-il une instruction pour le nombre max d’élément dans le tableau ?
10/24/2022 at 2:52 PM #202984de façon générale tout ce qui va avoir besoin d’être mémorisé sans savoir à l’avance combien il y en aura sur 1 dimension, car avec l’indexation par rang pour un seul nom (de tableau), tu peux travailler en quantité indéfinie à l’avance au lieu de devoir nommer sans tableau par variables un nombre fixe connu d’avance d’éléments.
L’intérêt des arrays (variables en tableaux), c’est qu’on peut en créer à la volée autant qu’on veut (et y revenir par la suite pour utiliser leurs informations rapidement).
Avec des variables ordinaires, on doit savoir à l’avance combien de variables seront nécessaires.
C’est là que je ne saisi pas la nuance… Je m’explique.
Avant (sans les tableaux) et même maintenant (car je n’ai pas pris le temps de me pencher sur les tableaux), j’utilise tout simplement une variable classique pour mémoriser en quantité indéfinie à l’avance tout événement que je souhaite mémoriser…12345if fractalHigh then // je détecte un nouveau fractaltop = 0 // je notifie qu'il y a un fractal dans ce dernier chandelierelsetop = top + 1 // j'incrémente ma variable lorsqu'il n'y a pas de nouveau fractal détectéendifEnsuite, pour retrouver le dernier fractal détecté : il est stocké dans fractal[top]
Si l’on veut le précédant top, il suffit de faire : PreviousTop = Top + top[top+1]
Et ainsi de suite jusqu’au premier, si l’on a pris le soins d’incrémenté un compteur de fractal détecté…C’est pourquoi je ne comprends pas pourquoi les tableaux (tels qu’ils sont implémentés actuellement) seraient indispensables…
Surtout que les tableaux (tels qu’ils sont implémentés actuellement) ne semblent pas dynamiques (taille du tableau que l’on pourrait réduire ou augmenter, et pas seulement augmenter…)Mais encore une fois, j’ai peut-être mal saisi toute la porté des tableaux et comment les utiliser pour en tirer le meilleur.
10/25/2022 at 7:45 AM #202998Autre question que je me pose concernant les tableaux.
A priori, on peut y stocker le barindex du dernier chandelier lorsqu’un événement que l’on veut pouvoir retrouver se produit.
Seulement comment retrouver toutes les données relatives à un barindex donné ? Par exemple, si j’ai besoin du close, ou du high, ou du Rsi[14](close) d’un barindex stocké dans mon tableau… Comment puis-je faire pour le retrouver ? Close[$tableau[i]] (sachant que $tableau[i] contient un barindex et non le numéro d’un chandelier qui est censé être incrémenté à chaque bar…Est-ce à dire qu’il faut dès le départ prévoir d’autres tableaux avec toutes les données dont on aurait besoin ? (un tableau avec le close, un avec le high, un autre avec le RSI…
J’ai l’habitude par exemple de mettre en mémoire les plus haut du RSI, en utilisant une variable, de la manière suivant :
IF RSI[14](close[1])>RSI[14](close[2]) AND RSI[14](close)<=RSI[14](close[1]) THEN
PicRSI = 1
ELSE
PicRSI = PicRSI[1] + 1
ENDIFPar la suite, si j’ai besoin de retrouver le précédant pic, il est directement accessible dans la variable PicRSI, mais je peux aussi accéder à toutes les autres données de la bar : Close, high, RSI, etc…
Si je veux le pic antérieur au précédant, je le retrouve facilement :
PreviousPic = PicRSI + PicRSI[PicRSI]
Et là encore, j’ai accès à toutes les données du chandelier [PreviousPic], son close, son high, son RSI…Est-il possible de faire la même chose avec les tableaux, en plus simple ou en plus rapide ?
Merci d’avance pour votre aide, je suis perdu avec les tableaux…10/25/2022 at 10:28 AM #203004Bjr, post par post,
#202981 : Lastset retourne le plus grand rang où on a activement entré une valeur, même si une valeur de rang plus bas a été modifiée. Arraymin et arraymax donnent respectivement la plus petite et la plus grande valeurs entrées dans le tableau quel que soit leur rang.
#202982 : si tu as un tableau avec des cases vides ou à zéro que tu veux éliminer pour diminuer la taille du tableau (je n’ai jamais eu à ce jour besoin de diminuer une taille de tableau les rangs non utilisés ou à zéro au milieu ne me gênant pas alors que changer mes numéros de rangs en cours de route m’obligerait à en tenir compte via programmation supplémentaire), alors tu peux faire un petit bout de code qui transfère rang par rang les valeurs depuis le tableau avec zéro ou vide que si elles sont différentes de zéro vers un nouveau tableau avec ses propres rangs . Le nombre max d’élément est 1000000 par tableau, sans instruction particulière.
#202984 : en prenant ton exemple de top, tu illustres avec un cas où le parcours du rang est lié à l’historique, or ce n’est pas le cas général pour celui qui veut un tableau avec indexation du rang non liée à l’historique. D’autre part avec ton exemple de top, tu sais bien que tu ne peux pas réécrire sur ancienne valeur il y a n bougies de cela, top[n], mais avec un tableau, si, et selon le problème à résoudre on peut vouloir mettre à jour une valeur passée du tableau. Tu utilises le mot « indispensable », on ne va pas dire qu’ils sont indispensables de façon générale pour tout le monde et pour tout problème à résoudre. Même si je les utilise beaucoup dans certains codes en parallèle de mon code principal pour des problèmes complexes en général à but de représentation graphique, mon algo de trading principal fonctionne très bien sans tableau par exemple. Personne n’oblige à s’en servir si on arrive à résoudre un problème sans eux. Mais inversement si on part d’un problème qu’on peut aisément résoudre sans, on ne peut pas en déduire pour autant qu’ils sont inutiles de façon générale.
#202998 : oui, si tu as ton barindex mémorisé, appelons-le « mabarre », qu’il vienne d’un tableau (mabarre=$tableau[i]) ou qu’il ait pu être mis en mémoire dans une variable pour un problème simple ne nécessitant pas de tableau, toutes les données du chandelier associé sont accessibles, non pas en mettant mabarre entre crochets (cf ton Close[$tableau[i]]) mais puisque pendant une barre lue les close, high etc sont accessibles via nombre de barres précédentes, en y faisant référence avec la différence « barindex-mabarre », donc close[barindex-mabarre] etc…
1 user thanked author for this post.
10/25/2022 at 11:17 AM #203006Merci beaucoup JC_Bywan pour les explications claires et précises. J’y vois plus claire maintenant… Et surtout je n’avais pas pensé à la soustraction toute simple barindex-mabarre :-)))
Le gros avantage du tableau (si j’ai bien compris cette fois-ci) est d’occuper moins de mémoire qu’avec mon système de variable donnant la position précédente, la possibilité de réaffecté des colonnes passées car n’étant pas liées historiquement aux chandeliers et peut-être aussi une exécution un peu plus rapide…
Encore merci!
10/25/2022 at 3:14 PM #203019Avec ton principe, si tu veux connaître les 10 derniers fractals, il faudra que tu recherches en arrière les 10 dernières fois ou ta variable TOP a changé (par ailleurs “top” est un mot réservé désormais, mais c’est un autre sujet). Avec un tableau, on récupère juste les 10 dernières colonnes.
ou si je veux savoir la valeur du Nième dernier fractal, je pourrais faire:
12n = 5f = $top[lastset(top)-n] //soit la dernière colonne moins NJe pense qu’il faut que tu interprètes bien tous les exemples disponibles pour en saisir tout l’intérêt.
Par ailleurs les tableaux sont présents dans tous les langages de programmation, il était indispensable de les ajouter à ProBuilder.
https://fr.wikipedia.org/wiki/Tableau_(structure_de_donn%C3%A9es)
1 user thanked author for this post.
10/25/2022 at 4:10 PM #20303604/30/2023 at 4:14 PM #213900Bonjour à tous,
Je bute depuis un moment sur une difficulté concernant les tableaux :
Pour mes backtests, je souhaite mettre en variable le prix d’entrée de ma position. Simple : PrixEntrée = tradeprice. Là où je me perds c’est que je souhaite prendre un profit partiel si gain de 100 €, en vendant 50% de ma position, mais à ce moment là le tradeprice initial est modifié. Or je souhaite conserver la mémoire du prix d’entrée initial pour mettre en place une nouvelle stratégie de cloture de position.
J’ai essayé d’entrer ce tradeprice dans un tableau, pensant que cela serait la solution… J’entre la commande $PrixEntree[0] = tradeprice dès ma prise de position :
If MesConditions then
Buy 10 shares at market
$PrixEntree[0] = tradeprice
Endif
Cela ne fonctionne pas … le tradeprice n’en fait qu’à sa tête…
Figer un prix d’entrée dans une variable, que l’on puisse rappeler, est-il possible ?
Merci de votre aide !
04/30/2023 at 4:20 PM #21390104/30/2023 at 4:22 PM #21390204/30/2023 at 5:05 PM #213905 -
AuthorPosts
Find exclusive trading pro-tools on