Cloture position
Forums › ProRealTime forum Français › Support ProOrder › Cloture position
- This topic has 12 replies, 4 voices, and was last updated 7 years ago by Nicolas.
-
-
11/25/2016 at 11:19 AM #17160
Bonjour,
J’ai créé un système de trading automatique dans probacktest dont voici le code ci dessous.
C’est un système assez simple, achat lorsque cours est sur bande bollinger basse et vente sur bande bollinger haute, sortie de la position lorsque gain de 4 pips.
Or en mode test lorsque mon objectif de 4 pips n’est pas atteint et que l’on arrive sur bande bollinger opposée (si achat sur BB basse et que cours = BB haute), le système stoppe automatiquement ma position et prend la position inverse. Or ce n’est pas ce que je désire, je souhaite qu’il conserve sa position tout en éventuellement cumuler une position inverse en hedging.
Si quelqu’un a la réponse je suis preneur.
Sinon concernant ce système, même si il parait très simple je le teste depuis 2 mois et il est hyper profitable sur du DAX 2mns (les seuls pertes ont été dues au problème évoqué précédemment).
Merci d’avance.
Ivan
123456789101112131415161718192021222324252627282930// 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éetimeEnterBefore = time >= 100000// 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éetimeEnterAfter = time < 210000// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiésdaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Conditions pour ouvrir une position acheteuseindicator1 = Average[20](close)-2.5*std[20](close)c1 = (close <= indicator1)IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THENBUY 1 SHARES AT MARKETENDIF// Conditions pour ouvrir une position en vente à découvertindicator2 = Average[20](close)+2.5*std[20](close)c2 = (close >= indicator2)IF c2 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THENSELLSHORT 1 SHARES AT MARKETENDIF// Stops et objectifsSET TARGET pPROFIT 411/25/2016 at 12:25 PM #17169Bonjour Grdchef,
D’une part, d’un point de vue programmation, il aurait fallu mettre “DEFPARAM CumulateOrders = True” et non pas “False” au début, pour que le programme comprenne qu’il a le droit de prendre un autre ordre tout en conservant une première position en cours.
D’autre part hélas, d’un point de vue éxécution pour le moment proorder ne permet pas de cumuler 2 positions de sens inverse même en ayant indiqué le “=True” ci-dessus. Je crois qu’entre utilisateurs on est quasiment tous d’accord que c’est une amélioration de PRT que nous aimerions avoir.
Merci de mettre à jour ton profil avec ton pays pour que ton drapeau se mette à jour.
J’édite ton message pour mettre le code au bon format, merci pour les prochains message d’utiliser le bouton “insert PRT code” pour une meilleure lisibilité et une lecture plus rapide des codes par ceux qui veulent filer un coup de main (ça permet de faire référence aux numéros de lignes automatiquement ajoutés, ça rajoute tout seul la même couleur de mots clés que dans PRT ce qui fait vite voir les éventuelles fautes de syntaxe etc… bref ça nous rend la vie beaucoup plus facile pour aider).
11/25/2016 at 12:43 PM #17172Bonjour Noobywan,
Merci pour ta réponse.
Désolé c’était un premier post. Compris pour le Insert PRT code et profil mis à jour.
Suite à ton message j’ai une autre question. Pourquoi alors que DEFPARAM CumulateOrders = False, prend t’il un autre ordre en clôturant le premier ?
Merci.
Ivan
11/25/2016 at 1:41 PM #17174Strictement parlant, le CumulateOrders ne joue que sur le cumul de positions de même sens (j’ai envie de rajouter “pour le moment”, car si un jour PRT permet de cumuler des positions de sens opposées, on ne sait pas encore si ça sera via ce même mot clé ou via un autre créé spécialement. Peut-être que Nicolas sait si c’est sur le radar des développeurs ou pas.)
Mais puisque ici ce qui t’intéresse c’est le cas de positions de sens inverse, hélas qu’on mette “true” ou “false”, dans les 2 cas quand tu lances un ordre de sens inverse, il va démarrer cette position inverse et, ne sachant pas cumuler avec la précédente de toute façon, il la clôture même si les conditions de sorties de la précédente ne sont pas atteintes.
Pour contourner ça et savoir conserver un trade dans un sens tout en jouant l’autre sens, il faut voir s’il est possible d’écrire 2 codes séparés, un qui s’occupe des trades haussiers et un qui s’occupe des trades baissiers, et les faire tourner en parallèle avec probacktest/proorder. A vue de nez sans me pencher dessus plus que ça, c’est faisable mais ça te nécessitera probablement d’ajouter des instructions “stops” dans chacun des 2 codes, car en ayant traité les 2 sens en même temps avec seulement target et sans stop, tu peux avoir eu des cas ou le changement de sens avec clôture non désirée du trade précédent a agit comme un stop permettant sans le savoir d’éviter une grande moins-value latente (quand la target du trade précédent n’est pas atteinte après le déclenchement du in de sens inverse, et que ce trade précédent se retrouve conservé trop loin au-delà de la target du trade de sens inverse…).
11/25/2016 at 2:51 PM #17178Merci encore Noobywan. C’est une excellente idée les 2 codes séparés. Je n’y avais pas pensé.
Concernant les stops c’est volontaire de ne pas en mettre. J’ai remarqué que sur le DAX en 2mns (et seulement lui et dans cette timeline) les cours revenaient systématiquement. Et si jamais cela n’est pas le cas, tu encaisses tellement de trades que cela compense largement les grandes moins values latentes (je sais le principe est particulier quand même, je suis le premier surpris). Testes le tu verras (en 2 mois c’est 100%) même si cela ne sera pas toujours le cas en cas de grosses infos (et seulement dans ce cas) mais là tu coupes manuellement.
Encore merci pour le temps que tu as passé à me répondre.
Ivan
1 user thanked author for this post.
11/25/2016 at 4:03 PM #17186Merci grdchef pour le partage, on assiste ici à un phénomène de “mean reversion” bien connu et dont l’indicateur le plus visuel et répandu est bien les Bandes de Bollinger avec ses X déviations du prix sur les N dernières périodes. Évidemment, le prix reviendra toujours vers sa moyenne et on peut exploiter ce filon, le problème est que l’on ne sait jamais quand il le fera, plus ou moins tard après son test de sorties des bandes, soit le résidu de la distribution gaussienne autour de la moyenne mobile. C’est un peu le sujet de cet article du blog d’ailleurs: trading statistique avec une distribution normal
Ayant beaucoup travaillé sur ces principes, je serai curieux de comprendre comment tu gères tes pertes latentes ?
11/25/2016 at 4:38 PM #17189Bonjour Nicolas,
En 2 mois les pertes ont été dues au psychologique. La règle a toujours été valable. Raison pour laquelle je me suis tourné récemment vers le trading automatique.
Je n’ai pas encore eu de grosses pertes latentes je ne peux pas te répondre. Cela est du au fait je pense que nous soyons en range depuis Août. L’effet Trump n’a pas eu d’impact.
J’aurais aimé backtester ce système depuis une plus longue période (1er Janvier) mais je n’y arrive pas (peut être du au fait que la timeframe soit 2mns). Cela serait intéressant de savoir comment il se comporte en tendance.
En moyenne ce système prend entre 10 et 15 positions par jour avec un gain de 4 pips soit une cinquantaine de pips par jour. Cela permet à priori de gérer les imprévus (qui je pense ne devraient pas tarder à arriver).
Si tu as une solution pour backtester ce système sur un laps de temps plus long je suis preneur.
Merci.
Bon week end.
Ivan
11/25/2016 at 5:35 PM #17194Bonsoir.
Toujours intéressant de partager.
Cependant, un système sans stop loss est condamné à l’avance.
Quand le dax va perdre 200 points d’un seul coup, tu vas perdre 5000 euros alors que ton gain moyen par position tourne autour de 25 euros avec le cumul des pertes.
De plus le drawndown max est supérieur au gain alors que je ne valide mes programmes que si celui-ci est inférieur à 15 % sur 200 ordres dans le backtest.
Mais un stop suiveur à 30 et tu vas améliorer ton programme.
Attention, toutes les barres à zéro ne sont pas forcément gagnante.
11/26/2016 at 2:25 PM #17233Bonjour Arcane,
Tout à fait d’accord avec toi concernant le stop (20 années de trading me l’ont bien appris). En réalité je suis au début de la recherche d’une stratégie qui devrait se peaufiner petit à petit.
Par contre concernant tes chiffres je ne suis pas totalement d’accord avec toi. Comme me l’a conseillé Noobywan il faut en réalité 2 codes au lieu d’un seul qui créé une erreur. Ces 2 deux codes que tu pourras trouver ci dessous doivent être utilisés en simultané.
En pièce jointe tu pourras trouver les rapports (un pour achat et un pour vente) de backtest sur 10000 unités soit à priori le maximum pour une timeframe de 2mns qui reprèsente 1 mois.
12345678910111213141516171819202122// 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éetimeEnterBefore = time >= 100000// 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éetimeEnterAfter = time < 210000// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiésdaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Conditions pour ouvrir une position en vente à découvertindicator1 = Average[20](close)+2.5*std[20](close)c1 = (close >= indicator1)IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THENSELLSHORT 1 SHARES AT MARKETENDIF// Stops et objectifsSET TARGET pPROFIT 412345678910111213141516171819202122// 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éetimeEnterBefore = time >= 100000// 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éetimeEnterAfter = time < 210000// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiésdaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Conditions pour ouvrir une position acheteuseindicator1 = Average[20](close)-2.5*std[20](close)c1 = (close <= indicator1)IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THENBUY 1 SHARES AT MARKETENDIF// Stops et objectifsSET TARGET pPROFIT 4Bon week end
Ivan
11/26/2016 at 4:17 PM #1724711/26/2016 at 4:46 PM #17252Hello Arcane,
Merci pour l’historique. Cela confirme ce que je pense. Ne trouves tu pas étonnant d’avoir du 100 % en achat et en vente sur plus 1 an. Moi je trouve cela plutôt très intéressant.
Et à mon avis cela devient beaucoup plus intéressant si tu changes DEFPARAM CumulateOrders = False par DEFPARAM CumulateOrders = True
Par contre concernant le drawdown je suis c’est vrai étonné par le montant. J’aurais bien aimé comprendre ce qui a généré ces montants. Je vais étudier cela.
Encore merci.
Bonne fin de week end.
Ivan
11/26/2016 at 6:03 PM #17262Je te mets en copie la courbe du capital pour la version achat.
Tu vas comprendre par toi même.
Comme je disais dans mon autre message, il ne faut pas faire confiance au backtest.
Dans la réalité, tu vas avoir beaucoup plus de sorties fausses.
Je te mets aussi les résultats avec le cumul des positions. Le drawndown s’enfonce de plus en plus avec des clôtures sur la même barre qui se multiplient.
Bon courage à toi pour améliorer l’idée.
11/26/2016 at 7:30 PM #17282100% de trades gagnants est logique quand on refuse de perdre (pas de stop-loss). C’est la même idée que de prendre 2 points quand on en risque 20, on obtient un ratio gain/perte énorme.
Bien entendu ici on confirme l’idée que le prix reviendra vers sa moyenne, mais si celui-ci attend 2 jours pour le faire alors l’observation de la déviation du prix pour rentrer en position n’a plus de sens, puisqu’elle devrait se vérifier dans les minutes qui suivent l’entrée en position.
-
AuthorPosts
Find exclusive trading pro-tools on