Stopper le système après atteinte du TP, puis le relancer sous conditions
Forums › ProRealTime forum Français › Support ProOrder › Stopper le système après atteinte du TP, puis le relancer sous conditions
- This topic has 5 replies, 3 voices, and was last updated 5 years ago by fifi743.
-
-
10/24/2019 at 2:04 PM #111069
Bonjour,
Je cherche actuellement en vain comment procéder pour faire stopper le système après l’atteinte du TP (et le réenclencher à seulement certaines conditions = changement de situation).
Pour illustrer de manière simple :
Admettons que j’ai 2 conditions cumulatives pour un achat
- au croisement à la hausse d’une MM 30 et 50
- au croisement à la hausse d’un indicateur type MACD par exemple
Si le TP fixé est atteint suite à une première prise de position, je voudrais que le système ne reprenne plus position, sauf nouvelles conditions que je renseignerais (toujours pour l’exemple, un nouveau retournement à la hausse du MACD dans une tendance toujours haussière définie par les MM).
Pour les conditions je vois comment faire normalement, mais ce qu’il me manque c’est le premier “IF (TP ATTEINT) THEN…” : comment traduire cette fonction en code ? Car dans la liste des fonctions je vois seulement la possibilité de définir un niveau de gains ou un TP mais pas de l’utiliser comme une variable atteinte ou non.
123456// En cas de TP atteint, stopper le système avant prochain retournementIF [TP ATTEINT] THENAutorisetrading=1ElseAutorisetrading=0EndifMerci d’avance pour votre aide !
10/24/2019 at 2:12 PM #111071A noter que je viens d’essayer en mettant
c20= strategyprofit
IF c20=XX (montant du TP) THEN…
Et ça ne marche pas non plus.
Idem pour
myprofit=strategyprofit
autorisetrading=1IF strategyprofit – myprofit >=5 then
autorisetrading=0
endif10/24/2019 at 2:56 PM #111084StrategyProfit retourne le profit cumulé (PnL) de la stratégie dans la monnaie du compte, donc tester une valeur de takeprofit avec ne marchera pas ou alors ce serait vraiment pas précis.
Je te propose d’utiliser un test pour savoir si on été au marché dans la barre précédente (et qu’on y est plus dans la barre courante) et de vérifier si le profit était supérieur à 0. Si oui on enregistre le BARINDEX, par la suite on vérifiera si la condition du signal de trading a eu lieu après ou avant ce BARINDEX pour autoriser ou non le trading à nouveau.
1234567891011121314151617181920//enregistre le barindex du signalif buycondition thensignalbar=barindexendif//vérifie le profit sur le dernier ordreif ( (not onmarket and onmarket[1] and not onmarket[2]) or (tradeindex(1)=tradeindex(2) and tradeindex(1)=barindex[1] and tradeindex(1)>0) ) and lastcheck<>barindex thenlastcheck = barindexwasonmarket=1elsewasonmarket=0endifif wasonmarket and positionperf(1)>0 thenprofitbar=barindex[1]endif//autorise le trading uniquement si le barindex du signal est supérieur à celui de la vérification de profitif buycondition and signalbar>profitbar thenbuy at marketendifNon testé, à vérifier.
10/24/2019 at 3:09 PM #111088EDIT : je n’avais pas vu votre réponse Nicolas avant de poster, je vérifie donc votre code et vous fais un retour rapidement !
Dernier essai par moi-même avec ce que je viens de trouver, qui ne fonctionne pas non plus :
12345678910111213141516171819// Ici je met un flag quand j'ai une tendance à la hausse ou à la baisse sur l'un de mes 2 indicateurs (croisement de MM et MACD)IF (indicator1 > indicator2) OR (indicator3 > indicator4) OR (indicator1 < indicator2) OR (indicator3 < indicator4) THENflag=1ENDIFIF flag=1 THENautorisetrading=1ENDIF// Conditions de reprise du tradingIF autorisetrading=1 THENc13 = (indicator3 CROSSES OVER indicator4) // Retournement à la hausse du MACDc14 = (indicator3 CROSSES UNDER indicator4) // Retournement à la baisse du MACDENDIF// Conditions pour position acheteuseIF (c13 AND autorisetrading=1) THENBUY 1 Contract at marketENDIFJe vous fais grâce du reste du code qui n’est que pour la clôture d’une position acheteuse ou la prise d’une position vendeuse.
Dans la logique je pensais pourtant que ça aurait pu fonctionner. M’enfin j’ai encore beaucoup à apprendre lol.
10/24/2019 at 4:04 PM #111098Je viens d’essayer le code donné qui ne fonctionne pas non plus.
J’ai fait quelques adaptations en le mixant avec mon propre code, et je commence à m’en rapprocher.
Ci-dessous vous trouverez la version uniquement pour une position acheteuse. Il n’y a bien qu’une seule prise de position par retournement à la hausse de l’indicateur MACD mais le code ne suit pas ma condition initiale que la MM10 soit strictement supérieure à la MM30…
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576// Définition des paramètres du codeDEFPARAM CumulateOrders = False // Cumul des positions désactivé// 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 = 090000timeEnterBefore = 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 = 180000timeEnterAfter = time < noEntryAfterTime// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiésdaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0//IF condition=0 THENfirsttrade=0ENDIF// Conditions pour ouvrir une position acheteusecondition=0indicator1 = WeightedAverage[10](close)indicator2 = Average[30](close)c1 = (indicator1 CROSSES OVER indicator2)c2 = (indicator1 > indicator2)indicator3, indicator4, ignored = CALL "Mon indicateur MACD"c3 = (indicator3 CROSSES OVER indicator4)c4 = (indicator3 > indicator4)if c1 and c3 thencondition=1elsif c1 and c4 thencondition=1elsif c2 and c3 thencondition=1elsif c2 and c4 thencondition=1ENDIFIF condition=1 AND firsttrade=0 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THENBUY 1 CONTRACT AT MARKETfirsttrade=1ENDIF// Conditions pour fermer une position acheteusec5 = (indicator1 CROSSES UNDER indicator2)c6 = (indicator3 CROSSES UNDER indicator4)IF c5 OR c6 THENSELL AT MARKETENDIF// Stops et objectifsSET STOP pLOSS XXSET TARGET pPROFIT XX// Après atteinte du TP, reprise du système seulement si retournement et dans la tendance haussièreIf firsttrade=1 AND (indicator1 > indicator2) thenflag= 1endif// Conditions de reprise du tradingC13 = (indicator3 crosses over indicator4) // Retournement à la hausse du MACD// Conditions pour position acheteuseIF c13 AND flag=1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THENBUY 1 CONTRACT AT MARKETENDIF// Condition pour fermer une nouvelle position acheteuse (hors tp/sl)C5 = (indicator1 CROSSES UNDER indicator2)C6 = (indicator3 CROSSES UNDER indicator4)IF c5 OR c6 THENSELL AT MARKETENDIFSans doute pas très propre comme code :D.
10/24/2019 at 8:47 PM #111127bonsoir,
a essayer
123456789101112if longonmarket and close>positionprice + valeur thenAutorisetrading=1ElseAutorisetrading=0Endifif shortonmarket close<positionprice-valeur thenAutorisetrading=1ElseAutorisetrading=0Endif1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on