Merci c’est plus clair 🙂
Le code du screener ci-dessous filtre les actions ayant un volume d’échange moyen sur les 20 derniers jours supérieur à “volumeMini” et qui sont à proximité de “proxMax” de la bande supérieure et en tendance baissière :
proxMax = 3 //en pourcentage
volumeMini = 100000
// ---------------------
up = PRTBandsUp
dn = PRTBandsDown
//le prix casse la bande supérieure
if close crosses over up and trend <= 0 then
trend = 1
elsif close crosses under dn and trend >= 0 then
trend = -1
endif
test = trend=-1 and close/PRTBandsUp>=1-proxMax/100 and average[20](volume)>volumeMini
screener [test](close/PRTBandsUp*100 as "%prox PRTBandsUp")
Nickel Nicolas, c’est parfait
LéoParticipant
Average
Bonjour à tous, Bonjour Nicolas,
J’ai essayé d’écrire le code suivant pour backtester la stratégie. Je suis débutant et le code ne fait clairement pas ce que je voudrais qu’il fasse, notamment sur les sorties et la remise à zéro des flags.
Pourrais tu y jeter un oeil et corriger mes erreurs ?
Merci d’avance.
Cordialement.
// Strategy PRT Bands : Léo
// Achat si tendance baissière et Close crosses over PRTBandsUp
// Achat si tendance haussière et Close crosses over PRTMidTerm ou ShortTerm
// Vente 50% si Close crosses under PRTBandsShortTerm
// Vente 50% si Close crosses under PRTBandsMidTerm
// Vente 100% si Close crosses under PRTBandsShortTerm
// SL sous les plus bas des 3 dernières bougies
// SL = Max 300 €
Defparam CumulateOrders = false
// Instructions PRTBands :
up = PRTBandsUp
dn = PRTBandsDown
MT = PRTBANDSMEDIUMTERM
ST = PRTBANDSSHORTTERM
// Calcul du Stop Loss et de la taille de position
SL = High - Lowest[3](low)
PositionSize = 300 / SL
//Definition de la tendance (Code Nicolas)
//le prix casse la bande supérieure
if close crosses over up and trend <= 0 then
trend = 1
elsif close crosses under dn and trend >= 0 then
trend = -1
endif
//Conditions Achat:
Buylevel = High+1
Selllevel = Low-1
if not onmarket then
if trend[1]=-1 and trend=1 then
BUY PositionSize Contract at buylevel stop
endif
else
if trend=1 and close crosses over MT then
BUY PositionSize Contract at buylevel stop
endif
endif
//Conditions de sortie:
if not onmarket then
FlagSt=0
FlagMT=0
endif
if longonmarket and close crosses under ST and flagSt=0 then
Sell (50/100 * countofposition) contract at SellLevel stop
flagST=1
endif
if longonmarket and close crosses under MT and flagMT=0 then
Sell (50/100 * countofposition) contract at SellLevel stop
flagMT=1
endif
if longonmarket and close crosses under DN then
Set stop ploss (close-low-1)
endif
// definition du Stop Loss
// Set Stop ploss SL
Les ordres STOP doivent être remis à chaque barre, puisqu’ils expirent à chaque fin de bougie, si tu veux qu’ils soient toujours présents bien entendu, et c’est ce que tu veux ?
Hors dans ta stratégie, tu ne les poses qu’une seule fois, puisque flagSt doit être égale à 0 et tu le passes à 1 dés que tu poses un ordre STOP.
Ceci étant il y a un autre problème, ton ordre stop est posé qu’une seule fois aussi parce que l’événement de croisement n’a lieu qu’une seule fois ..
LéoParticipant
Average
Bonjour Nicolas,
Merci pour ton retour.
Oui c’est ça, j’aimerais que les ordres Stop soient posés de manière définitive :
- Au moment de la prise de position, j’aimerais que le stop soit posé sous les plus bas précédents dans la limite de 300 € (dans mon exemple).
- Si une fois en position et que (i) le cours actuel est supérieur au cours au moment de la prise de position et (ii) PRTBandsShortTerm ou PRTBandsMediumTerm sont cassés à la baisse, j’aimerais qu’un ordre stop soit posé sous les plus bas de la bougie de manière définitive pour 50% de la position (et éventuellement que les 50% restants soient à BE)
- Si une fois en position, PRTBandsDown est cassé à la baisse, je veux qu’un ordre stop soit posé sous les plus bas de la bougie de manière définitive pour les 100% restants.
J’ai ajouté des flags pour m’assurer que les prises de bénéfice ne se font qu’une fois – je ne sais pas si c’est la bonne méthode pour le faire. Je pensais les remettre à zéro si on est sorti du marché (pour éviter qu’ils empêchent de prendre des bénéfices sur les futurs trades).
Merci de nouveau pour ton aide.
Les sorties partielles ne fonctionnent qu’en backtests, pas en trading réel. Il faudrait revoir la stratégie 🙂
Bonsoir,
Je suis sur un MAC avec la version PRT 10.3 est j’ai toujours le bug avec les pourcentages affichés tout à gauche.
Il faut faire une mise à jour de PRT ? désinstallation-réinstallation ?
Merci et bonne soirée
Possible de partager une copie d’écran pour visualiser quelle est ce bug d’affichage sous MAC stp ? Merci.
Bonjour,
Dans le screener de Orson, peut-on rajouter des critères suivant:
- La mm200, qui doit être au mieux supérieure au cours de cloture au pire à -5% du cours de cloture.
- Le cours de cloture doit-être au-dessus de la MM20
- La ligne cours terme PRT Bands doit être en hausse par rapport au précédent journalié.
Merci d’avance pour votre aide.
Cordialement
@RV1974
Ci-dessous le code du screener de Orson modifié avec tes critères en sus (dans la variable “test2”).
proxMax = 3 //en pourcentage
volumeMini = 100000
// ---------------------
up = PRTBandsUp
dn = PRTBandsDown
mid = PRTBandsMediumTerm
avg200 = average[200]
avg20 = average[20]
//le prix casse la bande supérieure
if close crosses over up and trend <= 0 then
trend = 1
elsif close crosses under dn and trend >= 0 then
trend = -1
endif
test1 = trend=-1 and close/PRTBandsUp>=1-proxMax/100 and average[20](volume)>volumeMini
test2 = close/avg200>=.95 and close>avg20 and mid>mid[1]
screener [test1 and test2](close/PRTBandsUp*100 as "%prox PRTBandsUp")
Merci Nicolas, pour ton aide, c’est ce que je cherchais.
Bonjour à tous et par avance merci 🙂
Je suis totalement novice en programmation, j’utilise PRT en version 11.1. version gratuite. J’aurais aimé créer un proscreener permettant chaque fin de semaine de détecter un changement de “polarité” hebdo (basculement en vert disons) avec prt bands.
En essayant de copier les programmes issus de cette discussion, je vois que Proscreener refuse (dans mon cas semble t il) la fonction (est ce le bon terme?) backgroundcolor, si bien que je ne peux lancer le test.
Merci pour vos lumières…
Car tu as utilisé le code d’un indicateur dans la fenêtre de ProScreener, ce sont des codes différents.
Screener du détection du changement de tendance, du rouge au vert :
up = PRTBandsUp
dn = PRTBandsDown
if close crosses over up and trend<=0 then //le prix casse la bande supérieure
trend=1 //tendance haussière
elsif close crosses under dn and trend>=0 then //le prix casse la bande inférieure
trend=-1 //tendance baissière
endif
screener[trend=1 and trend[1]=-1]
Merci Nicolas, votre programme et le meilleur résultat que j’ai obtenu pour le moment. Ca fonctionne. Sans vouloir abuser de votre patience, les résultats obtenus font figurer des titres dont le passage en “vert” date déjà de quelques semaines parfois. Comment puis je “limiter ” les résus?
Désolé c’est une erreur, j’ai modifié le code ci-dessus.