Bonjour,
nouveau sur le site et en trading, je cherche à coder deux paramètres que je voudrais rajouter à ma stratégie.
1- fixer un objectif de gain journalier (indépendamment du take profit de chaque trade) et ne plus prendre de positions une fois qu’il est atteint (avec éventuellement un stop suiveur pour profiter d’une bonne tendance)
2- pour les “cumulateorder” fixer un nombre maximum d’ordres cumulés. Par exemple maximum trois ou quatre ordres.
merci à vous
Eric
1/ Concernant les objectifs journaliers, tu trouveras sans nul doute un tas de posts à ce sujet dans les forums du site (en utilisant la fonction de recherche dans le menu sous ton avatar). Sinon, il y a ce post du blog dans lequel un code “tout prêt” est disponible pour fixer à la fois l’objectif de gain journalier et aussi celui des pertes acceptées : Objectif de gain et perte journalières
Tu trouveras aussi dans le blog des codes de trailing stop complet à copier/coller dans les stratégies.
2/ On peut limiter le nombre de positions au marché en les testant avec COUNTOFPOSITION par exemple:
//limitation à 5 ordres cumulés
if countofposition<5 and ConditionAchat then
buy 1 contract at market
endif
Merci pour votre réponse et merci beaucoup pour les ordres cumulés, ça fonctionne.
pour l’objectif journalier je n’arrive pas trouver la bonne formule.
je voudrais qu’il soit calculé en points (pas en euros). et qu’il soit indépendant des take profit des trades.
Voici ce que j’ai fait mais ça ne fonctionne pas. Auriez-vous un conseil.
Merci à vous
// —parameters
MaxDailyProfit=100*pipsize //Max daily profit allowed (in point)
// first time we launch the code, the trading is allowed
once TradeAllowed=1
// reset the current state of the strateygprofit each new day
If intradaybarindex=0 then
MyProfit=STRATEGYPROFIT
TradeAllowed=1
endif
// test if the strategyprofit of the day is currently above the daily profit allowed If
StrategyProfit >= MyProfit+MaxDailyProfit then
sell at market
exitshort at market
TradeAllowed=0
endif
Bonjour,
je m’excuse de revenir encore avec ma question mais j’ai beau parcourir le forum je ne trouve pas de solution.
je souhaite programmer un objectif de gain journalier en points (par exemple 50 points)
indépendant des take profit ou des stop loss des trade et indépendant du nombre de trade.
avec éventuellement un stop suiveur lié à cet objectif journalier.
j’arrive à le faire stoper aux 50 points mais il reprends des position après.
Quand je rajoute Notradeallowed il ne prend plus aucune position.
voici le code que j’essaie où il ne prends aucune position. Je ne comprends pas pourquoi
// Définition des paramètres du code
DEFPARAM CumulateOrders = TRUE // 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 = 220000
// Paramètres
once TradeAllowed=1
if intradaybarindex=0 then
TradeAllowed=1
MyTarget = 50
endif
// Conditions pour ouvrir une position acheteuse
indicator1 = WilderAverage[2](totalPrice)
c1 = (close > indicator1)
indicator2 = WilderAverage[2](totalPrice)
c2 = (close[1] > indicator2[1])
indicator3 = WilderAverage[2](totalPrice)
indicator4 = Average[55](close)
c3 = (indicator3 > indicator4)
if TradeAllowed then
IF c1 AND c2 AND c3 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
indicator5 = Average[29](close)
c4 = (close CROSSES UNDER indicator5)
IF c4 THEN
SELL AT MARKET
ENDIF
// Conditions pour ouvrir une position en vente à découvert
indicator6 = WilderAverage[2](totalPrice)
c5 = (close < indicator6)
indicator7 = WilderAverage[2](totalPrice)
c6 = (close[1] < indicator7[1])
indicator8 = Average[55](close)
c7 = (close < indicator8)
if TradeAllowed then
IF c5 AND c6 AND c7 THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Conditions pour fermer une position en vente à découvert
indicator9 = Average[29](close)
c8 = (close CROSSES OVER indicator9)
IF c8 THEN
EXITSHORT AT MARKET
ENDIF
// profit journalier atteint : coupe toutes les positions et ne plus en prendre de la journée.
SET TARGET pProfit MyTarget
sell at market
exitshort at market
TradeAllowed=0
ENDIF
ENDIF
Je ne peux pas répondre plus précisément pour le moment mais je viens de trouver 2 pistes:
https://www.prorealcode.com/topic/objectif-journalier-en-point/#post-47455
https://www.prorealcode.com/topic/pause-suite-a-limite-atteinte/
Concernant ton code, tu devrais vérifier les imbrications IF/THEN/ENDIF, je pense qu’il y a un soucis.
Bonjour,merci pour vos réponses et excusez-moi de revenir à la charge. Car ça paraît simple, mais j’ai eu beau chercher dans le manuel probuilder et sur les pistes que vous m’avez suggérées, impossible de trouver quelque chose qui fonctionne. Pourriez-vous m’éclairer et m’aider à trouver la solution. Voici ce que je souhaite faire (pour l’indice dax) :
Je souhaiterais coder un objectif de gain journalier en points,
indépendant du nombres de trades et indépendant du stoploss et take profit de chaque trade.
Par exemple si l’objectif du jour, de 50 points, est atteint par la stratégie : on sort de position pour la journée (sans attendre la fin d’une bougie).
Et la stratégie ne reprends pas de position avant le lendemain.
Bien cordialement.
Voici ce que j’ai fait mais ça ne marche pas du tout.
// 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 = 220000
dayprofitmax = 50 // EN POINTS ?
daylossmax = 50 // EN POINTS ?
if intradaybarindex=0 then
trading=1
lastdayprofit=strategyprofit
endif
// Conditions pour ouvrir une position acheteuse
indicator1 = WilderAverage[2](totalPrice)
c1 = (close > indicator1)
indicator2 = WilderAverage[2](totalPrice)
c2 = (close[1] > indicator2[1])
indicator3 = WilderAverage[2](totalPrice)
indicator4 = Average[11](close)
c3 = (indicator3 > indicator4)
IF c1 AND c2 AND c3 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
indicator5 = Average[11](close)
c4 = (close CROSSES UNDER indicator5)
IF c4 THEN
SELL AT MARKET
ENDIF
// Conditions pour ouvrir une position en vente à découvert
indicator6 = WilderAverage[2](totalPrice)
c5 = (close < indicator6)
indicator7 = WilderAverage[2](totalPrice)
c6 = (close[1] < indicator7[1])
indicator8 = Average[11](close)
c7 = (close < indicator8)
IF c5 AND c6 AND c7 THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Conditions pour fermer une position en vente à découvert
indicator9 = Average[11](close)
c8 = (close CROSSES OVER indicator9)
IF c8 THEN
EXITSHORT AT MARKET
ENDIF
if trading=1 and (strategyprofit > lastdayprofit+dayprofitmax or strategyprofit < lastdayprofit-daylossmax) then
trading=0
sell at market
exitshort at market
endif
Entre 2 bougies il ne peut rien se passer puisque le code n’est lu qu’une seule fois par barre, à sa fermeture. Cela devrait changer avec la mise à jour que l’on attend tous, dans le courant de l’année prochaine.
Donc, au mieux on pourrait placer un takeprofit adapté en fonction des profits déjà réalisés et fermés pour correspondre à un gain journalier de 50 points. Mais il faudra quoiqu’il arrive attendre une lecture du code pour indiquer à la stratégie qu’il faut s’arrêter complètement.
Merci pour votre réponse. Merci de m’avoir accordé un peu de votre temps. Je comprends mieux pourquoi je n’arrivais pas à trouver…
Donc ce n’est pas possible pour le moment, c’est bien embêtant.
Cela dit un stoploss et un takeprofit se font déjà au milieu d’une bougie. Donc il se passe bien quelque chose en dehors des barres.
J’attends avec impatience la nouvelle mise à jour…
Alors, je ne voudrais pas abuser, mais comment faire pour placer un take profit adapté en fonction des profits déjà réalisés.
Puisqu’ils peuvent être calculés à chaque bougie.
De tout ce que j’ai déjà essayé voici ce qui s’en rapproche mais ça ne s’arrête pas où je voudrais.
Je ne comprends d’ailleurs pas pourquoi ça s’arrête quand ça s’arrête ni pourquoi ça ne s’arrête pas quand ça ne s’arrête pas…
Le maxdailyprofit ne correspond ni aux points ni aux € qui apparaissent sur la courbe des gains.
Cordialement
Eric
// DAX M10
DEFPARAM CumulateOrders = TRUE // Cumul des positions
DEFPARAM FLATBEFORE = 080000
DEFPARAM FLATAFTER = 220000
// ---parameters
MaxDailyProfit= 15 //Max daily profit allowed (in money)
MaxDailyLoss=150 //Max daily loss allowed (in money)
// first time we launch the code, the trading is allowed
once TradeAllowed=1
// reset the current state of the strateygprofit each new day
If intradaybarindex=0 then
MyProfit=STRATEGYPROFIT
TradeAllowed=1
endif
If StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss then
EXITSHORT AT MARKET
TradeAllowed=0
endif
// Ouvrir une position Short
if TradeAllowed=1 and close < Average[3](close) AND Average[3](close)< Average[5](close) and Average[5](close) < Average[19](close) THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
// Sortie short
IF close crosses over Average[9](close) THEN
exitshort AT MARKET
ENDIF
SET STOP pLOSS 21
SET TARGET pProfit 71
Les ordres se coupent en gain ou en perte avec les niveaux de prix indiqués en Takeprofit et stoploss, parce qu’ils sont inscrits dans le carnet du courtier. Là c’est indépendant du code bien entendu.
Je regarderai demain le problème mentionné, si jamais j’oubliai, merci de répondre à nouveau au sujet.
Bonjour Nicolas,
Je reviens vers vous pour savoir si vous avez eu le temps de regarder mon code.
Je vous remercie par avance de l’attention que vous y portez.
Cordialement
Eric
Voilà le code ajusté. J’ai ajouté un takeprofit automatique en argent ($profit), calculé suivant l’objectif quotidien et le profit/perte déjà connu de la journée en cours. Cela semble fonctionner correctement, merci de vérifier et de faire un retour.
// DAX M10
DEFPARAM CumulateOrders = TRUE // Cumul des positions
DEFPARAM FLATBEFORE = 080000
DEFPARAM FLATAFTER = 220000
// ---parameters
MaxDailyProfit= 15 //Max daily profit allowed (in money)
MaxDailyLoss=150 //Max daily loss allowed (in money)
// first time we launch the code, the trading is allowed
once TradeAllowed=1
// reset the current state of the strateygprofit each new day
If intradaybarindex=0 then
MyProfit=STRATEGYPROFIT
DailyProfit=0
TradeAllowed=1
endif
//compute live daily profit & automatic takeprofit
dailyprofit = strategyprofit-myprofit
autotakeprofit = MaxDailyProfit-dailyprofit
If StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss then
EXITSHORT AT MARKET
TradeAllowed=0
endif
// Ouvrir une position Short
if TradeAllowed=1 and close < Average[3](close) AND Average[3](close)< Average[5](close) and Average[5](close) < Average[19](close) THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
// Sortie short
IF close crosses over Average[9](close) THEN
exitshort AT MARKET
ENDIF
SET STOP pLOSS 21
SET TARGET $Profit autotakeprofit
//graph dailyprofit
//graph autotakeprofit coloured(100,52,69)
//graph tradeallowed
Bonjour,
merci pour le code. Je l’ai testé et malheureusement ça ne marche pas très bien.
ça semble fonctionner pour le maxdailyloss.
Mais pour le maxdilyprofit ça ne marche pas du tout. Par exemple si je le mets à 40,
il y a une bougie où je suis à 60 de profit puis la suivante où je suis à 110 puis la suivante où je suis à 130 et ça ne s”arrête toujours pas.
Puis parfois ça s’arrête et je ne sais pas pourquoi.
cordialement