Aidez un débutant - Fonctions jour et heure

 

Bonjour,

Je suis un nouveau venu ici et j'ai donc besoin d'aide.

J'ai un EA qui négocie lorsque le marché ouvre le dimanche. Le problème de l'EA est qu'il prend aussi des positions pendant la semaine et je ne veux pas cela.

Je veux qu'il fonctionne comme ceci :

extern int StartDay="sunday"

extern int StartTime="23:00"

extern int StopDay="monday"

extern int StopTime="15:00"

Si day="sunday" et que le marché est ouvert (un seul trade peut être ouvert entre sunday 23:00 et monday 15:00, pas de nouveaux trades si notre trade est fermé à cause du TP ou SL)

{

Démarrer la transaction (un code que j'ai déjà)

}

Comment puis-je faire cela en MQL ?

 

vérifier Time[0]

avec ces fonctions dans l'aide Fonctions Date & Heure

 
// SEE IF THIS WORK FOR YOU..... (I'VE NOT TESTED IT....)



int start()
{
  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())>=0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())<=1) && (Hour()<=15); 
  if( sunday_cond  || monday_cond )
      go_trading();

}
 
abstract_mind:
  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())>=0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())<=1) && (Hour()<=15); 
  if( sunday_cond  || monday_cond )

Je ne suis pas sûr que ce soit correct. Le "sunday_cond" est vrai tous les jours de la semaine entre 23 heures et minuit. Par conséquent, parce que le code fait soit sunday_cond soit monday_cond, il va potentiellement trader après 23h tous les jours. En outre, "monday_cond" est rencontré le dimanche jusqu'à 15 heures. C'est peu probable, mais dans certains fuseaux horaires, cela pourrait également tomber dans les heures de négociation. Plus important encore, Hour() <= 15 est vrai jusqu'à 3:59pm, et non jusqu'à 3:00pm.


Mais le principe est évidemment valable pour ce que EagleEye doit faire : vérifier l'heure, et aussi le jour de la semaine en utilisant DayOfWeek() ou TimeDayOfWeek().

 
jjc:

Je ne suis pas sûr que ce soit correct. Le "sunday_cond" est vrai tous les jours de la semaine entre 23h et minuit. Par conséquent, parce que le code fait soit sunday_cond soit monday_cond, il va potentiellement trader après 23h tous les jours. De plus, "monday_cond" est rencontré le dimanche jusqu'à 15h. C'est peu probable, mais dans certains fuseaux horaires, cela pourrait également tomber dans les heures de négociation. Plus important encore, Hour() <= 15 est vrai jusqu'à 3:59pm, et non jusqu'à 3:00pm.


Mais le principe est évidemment valable pour ce que EagleEye doit faire : vérifier l'heure, et aussi le jour de la semaine en utilisant DayOfWeek() ou TimeDayOfWeek().



Vous avez raison. Cela devrait fonctionner :

  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())==0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())==1) && (Hour()<=15);
  if( sunday_cond  || monday_cond )
go_trading();
 

Merci à tous,


Je vais essayer et je vous dirai si ça marche.

 

only one trade can be open between sunday 23:00 and monday 15:00

Le code ci-dessus doit être utilisé du dimanche 23:00 au lundi 15:59 (Hour()<=15), et non 15:00 (Hour()<15).

Vous devrez également prévoir un code permettant de n'ouvrir qu'une seule transaction pendant la période autorisée.

 
De quel type doivent être les paramètres du dimanche et du lundi ? int ?
 

Je ne suis pas sûr de comprendre ce que vous voulez dire avec cette partie WHRoeder : Lundi 15:59 (Hour()<=15), et non 15:00 (Hour()<15) ??

Oui, vous avez raison, j'ai aussi besoin de ce code. J'espère que quelqu'un pourra me le fournir.

 
EagleEye:

Oui, vous avez raison, j'ai aussi besoin de ce code. J'espère que quelqu'un pourra me le fournir.

Il s'agit d'un problème légèrement inhabituel, car vous ne souhaitez pas ouvrir une nouvelle position si vous en avez déjà ouvert une pendant la fenêtre de négociation actuelle, même si cette position est maintenant fermée. La plupart des discussions sur ce forum visent uniquement à vérifier qu'il n'y a pas de transaction en cours (et c'est un sujet qui revient souvent).


En fait, vous avez trois possibilités pour vérifier si une transaction est fermée :


  1. Lorsque vous ouvrez une nouvelle position, enregistrez l'heure actuelle dans une variable. Lorsque vous envisagez de placer une nouvelle transaction, vérifiez que l'heure stockée de la dernière transaction n'est pas comprise dans la fenêtre de négociation actuelle.
  2. Comme ci-dessus, mais stockez l'heure de la dernière transaction dans les variables globales de MT4.
  3. Parcourez la liste des transactions MT4, à la recherche des transactions fermées qui ont été ouvertes pendant la fenêtre de négociation en cours.


Ces options sont grossièrement classées par ordre de complexité (et aussi par ordre inverse de performance, c'est-à-dire que l'option 3 est de loin la plus lente, bien qu'il soit très peu probable qu'une différence de vitesse entre elles pose des problèmes dans la vie réelle).


Toutefois, les options sont également classées par ordre de résilience :


  1. Si l'heure de la dernière transaction est stockée dans une variable (en mémoire), la valeur est perdue si MT4 est redémarré ou si votre EA doit être rechargé pour toute autre raison. En d'autres termes, si l'EA est rechargé, il pourra potentiellement effectuer plusieurs transactions au cours de la même fenêtre de trading.
  2. Si l'heure est stockée dans une variable globale MT4, son enregistrement devrait survivre aux rechargements de l'EA. Toutefois, si la transaction doit être déplacée rapidement sur un nouvel ordinateur, l'enregistrement de la dernière transaction sera perdu (à moins qu'une sauvegarde du fichier gvariables.dat de MT4 ne soit disponible).
  3. L'analyse de la liste des transactions de MT4 est la seule option qui offre une bonne résilience en termes de reprise après sinistre : vous pouvez vous connecter au compte du courtier à partir d'une copie de MT4 sur un autre ordinateur, lancer l'EA et avoir la garantie qu'il ne prendra pas de transactions supplémentaires incorrectes.


 

// Approche_1

  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())==0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())==1) && (Hour()<=15);
  if( sunday_cond  || monday_cond )
if(OrdersTotal()==0)
go_trading();



// Approche_2

  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())==0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())==1) && (Hour()<=15);
  if( sunday_cond  || monday_cond )
{
if(number_of_longs()==0) // Count the longs from both "trade context" and history for the period in qestion. There is code for counting open longs/shorts in the forum
go_trading_longs();
if(number_of_shorts()==0)
go_trading_shorts();

}
Raison: