Problèmes avec Time() - page 2

 

Cela ne fonctionne pas non plus ...

Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 

RaptorUK vous a déjà répondu là-haut en faisant référence à TimeDayOfWeek(). Les différences entre Day(), TimeDayOfWeek() et DayOfWeek() sont les suivantes (lisez-les attentivement)

int Day() = Renvoie le jour actuel du mois, c'est-à-dire le jour du mois de la dernière heure connue du serveur.

int DayOfWeek() = Renvoiele jour de la semaine actuel basé sur zéro (0-Dimanche,1,2,3,4,5,6) à la dernière heure connue du serveur.

int TimeDayOfWeek(datetime Time) = Renvoie le jour de la semaine basé sur zéro (0 signifie dimanche,1,2,3,4,5,6) pour la date spécifiée.


Ainsi, Day() = 1 peut être n'importe quel jour entre lundi et dimanche.

BTW, Aujourd'hui nous sommes le 31 mai, la fonction Day() retournera 31 (Date) alors que DayOfWeek() retournera 4 (Jeudi).

Demain, nous sommes le 1er juin, la fonction Day() renverra 1(Date), et la fonction DayOfWeek() renverra 5 (Vendredi).

Utilisez ceci comme script :

Alert ("TimeDay of local time ",TimeDayOfWeek(TimeLocal())," and TimeDay of server time ",TimeDayOfWeek(TimeCurrent()));
Alert ("Day () is ",Day()," and DayOfWeek is ", DayOfWeek ());
 
toCFx:

LOL !

Je commence à penser que la majorité des fonctions basées sur le "temps" dans MT4 sont sérieusement défectueuses.

Je veux dire, si je réinitialise toute ma logique de contrôle de position à quelque chose d'aussi banal que : TimeHour(TimeCurrent()) == 23 && TimeHour(TimeCurrent()) == 59, et ne pas être capable de fermer une seule transaction (l'EA ignore simplement le code !), alors je dirais que MT4 a quelques problèmes qui doivent être corrigés en ce qui concerne ces types de fonctions.

LOL, ne pensez-vous pas que si les fonctions basées sur le temps de MQL4 ont ces graves défauts, quelqu'un d'autre l'aurait probablement déjà remarqué ?

Peut-être pourriez-vous essayer de corriger votre code défectueux avant de prétendre que les fonctions sont défectueuses ?

dans votre critère de fermeture, essayez de changer :

TimeHour(TimeCurrent()) == 23 && TimeHour(TimeCurrent()) == 59

en :

if(TimeHour(TimeCurrent()) == 23 && TimeMinute(TimeCurrent()) == 59)

àCFx:

Le code ne peut pas être plus simple ! Je demande à l'EA d'ouvrir la transaction entre 00:00 et 00:05. Ce n'est pas une chose difficile à coder. Un enfant de six ans pourrait le faire. Le voici encore une fois : [b]TimeHour(TimeCurrent()) == 00 && TimeHour(TimeCurrent()) <= 05[/b].

Vous pouvez aussi essayer de corriger cela, lol

changer :

TimeHour(TimeCurrent()) == 00 && TimeHour(TimeCurrent()) <= 05

à :

if(TimeHour(TimeCurrent()) == 0 && TimeMinute(TimeCurrent()) <= 5)

 

Cher CFx,

Je m'excuse si je m'emporte. J'ai eu une mauvaise journée. Je pense que nous avons un autre forumer qui doit réinstaller son PC parce qu'il ne lit pas mes réponses correctement.

1. Si vous voulez fermer des trades entre lundi et jeudi, tous à 23:57, et le vendredi 21:57

   if (
       (DayOfWeek () >= 1 && DayOfWeek() <= 4 && TimeHour(TimeCurrent()) >= 23 && TimeMinute(TimeCurrent()) >= 57)
       || (DayOfWeek() == 5                   && TimeHour(TimeCurrent()) >= 21 && TimeMinute(TimeCurrent()) >= 57)
      )
      {
      // close it
      }

Et vous pouvez modifier le même code pour Open Trade.

Lisez ceci à propos des tests https://www.mql5.com/en/articles/1512


2. Ceci est important : vous avez mentionné des "outils". Si vous avez la gentillesse de préciser ce que vous entendez par "outils", il est possible de mentionner leur nom ici. Nous utilisons uniquement MetaEditor. Il y a beaucoup de forumers ici qui utilisent des outils en ligne et qui nous demandent de corriger leurs erreurs. Vous devez nous dire de quoi il s'agit, car vos codes peuvent contenir des erreurs - par exemple, votre logique est correcte mais vous utilisez le mauvais type de fonctions mql4.

... who uses a tool for helping me build EAs. That tool allows the use of some MQL structure, but it does not execute on explicit MQL functions. It simply takes MQL code, evaluates whether the MQL based condition is true/false, and then executes a custom function such as OpenBuy, OpenSell, CloseBuy, CloseSell, DeletePendingBuy, DeletePendingSell, etc. But, it does not run MQL code explicitly. For example, you can(not) use the Print or Comment function to get something to appear on the chart window of MT4 (just one example).


3. Il me semble que vous aimez beaucoup écrire de longues pages, il n'y a rien que je puisse faire à ce sujet, mais s'il vous plaît gardez ceci à l'esprit :

Voici mon premier message. Tout d'abord, veuillez noter(e) que je ne suis pas un développeur MQL.

afin de ne pas vous mettre dans l'embarras, surtout après avoir dit ...

Je ne suis pas un développeur MQL, mais je suis très doué pour développer des constructions logiques et je peux détecter un problème systémique quand je le sens.

Nous sommes toujours là pour vous aider, même en lisant vos longues dissertations.

Voici votre - très long - premier message.

Bonjour la communauté MQL4 !

Ceci est mon premier message. Tout d'abord, veuillez noter que je ne suis pas un développeur MQL. Je suis un Trader, qui utilise un outil pour m'aider à construire des EAs. Cet outil permet l'utilisation de certaines structures MQL, mais il n'exécute pas de fonctions MQL explicites. Il prend simplement le code MQL, évalue si la condition basée sur le MQL est vraie ou fausse, puis exécute une fonction personnalisée telle que OpenBuy, OpenSell, CloseBuy, CloseSell, DeletePendingBuy, DeletePendingSell, etc. Mais, il n'exécute pas explicitement le code MQL. Par exemple, vous pouvez utiliser la fonction Print ou Comment pour faire apparaître quelque chose sur la fenêtre du graphique de MT4 (juste un exemple).

Je connais donc un tout petit peu le langage MQL, ce qui est juste suffisant pour me permettre d'utiliser l'outil de développement d'EA que j'utilise pour créer mes EA. Jusqu'à présent, j'ai construit 10 EA à l'aide de cet outil et j'en ai abandonné 7 pour cause de non rentabilité, ce qui est environ 30 % de mieux que le ratio de prototypes réussis que j'avais l'habitude d'obtenir en construisant des systèmes de trading dans Excel. Je m'attends généralement à ce que 7-8 idées sur 10 ne soient pas aussi rentables que prévu, ce qui laisse 2 ou 3 conceptions suffisamment rentables pour commencer le processus d'optimisation. Bon, assez parlé de moi et de ma façon de travailler.

Voici mon problème et j'espère que j'ai trouvé de l'aide au bon endroit !

J'exécute ce code [b]pour fermer les transactions :[/b]

Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 && TimeHour(TimeCurrent()) >=23 && TimeMinute(TimeCurrent()) >=57 || Day() == 5 && TimeHour(TimeCurrent()) >=21 && TimeMinute(TimeCurrent()) >=57

Remarque : le problème est que toutes les transactions restent ouvertes du lundi au jeudi, jusqu'à 23:57. De même, toutes les transactions restent ouvertes le vendredi, jusqu'à 21:57.


J'exécute également ce code à travers un bloc MQL [b]pour ouvrir des transactions :[/b]

TimeHour(TimeCurrent()) == 00 && TimeMinute(TimeCurrent()) <= 05

Remarque : La seule transaction qui s'ouvre entre 00:00 et 00:05 est la toute première transaction du back-test, lorsque vous cliquez sur le bouton Tester le démarrage. Cette position s'ouvre précisément à 00:00. Cependant, aucune des autres positions ne s'ouvre entre 00:00 et 00:05, plus tard dans la semaine.

En résumé :

- Une transaction s'ouvre après avoir cliqué sur le bouton Tester le démarrage à 00:00.
- Aucune transaction n'est ensuite fermée à 23:57 (Lu-Je) ou à 21:57 (Ve).
- Aucune transaction n'est ensuite ouverte entre 00:00 et 00:05.

Toutes les heures indiquées ci-dessus sont assorties d'un flux de tick disponible suffisant. Il n'y a donc aucun vide dans les données utilisées par Tester.

Toute aide serait la bienvenue. Pourquoi ces transactions ne sont-elles pas clôturées à l'heure codée ? Pourquoi aucune transaction n'est-elle exécutée alors qu'il y a toujours un signal de transaction disponible entre 00h00 et 00h05, du lundi au vendredi ?

Merci !
cfx

 
   if( DayOfWeek()<1 || DayOfWeek()>5 || TimeMinute(TimeCurrent()) < 57 )
      return(0);
   else if( TimeHour(TimeCurrent()) >= 23  || ( DayOfWeek() == 5 && TimeHour(TimeCurrent()) >= 21) ){
     //Close
   }
 
CFx:

Je n'ai pas utilisé d'instructions Print dans ce but.

Pourquoi pas ? Ouvrez votre code dans MetaEditor, ajoutez quelques fonctions Print pour vous dire ce qui se passe....

MT4 n'a pas de débogueur, donc l'un des seuls outils à notre disposition est Print . . . un autre est Comment . . et c'est à peu près tout.

 
RaptorUK:

Pourquoi pas ? Ouvrez votre code dans MetaEditor, ajoutez quelques fonctions Print pour vous dire ce qui se passe....

MT4 n'a pas de débogueur, donc l'un des seuls outils à notre disposition est Print . . . un autre est Comment . . et c'est à peu près tout.


J'utilise aussi souvent Alert() à cette fin.
 

Les outils. Parlez-nous des outils, ne soyez pas gênés, j'ai appris de RaptorUK, dabbler, et des commentaires de SDC l'autre jour. Alors, s'il vous plaît, dites-nous.

:D

 
SDC:

J'utilise aussi souvent Alert() dans ce but.
Je ne l'utilise pas... c'est pourquoi je l'ai oublié... merci pour la correction :-)
 
onewithzachy:

LOL. C'est toi qui es irréel. Ton code...

... ne reviendra jamais vrai.

Vous êtes celui qui a besoin de développer davantage "votre" construction logique.

Et construire ceci...


Vous devriez peut-être essayer de lire l'OP. Il vous dit clairement que je ne suis pas un développeur MQL. En outre, il y a une énorme (massive) distinction entre être capable de construire logiquement un langage de programmation, et être capable de construire logiquement un système de trading constamment rentable. Malheureusement, dans ce domaine, vous trouverez de nombreux programmeurs en ligne qui n'ont pas la moindre idée de ce qu'il faut pour rechercher, concevoir, architecturer, construire, développer, intégrer et mettre en œuvre un système de trading intelligent qui fonctionne réellement dans toutes les conditions de marché (haussier, baissier et transitoire). Donc, je comprends votre incapacité à comprendre d'où je viens. J'ai construit ce système de trading intelligent et je l'ai fait avec Excel (entre autres).

Il a été rentable à plein temps pendant ces 3,27 dernières années, tout en ayant produit des résultats bien meilleurs que la moyenne au cours des 7 dernières années à temps partiel, alors qu'il était encore en cours de conception, de construction et d'optimisation - un système de trading entièrement intégré, avec aide à la décision, conçu à partir d'un cadre d'indicateurs 100% personnalisés. Il n'y a pas d'indicateurs standard vieux de plus de 50 ans dans mon système, car chaque indicateur utilisé dans le système provient d'un nouveau concept d'indicateur que j'ai créé de A à Z après des années de recherche et de tests. La seule chose qui me reste à faire, c'est d'écrire un livre à ce sujet.

Donc, en termes de conception de systèmes de trading qui fonctionnent, je suppose que vous n'avez probablement pas vu des gens comme moi sur ce forum depuis un certain temps - voire jamais. Qui connaissez-vous qui a créé une nouvelle classe de conception d'indicateurs ? Je ne parle pas de prendre un indicateur existant, de le modifier et de lui donner un nouveau nom - cela s'appelle faire progresser la génération actuelle d'indicateurs. Je parle d'un tout nouveau concept d'indicateur basé sur une théorie du marché qui n'a pas été discutée en public à grande échelle ? Ils s'appellent [b]Indicateurs de classe différentielle Delta[/b] et ils ne sont pas basés sur les théories traditionnelles du marché, comme tout ce que vous avez vu auparavant, je vous l'assure.

Mon intérêt pour le MQL est de découvrir si oui ou non les indicateurs de classe D2 ont de la valeur dans les périodes de temps inférieures, car le système prototype d'où ils proviennent n'utilise QUE des barres de données quotidiennes, hebdomadaires, mensuelles et annuelles, pour produire un seul (1) signal de transaction toutes les 24 heures, qui a été entre 91% et 99% précis par rapport à un objectif spécifié pour les 3,27 dernières années. Cela représente environ 850+ signaux de transaction d'une précision comprise entre 91 et 99%, dans une fourchette de 17 à 67 pips par 24 heures (médiane centrale).

Le prototype actuel n'est PAS automatisé et il est beaucoup trop complexe pour être géré par MQL. La programmation orientée objet (POO) serait l'environnement optimal pour cela, mais j'ai été trop occupé par d'autres choses qui me sont offertes pour m'asseoir assez longtemps pour apprendre le C ou le C++.

Ce test, est un POC pour savoir si oui ou non une poignée de mes indicateurs peuvent fonctionner en dessous de la barre de temps quotidienne. Si je peux trouver une justification technique à l'automatisation de cadres temporels inférieurs en utilisant mes conceptions, alors je peux justifier le temps que je devrais passer à apprendre la programmation opérationnelle et à transformer le prototype en une application de trading Windows autonome et propriétaire (à ne vendre en aucun cas).

Les traders font du commerce. Les programmeurs, programment. Je ne suis PAS un programmeur............ encore.

 
onewithzachy:

Cela ne fonctionne pas non plus ...

RaptorUK vous a déjà répondu là-haut en faisant référence à TimeDayOfWeek(). La différence entre Day(), TimeDayOfWeek() et DayOfWeek() sont (lisez-les attentivement)

int Day() = Renvoie le jour actuel du mois, c'est-à-dire le jour du mois de la dernière heure connue du serveur.

int DayOfWeek() = Renvoiele jour de la semaine actuel basé sur zéro (0-Sunday,1,2,3,4,5,6) à la dernière heure connue du serveur.

int TimeDayOfWeek(datetime Time) = Renvoie le jour de la semaine basé sur zéro (0 signifie dimanche,1,2,3,4,5,6) pour la date spécifiée.


Ainsi, Day() = 1 peut être n'importe quel jour entre lundi et dimanche.

BTW, Aujourd'hui nous sommes le 31 mai, la fonction Day() retournera 31 (Date) alors que DayOfWeek() retournera 4 (Jeudi).

Demain, nous sommes le 1er juin, la fonction Day() renverra 1(Date), et la fonction DayOfWeek() renverra 5 (Vendredi).

Utilisez ceci comme script :


J'ai utilisé DayOfWeek(), comme indiqué dans l'un de mes messages, et cela n'a toujours pas fonctionné correctement.

Raison: