Calcul de position de type Martingale en fonction des résultats de la veille
Forums › ProRealTime forum Français › Support ProOrder › Calcul de position de type Martingale en fonction des résultats de la veille
- This topic has 15 replies, 4 voices, and was last updated 4 years ago by jeannord.
Tagged: martingale, position size
-
-
08/08/2020 at 6:44 PM #141166
Bonjour
Débutant en programmation, et nouvel utilisateur du forum, bien que retraité, j’ai besoin de votre aide
Je voudrais écrire un code qui utilise le résultat journalier fixe, gain ou perte d’une stratégie pour faire varier à la hausse ou à la baisse le nombre de contrats achetés les jours suivants.
Dans l’exemple joint : DAX 3 minutes
- Moyenne mobile 20, achat à la hausse, vente à la baisse.
- Gain ou perte journalière fixe : 20 €
- n nombre de contrats (n = 1 le 1er jour)
Je souhaite
- Si perte, je veux le jour suivant acheter ou vendre n+1 contrats
- Si gain, je veux le jour suivant acheter ou vendre n-1 contrats jusqu’au moment ou n = 1
- n ne doit jamais être inférieur à 1
Exemple :
Jour 1 n=1 gain
Jour 2 n=1 gain
Jour3 n=1 perte
Jour4 n=2 perte
Jour5 n=3 gain
Jour6 n=2 gain
Jour7 n=1 gain
Jour8 n=1 ………
Merci d’avance
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273// Définition des paramètres du codeDEFPARAM 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 = 090000// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"DEFPARAM FLATAFTER = 171500// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiésdaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Gain et perte journalière (20 avec stoploss)MaxDailyprofit= 20//Max daily loss allowed (in money)MaxDailyLoss= 3 //Max daily loss allowed (in money)// first time we launch the code, the trading is allowedonce TradeAllowed=1// first time we launch the code, the number of contracts is 1once n = 1// reset the current state of the strateygprofit each new dayIf intradaybarindex=0 thenMyProfit=STRATEGYPROFITDailyProfit=0TradeAllowed=1endif//compute live daily profit & automatic takeprofitdailyprofit = strategyprofit-myprofitautotakeprofit = MaxDailyProfit-dailyprofitIf StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss thenEXITSHORT AT MARKETTradeAllowed=0endif// Conditions pour ouvrir une position acheteuseindicator1 = Average[20](close)indicator2 = Average[20](close)c1 = (indicator1 > indicator2[1])IF c1 AND not daysForbiddenEntry and tradeallowed = 1 THENBUY n CONTRACT AT MARKETENDIF// Conditions pour fermer une position acheteuseindicator3 = Average[20](close)indicator4 = Average[50](close)c2 = (indicator3 <= indicator4[1])IF c2 THENSELL AT MARKETENDIF// Conditions pour ouvrir une position en vente à découvertindicator5 = Average[20](close)indicator6 = Average[20](close)c3 = (indicator5 < indicator6[1])IF c3 AND not daysForbiddenEntry and tradeallowed = 1 THENSELLSHORT n CONTRACT AT MARKETENDIF// Conditions pour fermer une position en vente à découvertindicator7 = Average[20](close)indicator8 = Average[20](close)c4 = (indicator7 >= indicator8[1])IF c4 THENEXITSHORT AT MARKETENDIF// Stops et objectifsSET STOP pLOSS 20SET TARGET $Profit autotakeprofit08/09/2020 at 1:07 AM #141180Entre les lignes 19 et 20 insérez ces lignes (je ne l'ai pas essayé):
12345If StrategyProfit > StrategyProfit[1] Thenn = max(1,n - 1)Elsif StrategyProfit < StrategyProfit[1] Thenn = n + 1Endif08/09/2020 at 9:06 AM #141189Bonjour,
Désolé toutes les études statistiques (Et j’ai fit pas mal de Code auto sur ce sujet) montrent que les martingales ne fonctionnent pas notamment car à un moment on est limité par le capital
Ce qui est important c’est la régularité, plus vite on peut gagner, plus vite on peut perdre
Très bonne fin de journée
08/09/2020 at 10:01 AM #141198Avant tout un grand merci Roberto
J’ai appliqué la modification, il reste un problème voici le résultat :
J
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879// Définition des paramètres du codeDEFPARAM 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 = 090000// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"DEFPARAM FLATAFTER = 171500// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiésdaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Gain et perte journalière (20 avec stoploss)MaxDailyprofit= 20//Max daily loss allowed (in money)MaxDailyLoss= 3 //Max daily loss allowed (in money)// first time we launch the code, the trading is allowedonce TradeAllowed=1// first time we launch the code, the number of contracts is 1once n = 1if strategyprofit>strategyprofit[1] thenn =max(1, n-1)elsif strategyprofit<strategyprofit[1] thenn =n+1endif// reset the current state of the strateygprofit each new dayIf intradaybarindex=0 thenMyProfit=STRATEGYPROFITDailyProfit=0TradeAllowed=1endif//compute live daily profit & automatic takeprofitdailyprofit = strategyprofit-myprofitautotakeprofit = MaxDailyProfit-dailyprofitIf StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss thenEXITSHORT AT MARKETTradeAllowed=0endif// Conditions pour ouvrir une position acheteuseindicator1 = Average[20](close)indicator2 = Average[20](close)c1 = (indicator1 > indicator2[1])IF c1 AND not daysForbiddenEntry and tradeallowed = 1 THENBUY n CONTRACT AT MARKETENDIF// Conditions pour fermer une position acheteuseindicator3 = Average[20](close)indicator4 = Average[50](close)c2 = (indicator3 <= indicator4[1])IF c2 THENSELL AT MARKETENDIF// Conditions pour ouvrir une position en vente à découvertindicator5 = Average[20](close)indicator6 = Average[20](close)c3 = (indicator5 < indicator6[1])IF c3 AND not daysForbiddenEntry and tradeallowed = 1 THENSELLSHORT n CONTRACT AT MARKETENDIF// Conditions pour fermer une position en vente à découvertindicator7 = Average[20](close)indicator8 = Average[20](close)c4 = (indicator7 >= indicator8[1])IF c4 THENEXITSHORT AT MARKETENDIF// Stops et objectifsSET STOP pLOSS 20SET TARGET $Profit autotakeprofitour 1 n=1 perte 20
Jour 2 n= 2 perte 40
Jour3 n =1 gain 20 ici n aurait dû être égal à 3 et le gain de 60.
Je vous joins le code corrigé et le tableau des résultats.
Bien cordialement
Jean
08/09/2020 at 10:07 AM #14120108/09/2020 at 1:01 PM #141213Je ne sais pas comment se fait le calcul PERF.ABS.
08/09/2020 at 2:12 PM #141216Excuse moi Roberto, je n’ai pas ta pratique et le terme PERF.ABS ne me parle pas.
Avec la correction que tu m’as indiquée, que j’ai incluse dans le dernier code ci-dessus, voici le résultat : (Résultats du tableau joins plus haut dans mon dernier message pour la période du 9 juillet au 7 août)
Pour un strategyprofit journalier de 20€ :
Avec la correction que tu m’as indiquée, que j’ai incluse dans le dernier code ci-dessus, voici le résultat :
Pour un strategyprofit journalier de 20€ :
9 Juillet perte n=1 -20 ok
10 Juillet perte n=2 -40 ok
13 Juillet gain n=1 +20 problème pour le jour 3, n devrait être égal à 3 et donner un profit de 60, ce n’est pas le cas.
14 Juillet gain n =1 +20 ……
Bien cordialement
08/09/2020 at 2:15 PM #141218Le code qu’a donné Roberto doit être placé juste avant de lancer les ordres (dans le même bloc conditionnel), sinon à chaque lecture du code, la variable n sera recalculé et la taille de position ajustée, même si on ne rentre pas au marché (pas de conditions pour).
08/09/2020 at 4:00 PM #141222Le code est bien tel quel, le 13 juillet est court avec 3 contrats.
Encore une fois, je ne sais pas comment PERF.ABS (vous l’avez joint vous-même) est calculé.
08/09/2020 at 5:24 PM #141232Roberto, Nicolas,
Merci pour votre implication.
Roberto, en vérifiant, je vois que le code fonctionne au niveau de l’augmentation et de la diminution du nombre de contrats.
Je pense que si l’évolution du nombre de contrats est résolue, il doit rester un problème au niveau du stratégyprofit en fonction de l’évolution de n.
Car le Perf Abs ne semble pas refléter le nombre de contrats n.
Nicolas j’ai déplacé le code de Roberto, mais cela ne change rien.
Je continue à travailler sur le code.
Je joins le dernier code en vigueur.
Bien Cordialement
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879// Définition des paramètres du codeDEFPARAM 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 = 090000// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"DEFPARAM FLATAFTER = 171500// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiésdaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Gain et perte journalière (20 avec stoploss)MaxDailyprofit= 20//Max daily loss allowed (in money)MaxDailyLoss= 3 //Max daily loss allowed (in money)// first time we launch the code, the trading is allowedonce TradeAllowed=1// first time we launch the code, the number of contracts is 1once n = 1// reset the current state of the strateygprofit each new dayIf intradaybarindex=0 thenMyProfit=STRATEGYPROFITDailyProfit=0TradeAllowed=1endif//compute live daily profit & automatic takeprofitdailyprofit = strategyprofit-myprofitautotakeprofit = MaxDailyProfit-dailyprofitIf StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss thenEXITSHORT AT MARKETTradeAllowed=0endif// Conditions pour ouvrir une position acheteuseindicator1 = Average[20](close)indicator2 = Average[20](close)c1 = (indicator1 > indicator2[1])if strategyprofit>strategyprofit[1] thenn =max(1, n-1)elsif strategyprofit<strategyprofit[1] thenn =n+1endifIF c1 AND not daysForbiddenEntry and tradeallowed = 1 THENBUY n CONTRACT AT MARKETENDIF// Conditions pour fermer une position acheteuseindicator3 = Average[20](close)indicator4 = Average[50](close)c2 = (indicator3 <= indicator4[1])IF c2 THENSELL AT MARKETENDIF// Conditions pour ouvrir une position en vente à découvertindicator5 = Average[20](close)indicator6 = Average[20](close)c3 = (indicator5 < indicator6[1])IF c3 AND not daysForbiddenEntry and tradeallowed = 1 THENSELLSHORT n CONTRACT AT MARKETENDIF// Conditions pour fermer une position en vente à découvertindicator7 = Average[20](close)indicator8 = Average[20](close)c4 = (indicator7 >= indicator8[1])IF c4 THENEXITSHORT AT MARKETENDIF// Stops et objectifsSET STOP pLOSS 20SET TARGET $Profit autotakeprofit08/09/2020 at 6:32 PM #141236Tu n’as pas compris, le calcul de taille de position doit être placé juste avant la ligne BUY et aussi celle avant le SELLSHORT, car c’est à ces moments précis où tu dois choisir ta taille de lot et pas à chaque lecture du code.
Je n’ai pas pu tester mais c’est la première chose à laquelle je pense, il y a peut-être autre chose à vérifier.
08/09/2020 at 11:22 PM #141263Ajoutez ces lignes à la fin du code pour voir la valeur que les variables ont à chaque barre:
1234Graph nGraph autotakeprofitGraph StrategyProfitgraph DailyProfitCependant, le problème est que vous avec
1$Profitvous avez limité le bénéfice à 20 €, que ce soit 1 contrat ou 3 contrats. Remplacez-le par:
1pProfitet vous verrez que cela fonctionne comme vous le souhaitez.
1 user thanked author for this post.
08/09/2020 at 11:29 PM #141269Essayez-le aussi avec:
1SET TARGET $Profit autotakeprofit * n08/10/2020 at 10:24 AM #141292Bonjour Nicolas
J’avais fait l’essai en déplaçant le code de Roberto, mais le résultat était moins bon, n restait à la valeur 1, maintenant j’ai peut-être mal placé le code, je joins le code.
Le problème vient du Perf Abs car avec le code de Roberto positionné entre les lignes 19 et 20, on obtient bien le résultat souhaité au niveau des contrats, lors d’une perte n augmente, lors d’un gain n diminue.
Comme me l’a fait remarquer Roberto dans sa pièce jointe du 08 09 à 4 pm, n varie bien, mais la variation du Perf Abs pose problème
Le 9 juillet 1 contrat perte Perf Abs -20 € ok
Le 10 juillet 2 contrats perte Perf Abs – 40€ ok
Le 13 juillet 3 contrats gain Perf Abs +20,1€ Problème, le Perf Abs aurait du être de 60 €
Le 14 juillet 2 contrats gain Perf Abs +20€ Problème, le Perf Abs aurait du être de 40 €
Est-ce que le Strategyprofit est la bonne référence ???
Bien cordialement
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485// Définition des paramètres du codeDEFPARAM 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 = 090000// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"DEFPARAM FLATAFTER = 171500// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiésdaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Gain et perte journalière (20 avec stoploss)MaxDailyprofit= 20//Max daily loss allowed (in money)MaxDailyLoss= 3 //Max daily loss allowed (in money)// first time we launch the code, the trading is allowedonce TradeAllowed=1// first time we launch the code, the number of contracts is 1once n = 1// reset the current state of the strateygprofit each new dayIf intradaybarindex=0 thenMyProfit=STRATEGYPROFITDailyProfit=0TradeAllowed=1endif//compute live daily profit & automatic takeprofitdailyprofit = strategyprofit-myprofitautotakeprofit = MaxDailyProfit-dailyprofitIf StrategyProfit>=MyProfit+MaxDailyProfit or Strategyprofit<=MyProfit-MaxDailyLoss thenEXITSHORT AT MARKETTradeAllowed=0endif// Conditions pour ouvrir une position acheteuseindicator1 = Average[20](close)indicator2 = Average[20](close)c1 = (indicator1 > indicator2[1])IF c1 AND not daysForbiddenEntry and tradeallowed = 1 thenif strategyprofit>strategyprofit[1] thenn =max(1, n-1)elsif strategyprofit<strategyprofit[1] thenn =n+1endifBUY n CONTRACT AT MARKETENDIF// Conditions pour fermer une position acheteuseindicator3 = Average[20](close)indicator4 = Average[50](close)c2 = (indicator3 <= indicator4[1])IF c2 THENSELL AT MARKETENDIF// Conditions pour ouvrir une position en vente à découvertindicator5 = Average[20](close)indicator6 = Average[20](close)c3 = (indicator5 < indicator6[1])IF c3 AND not daysForbiddenEntry and tradeallowed = 1 THENif strategyprofit>strategyprofit[1] thenn =max(1, n-1)elsif strategyprofit<strategyprofit[1] thenn =n+1endifSELLSHORT n CONTRACT AT MARKETENDIF// Conditions pour fermer une position en vente à découvertindicator7 = Average[20](close)indicator8 = Average[20](close)c4 = (indicator7 >= indicator8[1])IF c4 THENEXITSHORT AT MARKETENDIF// Stops et objectifsSET STOP pLOSS 20SET TARGET $Profit autotakeprofit08/10/2020 at 10:58 AM #141294 -
AuthorPosts
Find exclusive trading pro-tools on