[Bug + Fix] La sortie le vendredi n'est pas calculée correctement
18 réponses
geektrader
Il y a 8 ans #114118
J'ai regardé mon VPS ce soir et j'ai remarqué qu'il n'y avait plus de transactions en cours (toutes mes stratégies utilisent uniquement des ordres en attente). En regardant dans le journal, j'ai vu qu'il a toujours ajouté/ajusté les nouveaux ordres stop toutes les 30 minutes comme il est censé le faire, mais qu'il les a supprimés directement après chaque fois.
Après un long débogage du code MQL4 via "Print", on en est arrivé à la fonctionnalité Exit on Friday qui pensait toujours que c'était déjà la fin du vendredi et qu'elle devait supprimer tous les ordres en attente / clôturer toutes les transactions activées. La fonction compare les éléments suivants pour déterminer si c'est le bon moment pour sortir :
....else if(dow == 5 && TimeCurrent() >= StrToTime(ExitTimeOnFriday)) {
closeActiveOrders() ;
closePendingOrders() ;
}
Après avoir imprimé "TimeCurrent()" et StrToTime(ExitTimeOnFriday)) via la commande "Print", le résultat était que "TimeCurrent()" était en effet plus grand que "ExitTimeOnFriday", bien que mon "ExitTimeOnFriday" soit 23:57, et que le serveur de trading MT4 que j'utilise (Global Prime Forex) était actuellement à vendredi 01:34 à cette heure. Pourquoi cela s'est-il produit ? C'est simple, vous ne pouvez pas transmettre "ExitTimeOnFriday" ("23:57") à la fonction "StrToTime" comme ça, parce que la fonction "StrToTime" utilise le jour actuel de l'ORDINATEUR LOCAL pour ajouter un jour à 23:57, alors que la fonction "TimeCurrent()" utilise toujours le jour actuel du serveur MT4 - et mon ordinateur local a une heure complètement différente de celle du serveur de trading MT4 puisqu'il se trouve dans un autre fuseau horaire. Ainsi, dans son état d'origine, la vérification de la sortie le vendredi compare des pommes et des oranges.
Pour les programmeurs de la SQ, la solution est la suivante :
....else if(dow == 5 && TimeCurrent() >= StrToTime(DoubleToStr(TimeYear(TimeCurrent()), 0) + "." + DoubleToStr(TimeMonth(TimeCurrent()), 0) + "." + DoubleToStr(TimeDay(TimeCurrent()), 0) + " " + ExitTimeOnFriday)) {
…..
Ceci utilisera toujours le jour actuel du serveur MT4 (le même jour que "TimeCurrent()" retourne) pour calculer l'heure de sortie du vendredi au lieu du jour de l'ordinateur local. De cette façon, l'heure de sortie du vendredi est toujours précise et vous pouvez régler l'horloge de votre ordinateur local comme vous le souhaitez :)
Et oui, je suis toujours disponible à l'embauche pour trouver et corriger d'autres bugs ;)
Fluke
Il y a 8 ans #133103
Mark, avec cette nouvelle correction tu as corrompu tout le code source de mql4 !!! Le back test sur metatrader va en dehors de la mémoire !!! s'il vous plait, réparez le rapidement.
Matusiak Adrian
Il y a 8 ans #133294
BTW,
Ce problème a-t-il déjà été résolu ?
La dernière mise à jour détruisait le code mql mais la prochaine mise à jour corrige-t-elle le fichier corrompu + sortie vendredi ?
Mark Fric
Il y a 8 ans #133295
Oui, je l'ai écrit dans un autre fil de discussion. Le problème a été résolu avec la dernière mise à jour automatique.
J'ajoute également la mise à jour automatique ici au cas où vous ne l'auriez pas confirmée. Il suffit d'extraire l'archive ZIP dans le dossier principal de l'EA Wizard.
Marque
StratégieArchitecte de Quantités