"code" une question, un seul trade par jour ?
Forums › ProRealTime forum Français › Support ProOrder › "code" une question, un seul trade par jour ?
- This topic has 14 replies, 3 voices, and was last updated 6 years ago by Nicolas.
-
-
12/06/2017 at 12:21 AM #54837
Bonjour, J’aimerai faire un test sur une stratégie mais en paramétrant dans le code “juste 1 trade par jour” pour cette stratégie. J’ai beau essayé je ne trouve pas… j’ai même tenté “just one trade by day” mais cela ne fonctionne pas évidemment. Pourriez vous m’aider ? Merci,
12/13/2017 at 12:08 AM #55539Bonsoir,
Je n’ai pas bien compris l’histoire du “flag = 1”.
J’ai essayé de le mettre dans mon code mais cela ne fonctionne pas.
Pour ma part, je souhaite qu’après le premier trade exécuté aucun n’autre se déclenche pour la journée.
Voici mon code que je test, si quelqu’un peux m’aider, merci :
DEFPARAM CumulateOrders = False
DEFPARAM FLATBEFORE = 090000
// Annule tous les ordres en attente et ferme toutes les positions à l’heure “FLATAFTER”
DEFPARAM FLATAFTER = 123000// Taille des positions
n = 1// Timeframe M5
S1 = CLOSE>CLOSE[1] AND CLOSE[1]>CLOSE[2] AND CLOSE[2]>CLOSE[3]
S2 = CLOSE<CLOSE[1] AND CLOSE[1]<CLOSE[2] AND CLOSE[2]<CLOSE[3]// CONDITIONS VENTE
c1V = time >= 090000
c2V = S1IF c1V and c2V THEN
BUY n CONTRACTS AT MARKET
ENDIF// CONDITIONS ACHAT
c1v = time >= 090000
c2v = S2IF c1v and c2v THEN
SELLSHORT n CONTRACTS AT MARKET
ENDIF// SORTIE
c1sa = time = 123000IF c1sa THEN
SELL AT MARKET
EXITSHORT AT MARKET
ENDIF// STOP LOSS & TAKE PROFIT
SET STOP LOSS 3
SET TARGET PROFIT 1.512/13/2017 at 9:45 AM #55548>> Pour la clarté des messages sur les forums de ProRealCode, merci d’utiliser le bouton “insert PRT code” pour séparer la partie texte de la partie code, merci ! <<
J’ai déplacé ton message vers le bon sujet, tu avais posté à la suite d’un autre sujet.
Pour la variable “flag”, c’est un nom comme un autre, on pourrait aussi lui en donner un autre, “toto” par exemple.
Je reprends donc ton code, dés qu’un nouvel ordre est lancé au marché, on donne la valeur 1 à “toto” (après BUY ou SELLSHORT). Cette variable est remise à zéro à chaque nouvelle journée, on teste pour cela si la barre courante en intraday est égale à 0 (voir début du code). Enfin, avant de placer un nouvel ordre, on vérifie bien que “toto=0”, puisque cela signifiera forcément qu’aucun ordre n’a déjà été ouvert le jour même.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647DEFPARAM CumulateOrders = FalseDEFPARAM FLATBEFORE = 090000// Annule tous les ordres en attente et ferme toutes les positions à l’heure “FLATAFTER”DEFPARAM FLATAFTER = 123000//reset à chaque nouvelle journée de totoif intradaybarindex=0 thentoto=0endif// Taille des positionsn = 1// Timeframe M5S1 = CLOSE>CLOSE[1] AND CLOSE[1]>CLOSE[2] AND CLOSE[2]>CLOSE[3]S2 = CLOSE<CLOSE[1] AND CLOSE[1]<CLOSE[2] AND CLOSE[2]<CLOSE[3]// CONDITIONS VENTEc1V = time >= 090000c2V = S1IF c1V and c2V and toto=0 THENBUY n CONTRACTS AT MARKETtoto=1ENDIF// CONDITIONS ACHATc1v = time >= 090000c2v = S2IF c1v and c2v and toto=0 THENSELLSHORT n CONTRACTS AT MARKETtoto=1ENDIF// SORTIEc1sa = time = 123000IF c1sa THENSELL AT MARKETEXITSHORT AT MARKETENDIF// STOP LOSS & TAKE PROFITSET STOP LOSS 3SET TARGET PROFIT 1.5Fait nous savoir si cela fonctionne correctement, pour les références futures, puisque cette question est posée 3 ou 4 fois par mois 🙂
12/13/2017 at 3:41 PM #55590Grand merci Nicolas,
Oui le code fonctionne, un seul trade n’est exécuté, alélouya.
Par contre, je rencontre un autre problème (je ne sais pas si cela a un rapport), parfois des trades qui devraient s’exécuter ne le sont pas.
Je vous montre mon code, il y a bien maximum 1 trade par jour pour celui-ci, mais parfois pas de trade du tout alors que cela devrait être le cas.
Pivot jour123456789101112131415161718192021222324252627282930313233343536Définition des paramètres du codeDEFPARAM CumulateOrders = False // Cumul des positions désactivéDEFPARAM FLATBEFORE = 090000// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"DEFPARAM FLATAFTER = 123000//reset à chaque nouvelle journée de totoif intradaybarindex=0 thentoto=0endif// Conditions pour ouvrir une position acheteusePJ = (DHigh(1) + DLow(1) + DClose(1))/3c1 = (close CROSSES OVER PJ)IF c1 and toto=0 THENBUY 1 CONTRACTS AT MARKETtoto=1ENDIF// Conditions pour ouvrir une position en vente à découvertPJ = (DHigh(1) + DLow(1) + DClose(1))/3c3 = (close CROSSES UNDER PJ)IF c3 and toto=0 THENSELLSHORT 1 CONTRACTS AT MARKETtoto=1ENDIF// Stops et objectifsSET STOP pLOSS 3SET TARGET pPROFIT 1.5Et 1 image vos 1000 discours :
12/13/2017 at 3:43 PM #5559312/13/2017 at 4:52 PM #5559612/13/2017 at 5:02 PM #55599Pour rappel mon setup est :
- timeframe 15min
- période de 9h à 11h30
- En cas de croissement du PJ et d’une cloture en fin de bougie, achat ou vente au marché à l’open de la bougie suivante dans le sens de la cloture
- l’entrée en position ne doit pas dépasser + ou – 4pts du PJ
- Si la bougie de croisement est un doji ne pas prendre position
- setup limité au 1er trade exécuté.
Dans tous ça c’est juste l’histoire du 1er trade exécuté que je n’arrive pas à bien paramétrer (comme je le montre dans les graphs), l’entrée en position à +ou- 4 pts je n’ai pas encore étudié le sujet.
12/14/2017 at 9:22 AM #55638Pour débugger un problème, on peut utiliser l’instruction GRAPH, cela permet de vérifier chaque condition par exemple, comme celles de ton code pour rentrer en position, à savoir C1 et C3.
12GRAPH C1 as "condition 1"GRAPH C3 as "condition 3"ça devrait aider à comprendre pourquoi certains ordres ne sont pas lancés. Ensuite tu pourras ajouter toutes tes autres conditions pour agrémenter la stratégie.
12/14/2017 at 3:54 PM #55674Ok merci Nicolas,
Après avoir appliqué la méthode avec “GRAPH” que tu me dis, j’ai trouvé une réponse possible au problème.
Il se trouve que “intradaybarindex = 0” à l’open (8h),
j’utilise “DEFPARAM FLATBFORE = 090000 (donc je prend le signal à partir de 9h),
et donc entre 8h et 9h des signaux peuvent se déclencher et par conséquent changer “intradaybarindex = 1”,
par conséquent, à partir de 9h, bien qu’il puisse avoir un signal, si “intradaybarindex = 1” alors le signal ne sera pas exécuté.
Comme le montre l’image si dessous, sur la journée du 17, il y a eu un signal à 8h30, par conséquent, le premier signal à partir de 9h ne sera pas exécuté. En revanche, la journée suivante, il n’y a pas eu de signaux avant 9h, donc le 1er signal à partir de 9h est bien exécuté.
Je vais essayer de trouver une solution pour palier à ce problème.
En même temps si vous avez une solution je suis preneur 🙂
12/14/2017 at 4:26 PM #5568312/15/2017 at 1:19 AM #55716Oui Nicolas pour les minutes et heures, mais là ça va faire 5heures que je planche sur cette idée mais je n’arrive pas à créer le code…
j’ai essayé “hour 8” ou hour[0] ou hour[1], idem pour les minute par quinzaine. Pas fonctionné.
J’ai paramétré la plateforme sur la tranche horaire [8h45-12h], paramétré également l’exécution des trades sur cette tranche horaire, mais ensuite j’ai eu des résultats très très bizarre (genre des exécutions sur des plages horaire invisible…).
J’ai tenté le currenthour, currentminute, etc…
A présent la plateforme me fait des chose bizarre et jsuis crevé donc j’arrête je verrai demain à tête reposé.
Bonnenuit
12/15/2017 at 11:10 AM #55727ProBacktest et ProOrder utiliseront toujours la tranche horaire du marché et non celle que tu paramétras toi même, c’est pour cela que tu noteras des différences.
Pour la remise à zéro de la variable, tu peux utiliser ces conditions horaires par exemple :
1234//reset à chaque nouvelle journée de totoif hour=9 and minute=0 thentoto=0endif12/15/2017 at 2:08 PM #55732Ok Nicolas, j’ai enfin le code bon, allélouya 🙂
En hour et minut cela ne fonctionnait pas non plus (en tout cas les résultats étaient mauvais), j’ai réécris “intradaybarindex” et j’ai donc continué à chercher, essayé, testé, et enfin la lumière est apparu…
Je post le code final qui fonctionne pour 1 seul trade pris après le 1er signal dans une tranche horaire donné.
Pivot J 15min, 1er croisement cloturer matin123456789101112131415161718192021222324252627282930313233343536// Définition des paramètres du codeDEFPARAM CumulateOrders = False // Cumul des positions désactivéif intradaybarindex=0 thentoto=0endif// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiéenoEntryBeforeTime = 091500timeEnterBefore = time >= noEntryBeforeTime// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiéenoEntryAfterTime = 113000timeEnterAfter = time < noEntryAfterTime// Conditions pour ouvrir une position acheteuseindicator1 = (DHigh(1) + DLow(1) + DClose(1))/3c1 = (close CROSSES OVER indicator1)IF c1 AND timeEnterBefore AND timeEnterAfter and toto=0 THENtoto=1BUY 1 CONTRACTS AT MARKETENDIF// Conditions pour ouvrir une position en vente à découvertindicator2 = (DHigh(1) + DLow(1) + DClose(1))/3c2 = (close CROSSES UNDER indicator2)IF c2 AND timeEnterBefore AND timeEnterAfter and toto=0 THENtoto=1SELLSHORT 1 CONTRACTS AT MARKETENDIF// Stops et objectifsSET STOP pLOSS 3SET TARGET pPROFIT 1.508/15/2018 at 8:35 PM #78320Bonjour,
Bravo pour ce travail.
par contre, j’ai remarqué que si on lance un ordre “Buy stop” / “Sell stop”, et que le take profit est situé sur la même bougie que la bougie d’entrée, alors le code ne fonctionne pas : il ne met pas “toto=1”, mais “toto” reste à zéro !
Une idée pour corriger cela ? Merci
Exemple :
123456789101112if intradaybarindex = 0 thenTradeJour = 0ENDIFIF dayofweek <> 0 and TradeJour = 0 THENBuy at X stopSellshort at Y stopENDIFIF onmarket THENTradeJour = 1ENDIFCe code laisse “TradeJour” à zéro si le take profit est touché sur la bougie d’entrée…
08/15/2018 at 8:55 PM #78321 -
AuthorPosts