ProRealCode - Trading & Coding with ProRealTime™
Bonjour
J’aimerai écrire le code suivant :
“Tant que les clôtures sont au dessus de la MM200 et que sur une période de X bougies il n’y a pas plus de X clôture ou X ouverture sous cette MM200 – l’indicateur s’affiche en fond vert” et inversement
Je pense que c’est avec la fonction SUMMATION mais je n’y arrive pas :
Indicateur = 0
MM1 = exponentialaverage[200]//TENDANCE DE FOND
MM2 = exponentialaverage[20]
MM3 = exponentialaverage[7]
IF Close>MM1 and MM2>MM1 and MM3>MM1 and summation[32](Close<MM1 or Open<MM1)<32 THEN
Backgroundcolor(0,255,0,80)
ENDIF
IF Close<MM1 and MM2<MM1 and MM3<MM1 and summation[32](Close>MM1 or Open>MM1)<32 THEN
Backgroundcolor(255,0,0,80)
ENDIF
RETURN indicateur
Pouvez-vous m’aider ?
Merci
Bonjour J’ai presque réussi comme ceci mais j’aimerai que les consolidations apparaissent également en tendance BAISSIERE ce qui n’est pas le cas.
Indicateur = 0
MM1 = exponentialaverage[200]//TENDANCE DE FOND
MM2 = exponentialaverage[20]
MM3 = exponentialaverage[7]
//TENDANCE DE FOND
IF Close>MM1 THEN
Backgroundcolor(0,255,0,80)
ELSIF Close<MM1 THEN
Backgroundcolor(255,0,0,80)
ENDIF
//CONSOLIDATION HAUSSIERE
IF Close>MM1 and MM3<MM2 THEN
Backgroundcolor(0,255,0,160)
ENDIF
//CONSOLIDATION BAISSIERE
IF Close<MM1 and MM3>MM2 THEN
Backgroundcolor(0,255,0,160)
ENDIF
//LISSAGE
IF summation[32](close>MM1 or open>MM1)<31 THEN
Backgroundcolor(255,0,0,80)
ENDIF
RETURN indicateur
Avez-vous une idée ?
Logiquement la partie entre les 2 lignes noires cad (MM7>MM20) lorsque Close<MM200 devrait apparaître en rouge foncé.
Le code est lu de haut en bas. Tu ne veux afficher qu’une seule couleur, mais certaines conditions peuvent se chevaucher, d’ou le problème.
Le mieux étant de ne colorier qu’une seule fois le graphique en jouant simplement avec des variables pour le RGB et l’alpha:
Indicateur = 0
MM1 = exponentialaverage[200]//TENDANCE DE FOND
MM2 = exponentialaverage[20]
MM3 = exponentialaverage[7]
//TENDANCE DE FOND
IF Close>MM1 THEN
r=0
g=255
b=0
alpha=80
endif
IF Close<MM1 THEN
r=255
g=0
b=0
alpha=80
Endif
if (Close>MM1 and MM3<MM2) OR (Close<MM1 and MM3>MM2) then //CONSOLIDATION HAUSSIERE & BAISSIERE
r=0
g=0
b=255
alpha=160
ENDIF
//LISSAGE
IF summation[32](close>MM1 or open>MM1)<31 THEN
r=255
g=50
b=0
alpha=80
ENDIF
Backgroundcolor(r,g,b,alpha)
RETURN indicateur
J’ai volontairement mis les consolidations en bleu pour vérifier.
Concernant la partie “lissage”, je n’ai pas compris et rien changé.
Merci Nicolas. Le lissage je souhaitai m’en servir pour éviter les changement de couleur brutaux.
Par exemple : Je suis en Tendance baissière, si ne serait-ce que 2 ou trois bougies passent au dessus de ma MM1, la couleur va devenir “verte” alors que je souhaite que la couleur reste “rouge” tant qu’il n’y a pas 30 ou 32 bougies de corrections
Je te joins un autre code pour lequel je suis bloqué (Peut-être cela servira pour les autres)
Dans celui-ci j’aimerai définir 4 tendances grâce à ma MM1 :
Tendance haussière FORTE => VERT FONCE
Tendance haussière FAIBLE => VERT CLAIR
Tendance baissière FORTE => ROUGE FONCE
Tendance baissière FAIBLE => ROUGE CLAIR
Et idéalement dans tous les cas je souhaiterai faire apparaître les conso en => BLEU (cad quand les MM2 et 3 les courtes sont en contre tendance)
Et le top du top avec cette notion de lissage.
J’aimerai en faire ma base de travail pour la suite
Indicateur = 0 //CHOIX DE LA MM DE TENDANCE MM1 = exponentialaverage[200](close) //CHOIX DES MM COURTES DE CONSO MM2 = exponentialaverage[20](close) MM3 = exponentialaverage[7](close) //REGLAGE DE LA PENTE PenteMM1 = MM1-MM1[3] X = 0.00004 MM1Forte = PenteMM1>X or PenteMM1<-X MM1Faible = PenteMM1<X or PenteMM1>-X //LISSAGE A2 = 4//Durée d'observations B2 = 3//Bougies correctives IF summation[A2](MM1Faible)<B2 THEN//PENTE FAIBLE IF Close>MM1 THEN r=0 g=255 b=0 alpha=80//VERT CLAIR ELSIF Close<MM1 THEN r=255 g=0 b=255 alpha=80//ROUGE CLAIR ENDIF ENDIF IF summation[A2](MM1Forte)<B2 THEN//PENTE FORTE IF Close>MM1 THEN r=0 g=255 b=0 alpha=160//VERT FONCE ELSIF Close<MM1 THEN r=255 g=0 b=0 alpha=160//ROUGE FONCE ENDIF ENDIF //CONSOLIDATION if (Close>MM1 and MM3<MM2) OR (Close<MM1 and MM3>MM2) then //CONSOLIDATION HAUSSIERE & BAISSIERE r=0 g=0 b=255 alpha=160//BLEU ENDIF Backgroundcolor(r,g,b,alpha) RETURN indicateur
J’ai essayé de te mâcher le travail comme j’ai pu. JE N’Y ARRIVE PAS MERCI DE TON AIDE PRECIEUSE !
Bon, si j’ai bien compris l’ensemble, j’ai pas mal revu toute la logique. Aussi changé les couleurs pour les pentes faibles (rose clair et vert pale) pour mieux comprendre. Il te reste à trouver l’oscillateur qui va bien pour trouver le timing d’entrée 🙂
Indicateur = 1
//CHOIX DE LA MM DE TENDANCE
MM1 = exponentialaverage[200](close)
//CHOIX DES MM COURTES DE CONSO
MM2 = exponentialaverage[20](close)
MM3 = exponentialaverage[7](close)
//REGLAGE DE LA PENTE
PenteMM1 = abs(MM1-MM1[3])
X = 4 //en points/pips
MM1Forte = PenteMM1>X*ticksize
MM1Faible = PenteMM1<X*ticksize
//LISSAGE
A2 = 4//Durée d'observations
B2 = 3//Bougies correctives
weak = summation[A2](MM1Faible)>=B2
strong = summation[A2](MM1Forte)>=B2
IF weak THEN//PENTE FAIBLE
IF Close>MM1 THEN
r=152
g=251
b=152
alpha=255//VERT PALE
ELSIF Close<MM1 THEN
r=255
g=182
b=193
alpha=255//ROSE CLAIR
ENDIF
ENDIF
IF strong then //PENTE FORTE
IF Close>MM1 THEN
r=0
g=255
b=0
alpha=255//VERT FONCE
ELSIF Close<MM1 THEN
r=255
g=0
b=0
alpha=255//ROUGE FONCE
ENDIF
ENDIF
//CONSOLIDATION
if (Close>MM1 and MM3<MM2) OR (Close<MM1 and MM3>MM2) then //CONSOLIDATION HAUSSIERE & BAISSIERE
r=0
g=0
b=255
alpha=160//BLEU
ENDIF
Backgroundcolor(r,g,b,alpha)
RETURN indicateur
Ce n’est pas exactement ça pour ce qui est du lissage.
Pour la pente, les couleurs parfait.
Regarde ces zones (Nous sommes en PENTE FAIBLE et les BOUGIES passent alternativement sous et sur la MM1).
J’aimerai isoler ces zones :
A la réflexion, je préfère une autre couleur.
Je tatillonne car j’aimerai coder des signaux différents pour les 6 ZONES (Les 6 Zones sont = Les 4 pentes, Les conso, La zone batarde que je viens de te définir)
Merci Nicolas pour ton travail.
Nicolas, en fait je pense qu’il faut juste réécrire comme ceci :
“Sur les 96 dernières bougies tant que il n’y a pas plus de 10 bougies au-dessus de la MM1 ET 10 bougies au dessous de la MM1″
ALORS – Tendance établie :
Cas 1 : Pente Forte Haussière (ROUGE FONCE)
Cas 2 : Pente Faible Haussière (ROUGE CLAIR)
Cas 3 : Pente Forte Baissière (VERT FONCE)
Cas 4 : Pente Faible Baissière (VERT CLAIR)
Cas 5 : Dans les 4 cas ci-dessus afficher les zones de conso (GRIS)
SINON – Range : Cela signifie “qu’il y a plus de 10 bougies au-dessus de la MM1 ET plus de 10 bougies au dessous de la MM1 ”
Cas 6 : Pente Faible ET Zone batarde (BLEU)
(J’aimerai pouvoir par ailleurs changer la durée d’observation de la zone à ma guise 96/10 contre 8/2 ou 50/20…)
Peux-tu ajuster le code ?
J’essaye mais je n’y arrive pas !
Bon j’ai avancé… je remarque que la fonction summation (ce que j’appelais le lissage) n’apporte pas grand chose. Certes elle permet de ne pas changer la tendance à la moindre correction (ce que je souhaitais) mais en échange elle retarde l’entrée en tendance (logique !).
Dans l’immédiat j’ai donc remplacé la summation grâce à la MM2 ce qui évite les changement au moindre franchissement de MM1 par les cours. Cela simplifie aussi le code. Ce que je cherche maintenant à faire c’est isoler les Zones de Range pour que l’indicateur se mette en GRIS (Mon cas 6)
J’ai lu les posts sur la définition des ranges – au début ça va mais après … je manque clairement de compétences.
Le schéma montre bien ou je veux en venir. Pouvez-vous m’aider ?
Indicateur = 1 //CHOIX DE LA MM DE TENDANCE MM1 = exponentialaverage[200](close) //CHOIX DES MM COURTES DE CONSO MM2 = exponentialaverage[20](close) MM3 = exponentialaverage[7](close) //REGLAGE DE LA PENTE PenteMM1 = abs(MM1-MM1[1]) X = 5 //en points/pips MM1Forte = PenteMM1>X*ticksize MM1Faible = PenteMM1<X*ticksize //PENTE FAIBLE IF MM1Faible THEN IF MM2>MM1 THEN r=0 g=255 b=0 alpha=30//VERT CLAIR ELSIF MM2<MM1 THEN r=255 g=0 b=0 alpha=30//ROUGE CLAIR ENDIF ENDIF //PENTE FORTE IF MM1Forte then IF MM2>MM1 THEN r=0 g=255 b=0 alpha=60//VERT FONCE ELSIF MM2<MM1 THEN r=255 g=0 b=0 alpha=60//ROUGE FONCE ENDIF ENDIF //CONSOLIDATION if (Close>MM1 and MM3<MM2) OR (Close<MM1 and MM3>MM2) then r=0 g=0 b=255 alpha=30//BLEU FONCE ENDIF Backgroundcolor(r,g,b,alpha) RETURN indicateur
Pour isoler le CAS 6 (Qui me permettrai de me mettre en mode “RANGE” dans mon trading) je ne sais pas comment faire mais j’ai identifié 2 pistes de codage :
1) La MM1 est en pente faible et la MM2 (ou les cours ou MM2 + MM3) franchissent plusieurs fois dans un sens et dans l’autre la MM1 (ce qui permettrai d’identifier l’oscillation autour de la MM1). Oscillation qui n’apparait pas en tendance.
2) Raccrocher un codage de RANGE du site est le prioriser par rapport aux CAS 1 à 5
Avec l’historique complet devant les yeux, la détection du range est aisé. En temps réel, chaque croisement de tes moyennes auraient pu marquer le début d’une nouvelle tendance, comme tu le marques avec les traits gras verticaux. A posteriori, c’est toujours plus facile 🙂
La technique que tu décris au point 1/ pourrait être cependant codé, bien entendu. Qu’appelles-tu une “pente faible”, cette notion est-elle déjà présente dans le code posté précédemment ?
Je comprends !
Oui notion déjà présente dans le code précédent (ligne 10 à 14) mais peut être peux-tu isoler 2 variables de pente (les 2 paramétrables à souhait) :
– Une qui servira à faire la distinction entre tendance faible et forte (Moi j’ai réglé à 5 mais peut être d’autres réglerons autrement)
– Une pour identifier le range comme ça chacun pourra faire un paramétrage différent pour la tendance et pour l’identification du RANGE
Après pour marquer les oscillations je ne sais pas ce qui est le mieux : peut-être utiliser les high/low car on voit bien ici que le range sera détecté plus tôt qu’avec les MM. Qu’en penses-tu ?
D’autant que si des “touchettes” comme celle-ci arrivaient en tendance (Cas 1 à 5) elles seraient exclu par la variable “pente” spécifique au code du RANGE.
Dans mon idée première c’était pour ça que je pensais utiliser la fonction “summation” pour faire un comptage des perturbations sur X bougies… après pas de solution miracle j’ai l’impression puisque si tu codes la summation, cela aura pour conséquence d’afficher un retard de 20h pour l’entrée en tendance (Cf schéma).
J’aurai cru que raccrocher un code RANGE et le prioriser aurait été plus simple pour toi… mais non !
Avec le fichier. Merci Nicolas !
Je rejoins les graphs pour être sur de me faire bien comprendre Nicolas.
Je ne vois pas comment il est possible de détecter le range tôt sans pour autant exclure les pics
Aucun miracle et une nouvelle façon de détecter ce qui pourrait être un range dans ce code, j’ai isolé cette partie dans la dernière partie. J’ai colorié en jaune les zones trouvées, il y a une période d’analyse (10 bougies par défaut) et un ratio pour chaque détection (pente faible et touchette). Je te laisse faire les analyses.
Indicateur = 1
//CHOIX DE LA MM DE TENDANCE
MM1 = exponentialaverage[200](close)
//CHOIX DES MM COURTES DE CONSO
MM2 = exponentialaverage[20](close)
MM3 = exponentialaverage[7](close)
//REGLAGE DE LA PENTE
PenteMM1 = abs(MM1-MM1[1])
X = 5 //en points/pips pour seuil max pente faible
Y = 10 //en points/pips pour seuil min pente forte
MM1Forte = PenteMM1>=Y*ticksize
MM1Faible = PenteMM1<=X*ticksize
//PENTE FAIBLE
IF MM1Faible THEN
IF MM2>MM1 THEN
r=0
g=255
b=0
alpha=30//VERT CLAIR
ELSIF MM2<MM1 THEN
r=255
g=0
b=0
alpha=30//ROUGE CLAIR
ENDIF
ENDIF
//PENTE FORTE
IF MM1Forte then
IF MM2>MM1 THEN
r=0
g=255
b=0
alpha=60//VERT FONCE
ELSIF MM2<MM1 THEN
r=255
g=0
b=0
alpha=60//ROUGE FONCE
ENDIF
ENDIF
//CONSOLIDATION
if (Close>MM1 and MM3<MM2) OR (Close<MM1 and MM3>MM2) then
r=0
g=0
b=255
alpha=30//BLEU FONCE
ENDIF
//ranging or not?
xx = 10 //period de test occurrence pente faible & touchette MM1
ratiopente = 0.5 //ratio de seuil de range trouvé dans les XX dernières périodes
ratiotouche = 0.2 //ratio de seuil de touche trouvé dans les XX dernières périodes
irange = summation[xx](mm1faible)>=xx*ratiopente
itouche = summation[xx](high crosses over mm1 or low crosses under mm1)>=xx*ratiotouche
if irange and itouche then
r=255
g=255
b=0
alpha=100 //JAUNE
endif
Backgroundcolor(r,g,b,alpha)
RETURN indicateur
C’est pas fou fou à première vue… je vais encore creuser sur le site pour améliorer. 2 questions encore :
Ensuite je ne t’embête pas plus – tu m’as déjà bien aidé dans la structuration c’est à moi de progresser maintenant.
Test continu d'une condition pour colorier le graphique
This topic contains 16 replies,
has 2 voices, and was last updated by jeanguy
6 years, 6 months ago.
| Forum: | ProBuilder : Indicateurs & Outils Personnalisés |
| Language: | French |
| Started: | 07/30/2019 |
| Status: | Active |
| Attachments: | 11 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.