Bonjour à tous,
Je suis bloqué dans la réalisation de mon ProOrder.
J’ai le souhait de placer un ordre à la vente à découvert au moment de la prochaine cassure à la baisse d’une MM34 seulement si précédemment j’ai eu 3 conditions remplis.
- Condition_1: Le prix soit en dessous de ma MM100
- Condition_2:Le prix soit au dessus de ma MM34
- Condition_3:Le RSI période 7 est été au moins une fois au dessus de la valeur “71”.
J’ai ajouté une image pour exemple (un ordre perdant mais c’est pas grave, c’est pour l’exemple).
Je vous remercie d’avance pour votre aide.
Le RSI période 7 est été au moins une fois au dessus de la valeur “71”. Oui mais depuis quand ? Depuis la chute de l’empire Romain ou depuis Noël dernier ? 😆
Bonjour,
Merci pour votre retour
Si je comprend bien, nous somme obligé d’indiquer le nombre de période antérieur pour le RSI.
Mais si j’indique un nombre de période antérieur, je risque de louper une ouverture d’ordre si le RSI à cassé sur la bougie juste avant ma période.
Il faudrait que je puisse indiquer la période correspondante à toute les bougies antérieurs qui ce trouve entre la MM34 et MM100.
Est-ce que la logique est bonne ?
Et si elle est bonne comment indiquer dans mon code “les bougies antérieurs à mon prix, qui ce trouve entre la MM34 et MM100” ?
Merci
Il faut en effet définir des conditions strictes et répétables, le RSI 7 a bien été au dessus du niveau X à un moment de l’historique. Hors on ne va pas donner un signal valide si cet événement du RSI a eu lieu il y a Y périodes. Donc définir un point de départ où on commence à vérifier cette condition, il ne faut pas s’inquiéter sur comment on va déterminer la quantité de bougies à vérifier et comment on va le coder, le principal c’est de définir la condition du “début” de vérification.
Bonjour,
Merci pour votre retour.
J’ai changé ma manière de coder ce que je souhaité.
Cependant ça ne me retourne rien. Et la je bloc…
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 080000
// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 173000
// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Déclaration de Variables
indicator1 = Average[34](close)
indicator2 = ExponentialAverage[100](close)
indicator3 = RSI[7](close)
c1 = (close > indicator1) //Au dessus de la MM34
c2 = (close < indicator2) //En dessous de la MM100
c3 = (indicator3 > 70) //RSI au dessus des 70
c4 = (close CROSSES UNDER indicator1) //Casse à la baisse la MM34
result = 0
//Condition pour que le result s'incrémente de 1
IF c1 AND c2 AND c3 THEN
result = 1
ENDIF
//Condition pour ouvrir un ordre à la vente
IF c4 AND result = 1 AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Stops et objectifs
SET STOP pLOSS 10
SET TARGET pPROFIT 10
Pouvez-vous m’indiquer si j’ai bien compris le principe et où j’ai fait une erreur ?
Merci d’avance.
Re-Bonjour
J’ai bien avancé avec mes recherches et test, mais je reste bloqué sur la fin de mon code.
J’aimerai reset ma Variable “NombrePeriodeDepuisRSI” après l’ouverture de mon trade, pour que toutes mes conditions ce test à nouveau seulement à partir du nouveau moment ou le RSI est au dessus des 70.
Merci pour votre aide.
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 060000
// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 173000
// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Déclaration de Variables
indicator1 = Average[34](close)
indicator2 = ExponentialAverage[100](close)
indicator3 = RSI[7](close)
//c1 = (close > indicator1) //Au dessus de la MM34
c2 = (close < indicator2) //En dessous de la MM100
c3 = (indicator3 > 70) //RSI au dessus des 70
c4 = (close CROSSES UNDER indicator1) //Casse à la baisse la MM34
//c5 = (close CROSSES OVER indicator2) //Casse à la hausse la MM100
//Comptabiliser le nombre de période depuis que le RSI est valide
IF c2 AND c3 THEN
FigeMaPeriodeRSI = barindex
GRAPH FigeMaPeriodeRSI AS "FigeMaPeriodeRSI"
ENDIF
NombrePeriodeDepuisRSI = barindex - FigeMaPeriodeRSI
GRAPH NombrePeriodeDepuisRSI AS "NombrePeriodeDepuisRSI"
//Condition pour vente à découvert
IF c3[NombrePeriodeDepuisRSI] AND c2[1] AND c4 AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Stops et objectifs
SET STOP pLOSS 10
SET TARGET pPROFIT 10
Bravo pour ce code, c’est une façon élégante de vérifier la condition.
Pour remettre à zéro ta condition on peut flagger “FigeMaPeriodeRSI” à 0 quand tu passes un ordre et ajouter une condition pour calculer “NombrePeriodeDepuisRSI” seulement si “FigeMaPeriodeRSI” est supérieure à zéro, donc si un événement a bien eu lieu, soit :
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 060000
// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 173000
// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Déclaration de Variables
indicator1 = Average[34](close)
indicator2 = ExponentialAverage[100](close)
indicator3 = RSI[7](close)
//c1 = (close > indicator1) //Au dessus de la MM34
c2 = (close < indicator2) //En dessous de la MM100
c3 = (indicator3 > 70) //RSI au dessus des 70
c4 = (close CROSSES UNDER indicator1) //Casse à la baisse la MM34
//c5 = (close CROSSES OVER indicator2) //Casse à la hausse la MM100
//Comptabiliser le nombre de période depuis que le RSI est valide
IF c2 AND c3 THEN
FigeMaPeriodeRSI = barindex
GRAPH FigeMaPeriodeRSI AS "FigeMaPeriodeRSI"
ENDIF
if FigeMaPeriodeRSI>0 then //SI EVENEMENT CONNU
NombrePeriodeDepuisRSI = barindex - FigeMaPeriodeRSI
endif
GRAPH NombrePeriodeDepuisRSI AS "NombrePeriodeDepuisRSI"
//Condition pour vente à découvert
IF c3[NombrePeriodeDepuisRSI] AND c2[1] AND c4 AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
FigeMaPeriodeRSI = 0 // RAZ
ENDIF
// Stops et objectifs
SET STOP pLOSS 10
SET TARGET pPROFIT 10
A tester ! 😉
Bonjour,
Merci.
Bon j’ai testé et malheuresement, en plus des bonnes ouvertures d’odres, il y a des ouvertures d’ordres qui ne respect pas ma stratégie et je ne comprend pas pourquoi.
Après avoir affiché sur le graph la valeur de “NombrePeriodeDepuisRSI” je m’apperçoit que suite à l’ouverture d’un ordre la valeur de mon “NombrePeriodeDepuisRSI” n’est pas réinitialisé sur la bougie d’après.
Ce qui veut dire que si mes bougies d’après remplissent la condition c2 et c4 (//Condition de vente à découvert) et bien elles ouvrent un ordre.
Alors que j’aimerai que si un ordre est été ouvert et/ou fermé il faut attendre la prochaine cassure de RSI dans les bonnes conditions pour ouvrir un nouvel ordre, d’où ma demande de réinitialiser ma variable.
Je cherche mais je bloc…
Merci pour votre aide.
Avec cette autre version peut être ? Il y a vraiment trop d’informations sur ton graphique, c’est difficile de bien comprendre. Avec l’instruction GRAPH C2 AND C3 que j’ai ajouté à la fin du code tu pourras voir dans le backtest à quel moment on marque l’événement de ces 2 conditions.
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 060000
// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 173000
// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Déclaration de Variables
indicator1 = Average[34](close)
indicator2 = ExponentialAverage[100](close)
indicator3 = RSI[7](close)
//c1 = (close > indicator1) //Au dessus de la MM34
c2 = (close < indicator2) //En dessous de la MM100
c3 = (indicator3 > 70) //RSI au dessus des 70
c4 = (close CROSSES UNDER indicator1) //Casse à la baisse la MM34
//c5 = (close CROSSES OVER indicator2) //Casse à la hausse la MM100
//Comptabiliser le nombre de période depuis que le RSI est valide
IF c2 AND c3 THEN
FigeMaPeriodeRSI = barindex
//GRAPH FigeMaPeriodeRSI AS "FigeMaPeriodeRSI"
ENDIF
//Condition pour vente à découvert
IF barindex>FigeMaPeriodeRSI and FigeMaPeriodeRSI>0 and c4 AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
FigeMaPeriodeRSI = 0 // RAZ
ENDIF
// Stops et objectifs
SET STOP pLOSS 10
SET TARGET pPROFIT 10
graph c2 AND c3
Bonsoir,
Merci pour votre retour.
Je peux indiquer, après vérification, que ça fonctionne 🙂 comme je l’entend.
Merci beaucoup, je vais pouvoir passer à l’optimisation de mon code.
Petite question, si j’ai des questions sur d’autre typologie de problème, mais sur le même code faut-il que j’ouvre un autre topic ou je peux réutiliser celui-ci ?
Merci Nicolas
Tu peux poster dans le même sujet, si besoin je séparerai les topics.
Bonsoir Nicolas,
Malheuresement via un compte démo et non plus via le backtest j’ai cette erreur (en pièce jointe) et je ne comprend pas pourquoi il me bloc.
Est-ce qu’il y a des indicateurs ou variables que PRT ne prend pas en compte hors du proorder/backtest ?
Merci
Le message est clair, un indicateur ne peut évidemment pas avoir de période nulle ou négative 🙂
Dans le dernier code que j’ai posté, il n’y en a pas, donc ça ne doit pas être le même ?