Problème de la règle EXIT dans MT4 !!!
18 réponses
Gaudio Fx
Il y a 8 ans #114590
Je peux remplacer cette règle de sortie par une autre plus logique :
Mais si cette condition est vraie avant l'ordre, dans metatrader la fermeture est au même point que l'ouverture ..mais dans strategyquant la fermeture est après la fermeture de la bougie !!! ... je veux la même condition dans MT4... C'EST POSSIBLE ?
mikeyc
Il y a 8 ans #134663
Cette règle de sortie ne me semble pas logique.
Pourquoi un volume supérieur à la moyenne signifierait-il la fermeture d'une position courte et un volume inférieur à la moyenne signifierait-il la fermeture d'une position longue ou vice versa ? Il s'agit là d'un autre exemple de logique étrange dans le choix de règles symétriques.
Le fait que le volume soit supérieur ou inférieur à la moyenne n'a pas d'effet directionnel.
Gaudio Fx
Il y a 8 ans #134664
ce n'est pas logique je sais ... mais c'était juste un exemple ... c'est le concept qui me semble important, ou si la règle de sortie est active avant l'ouverture du trade, pourquoi dans metatrader4 est active en même temps que l'ouverture alors que sur strategyquant est active seulement en bougie de fermeture ? ???? ... C'EST LA QUESTION ... pas pour l'exemple logique de sortie ....
Je peux remplacer cette règle de sortie par une autre plus logique :
Mais si cette condition est vraie avant l'ordre, dans metatrader la fermeture est au même point que l'ouverture ..mais dans strategyquant la fermeture est après la fermeture de la bougie !!! ... je veux la même condition dans MT4... C'EST POSSIBLE ?
mikeyc
Il y a 8 ans #134665
Il semble qu'il s'agisse d'ordres en attente (ordres à cours limité ou ordres stop). Êtes-vous sûr qu'ils sont fermés et non supprimés ?
Que montre l'onglet des résultats dans MT4 plutôt que le graphique ?
Gaudio Fx
Il y a 8 ans #134666
tomas262
Il y a 8 ans #134667
Gaudio, il me semble que les conditions d'entrée et de sortie peuvent parfois "entrer en collision" et selon la précision du backtesting vous obtenez alors un comportement différent comme une sortie immédiate après l'entrée. Pouvez-vous m'envoyer la stratégie (fichier *.STR) à [email protected] afin que je puisse le vérifier ? La solution ici peut être un correctif pour SQ ou la modification du code de votre stratégie pour attendre la fermeture de la barre.
geektrader
Il y a 8 ans #134673
Oui, c'est un problème de précision. Si vous backtestez une telle stratégie avec des données réelles, elle agira de la même manière dans SQ et échouera. Veillez donc à toujours vérifier les stratégies avec des données réelles pour les dernières années au moins afin d'éviter ce genre de choses. Personnellement, je n'utiliserais jamais le "volume" pour une logique de trading car le volume est totalement différent d'un courtier à l'autre. Même chose pour "hour", sauf si vous savez que les données historiques que vous utilisez sont absolument synchronisées avec le serveur de votre courtier actuel.
mikeyc
Il y a 8 ans #135652
Je répète : strategyquant active la règle de sortie immédiatement après la clôture de la bougie où vous avez ouvert la transaction.Au contraire de mt4 cela ne se produit pas, la règle de sortie est active en même temps que l'ouverture.
Je viens de découvrir ce problème avec SQ vs MT4 également.
Dans SQ, la position est ouverte à l'ouverture de la barre, et la position est fermée à la fin de la barre/à l'ouverture de la barre suivante. Dans MT4 (avec une précision de chaque tick), l'ordre est ouvert et fermé immédiatement à l'ouverture de la barre.
Ainsi, dans MT4, vous ne voyez aucun profit, alors que dans SQ, la rentabilité est très bonne. Les résultats sont complètement différents.
Cela se produit dans les stratégies qui ont une règle de sortie qui est vraie en même temps que la règle d'entrée est vraie, ce qui signifie ouvrir un trade et fermer un trade sur cette barre. Il semble que SQ considère que cela signifie ouvrir la transaction à l'ouverture de la barre et la clôturer à la fin de la barre, alors que la logique de MT4 fait les deux à l'ouverture de la barre.
Ce qui est inquiétant, c'est que cela s'applique à de nombreuses stratégies avec des règles d'entrée et de sortie.....
mikeyc
Il y a 8 ans #135653
Les premiers tests montrent qu'il est possible de "corriger" les stratégies MT4 pour qu'elles fonctionnent comme dans SQ en ajoutant une ligne de code à la fonction suivante :
void closePositionAtMarket() { RefreshRates() ; double priceCP ; if(OrderType() == OP_BUY) { priceCP = Bid ; } else { priceCP = Ask ; } if(OrderOpenTime() >= Time[0]) return ; // Nouvelle ligne de code ! Sortie si l'ordre vient d'être ouvert rettmp = OrderClose(OrderTicket(), OrderLots(), priceCP, MaxSlippage) ; }
Gaudio Fx
Il y a 8 ans #135655
Les premiers tests montrent qu'il est possible de "corriger" les stratégies MT4 pour qu'elles fonctionnent comme dans SQ en ajoutant une ligne de code à la fonction suivante :
void closePositionAtMarket() { RefreshRates() ; double priceCP ; if(OrderType() == OP_BUY) { priceCP = Bid ; } else { priceCP = Ask ; } if(OrderOpenTime() >= Time[0]) return ; // Nouvelle ligne de code ! Sortie si l'ordre vient d'être ouvert rettmp = OrderClose(OrderTicket(), OrderLots(), priceCP, MaxSlippage) ; }
geektrader
Il y a 8 ans #135656
Oui, mais en fait, si vous y réfléchissez bien, c'est SQ qui se trompe dans le backtest, et non MT4. Si une règle d'ouverture et de fermeture s'applique en même temps, l'ordre doit être ouvert et fermé dans les 2 ticks - tick 1 pour l'ouverture, tick 2 pour la fermeture. Le fait de le conserver pendant une barre est en fait moins valable que de le fermer immédiatement comme le fait MT4. Donc en fait le code de backtesting de SQ devrait être ajusté pour fermer l'ordre tout de suite aussi et pour invalider la stratégie de cette façon aussi, parce que c'est tout ce que c'est, vous ne pouvez pas avoir une règle d'ouverture et de fermeture s'appliquant au même moment. Ce serait valable SI la stratégie avait AUSSI l'option de maintenir le trade au moins 1 barre, alors d'accord, votre code MT4 ci-dessus serait correct. Mais si les règles d'ouverture et de fermeture sont valables en même temps, ce que fait SQ est exactement ce qui est logiquement juste et comment une telle stratégie fonctionnerait également si elle était négociée manuellement. Par exemple, les règles d'ordre diraient : ouvrir une transaction si la clôture précédente > l'ouverture actuelle et la fermer si la clôture précédente > l'ouverture actuelle. Dans ce cas, pour respecter les règles, il faudrait ouvrir l'ordre et le fermer immédiatement - ce qui n'a sûrement aucun sens, mais c'est exactement ce que font les stratégies qui ont de telles règles. S'il s'agissait d'ouvrir une transaction si la clôture précédente > l'ouverture actuelle, d'attendre au moins une barre et de la clôturer si la clôture précédente > l'ouverture actuelle, alors cela aurait du sens.
mikeyc
Il y a 8 ans #135658
Rechercher dans le fichier mq4 closePositionAtMarket()
Ajouter la ligne
si(Heure d'ouverture de la commande() >= L'heure[0]) retour; // Nouvelle ligne de code ! Sortir si l'ordre vient d'être ouvert
Là où je l'ai montré.
geektrader
Il y a 8 ans #135660
Oui, je comprends tout à fait ce que vous voulez dire, mais cela équivaut à une règle supplémentaire de "hold trade at least 1 bar before exiting", qui n'est pas une règle dans SQ pour cette stratégie comme vous le dites et qui est donc erronée LOGIQUEMENT. Il est certain que votre solution fait ce que vous voulez qu'elle fasse, je le comprends, mais logiquement elle n'est toujours pas correcte. Si vous avez les mêmes règles d'ouverture et de fermeture s'appliquant en même temps, pour traduire correctement la logique de SQ à MT4, l'ordre DOIT être ouvert et fermé dans les 2 ticks s'il est exposé au marché réel. Bien sûr, SI vous ajoutez la règle supplémentaire de "tenir au moins 1 barre", alors votre solution est correcte, mais comme cette règle n'est pas dans la stratégie originale dans SQ, ce n'est pas correct de le faire comme ça dans MT4. Il ne s'agit pas vraiment d'un bug, mais de la manière dont de telles règles (sans la règle supplémentaire "hold trade at least 1 bar") agiraient dans le trading réel.
mikeyc
Il y a 8 ans #135663
Je propose simplement une solution pour que MT4 se comporte comme SQ. Personne n'est obligé de le faire, mais s'ils veulent que le trading en direct corresponde à SQ, c'est ce qu'il faut faire.
Gaudio Fx
Il y a 8 ans #135664
Rechercher dans le fichier mq4 closePositionAtMarket()
Ajouter la ligne
if(OrderOpenTime() >= Time[0]) return ; // Nouvelle ligne de code ! Quitter si l'ordre vient d'être ouvert
Là où je l'ai montré.
okok...
Si je veux que ce soit en logique "ou" et non "si", est-ce que je remplace "si" par "si" ?
eg : or(OrderOpenTime() >= Time[0]) return ; // Nouvelle ligne de code ! Quitter si l'ordre vient d'être ouvert
geektrader
Il y a 8 ans #135665
Je propose simplement une solution pour que MT4 se comporte comme SQ. Personne n'est obligé de le faire, mais s'ils veulent que le trading en direct corresponde à SQ, c'est ce qu'il faut faire.
Oui, dans le cadre d'un backtesting avec des données en ticks, SQ ouvre et ferme l'ordre dans les 2 ticks, tout comme le fait MT4.