Bonjour,
@Nicolas…Ce code détecte les Pin Bar sur des niveaux de prix pré-enregistrés.
Aurais-tu une formulation afin de rendre la modification de ce code plus intuitive, si je souhaitais passer de 5 à 50 niveaux de prix(par exemple) sans être à chaque fois obligé de modifier la ligne 20?
Merci
//Pin Bar on Price | Indicator
price1 = 15000
price2 = 14500
price3 = 14000
price4 = 13500
price5 = 13000
price6 = 12500
price7 = 12000
price8 = 11500
price9 = 11000
price10 = 10500
//Candle Pin bar on Price Detection
shootingstar = 0
hammer = 0
IF(high>price1 and low<price1 or high>price2 and low<price2 or high>price3 and low<price3 or high>price4 and low<price4 or high>price5 and low<price5 or high>price6 and low<price6 or high>price7 and low<price7 or high>price8 and low<price8 or high>price9 and low<price9 or high>price10 and low<price10) THEN
// Définition Pin Bar (Shootingstar or Hammer)
IF (high - low) > 3* abs(close - open) THEN
IF (open - low) < 0.30*(high - low) OR (close - low) < 0.30*(high-low) THEN
shootingstar = -1
ENDIF
IF (high - open) < 0.30*(high - low) OR (high - close) < 0.30*(high-low) THEN
hammer = 1
ENDIF
ENDIF
ENDIF
RETURN shootingstar as "Shooting Star", hammer as "Hammer"
Vous pouvez résoudre le problème en utilisant les divisions et la fonction ROUND qui arrondit l’entier le plus proche.
Si vous voulez, comme dans mon exemple de code, signaler chaque passage de prix tous les 100 points, indiquer un diviseur de 100 et un déplacement de 50 points pour arrondir au plus proche; donc 12730 pour LOW et 12773 pour HIGH serait arrondi à 127 et 128, indiquant une intersection qui, en réalité, n’existait pas. Ainsi 12730 devient 12680 puis 127, et 12773 devient 12723 puis 127, ainsi le passage n’a pas eu lieu.
Si vous voulez que l’intersection soit signalée tous les 500 points indique un diviseur de 500 et mettre 250 de déplacement.
J’ai utilisé le traducteur Google, j’espère avoir été clair.
//Pin Bar on Price | Indicator
ONCE Deplacement = 50 * pipsize
ONCE Diviser = 100
x = round((high - Deplacement) / Diviser)
y = round((low - Deplacement) / Diviser)
//Candle Pin bar on Price Detection
shootingstar = 0
hammer = 0
IF x - y then //Si ce ne sont pas les mêmes, il y avait une intersection
// Définition Pin Bar (Shootingstar or Hammer)
IF (high - low) > 3* abs(close - open) THEN
IF (open - low) < 0.30*(high - low) OR (close - low) < 0.30*(high-low) THEN
shootingstar = -1
ENDIF
IF (high - open) < 0.30*(high - low) OR (high - close) < 0.30*(high-low) THEN
hammer = 1
ENDIF
ENDIF
ENDIF
RETURN shootingstar as "Shooting Star", hammer as "Hammer"
On pourrait s’inspirer de ce screener qui détecte les percements du Close des chiffres ronds: Round number – Sweet spot Screener
A la place du test des Close, utiliser tes patterns de Pinbar, qu’en penses-tu ?
Bonjour Roberto,
Merci pour l’astuce et tes explications qui me serviront peut être ultérieurement!
Mais dans le cas présent ce n’est pas du tout ça que je cherche à faire! Les “Price 1 à 10” sont là à titre d’exemple. Au quotidien, je peux être amené à modifier les niveaux “Price” plusieurs fois!
Ce que je souhaiterai, c’est une écriture simplifié du code afin de modifier rapidement l’algorithme sans retoucher systématiquement les lignes 3 à 12 et 20!
Merci quand même 😉
Donc ça n’est pas basé sur les chiffres ronds ? Comment modifier les niveaux “price” à la volée si tu nous donnes pas comment les trouver ?
Salut Nicolas…
Probuilder ne prenant pas en compte le multitimeframe! La façon dont je fixe “Price” n’a pas grande importance dans ma demande.
Ce que je souhaiterai optimiser c’est le temps que je passe à rentrer de nouvelles données dans le code. Car je suis obligé de les rentrer manuellement!!!
Actuellement je dois créer une nouvelle ligne à chaque fois.(Ex: “Price 11” en ligne 13 et rajouter “Price 11” ligne 20 etc…)
Si je suis amené à intervenir sur le code plusieurs fois dans une même séance, j’aimerai qquechose de plus intuitif.
J’imagine une seule ligne “Price” du genre : Price = 12100,12125,1235 etc…Que je pourrai modifier à souhait et qui enverrait l’information ligne 20 sans avoir besoin de modifier celle-ci aussi!
Je recherche juste une simplification d’utilisation du code existant!
PRT ne supporte pas les vecteurs, il n’est donc pas possible de créer des valeurs dynamiques.
Vous pouvez entrer des valeurs facilement modifiables uniquement à l’aide des propriétés de l’indicateur.
Vous devez ajouter le nombre de variables que vous pensez pouvoir utiliser (je ne sais pas si ProBuilder a une limite maximale), par exemple 20, et modifier le IF en indiquant tous les 20.
Puis à partir des propriétés de l’indicateur vous pouvez faire varier les prix quand vous le souhaitez, en mettant ZERO ceux qui ne vous intéressent pas.
Je me doutais de ta réponse Alain et Roberto a raison, cela nécessite d’utiliser un tableau de données (pour faire des variables dynamiquement), hors ProBuilder exige de savoir la quantité de variables et leurs noms dés l’exécution du code. Donc hormis utiliser la solution de Roberto du post précédent ^^ ou alors utiliser des “pas” entre chaque prix et faire une boucle, je ne vois pas d’autres solutions.
Super Roberto Merci…
Ça a l’air intéressant comme solution!
Bonne soirée