Bibliothèque: Contrôle_Trade_Sessions - page 2

 
Forester #:
Il s'agit simplement d'une comparaison en termes de durée.
À la place, vous pouvez en définir une autre, d'ailleurs.

La durée des sessions est récupérée auprès du courtier ou peut être définie manuellement.

Je parlais du code interne, et non de l'appel de fonction et du paramètre d'entrée.

datetime Sec = TimeSec(time); //seconde actuelle de la journée
...
if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] ) && ( Sec < this.TradeTimeTo[i][DayOfWeek] ))

Ici, Sec est exprimé en plage de 24 heures, mais il n'y a pas de limite « from-to ». Par exemple, si l'heure demandée est 3 heures du matin et que la session s'étend de 21 heures à 8 heures du matin, la valeur renvoyée devrait être « true », mais la condition ne s'appliquera pas et renverra « false ».

 
Stanislav Korotky #:

Je parlais du code interne, pas de l'appel ni du paramètre d'entrée.

Ici, Sec est exprimé en intervalle de 24 heures, mais il n'y a pas de limite « from-to ». Par exemple, si l'heure demandée est 3 heures du matin et que la session est ouverte de 21 heures à 8 heures du matin, la valeur renvoyée devrait être « true », mais la condition ne s'appliquera pas et renverra « false ».

On peut définir cela à l'aide de deux sessions :
21-24 et 0-8

S'agit-il d'une question théorique ou les centres de négociation disposent-ils réellement de telles plages « from-to » ?

 
Forester #:

On peut définir cela en deux sessions :
21-24 et 0-8

S'agit-il d'une question théorique ou le centre de données dispose-t-il réellement de plages « from-to » de ce type ?

Que signifie « définir en deux sessions » ? - Ces données proviennent des paramètres de MT5, elles ne sont pas définies par nous. Or, dans MT5, une session correspond à une seule entrée. Chez certains courtiers (en raison de leur éloignement géographique du marché), cela peut arriver. Dans ce cas, SymbolInfoSessionTrade renvoie l'heure « to » en tenant compte des jours supplémentaires (du moins, c'était le cas auparavant – je n'ai pas vérifié pour l'instant), c'est-à-dire que la condition « from < to » a toujours été respectée.
 
Stanislav Korotky #:
Que signifie « définir deux sessions » ?

Il est possible de définir manuellement des sessions pour chaque jour dans les sunputs. C’est sur cette base que le programme fonctionnera.
Se connecte à
#define LoadSessionFromInputs // Lecture des sessions à partir des entrées

Stanislav Korotky #:
Dans ce cas, SymbolInfoSessionTrade renvoie l'heure « to » en tenant compte des jours supplémentaires (du moins, c'était le cas auparavant – je n'ai pas vérifié pour l'instant), c'est-à-dire que la condition« from < to » était toujours respectée.

C'est-à-dire de 20 h 00 à 3 h 00 ?

S’il y a un exemple fonctionnel fourni par le centre de trading, sur lequel on pourra effectuer des tests, il sera possible d’adapter le code à cet exemple et de le vérifier.
Il existe actuellement une solution simple : diviser soi-même la session en deux en passant par minuit. Et on peut préciser de quel jour il s'agit – par exemple, le samedi jusqu'à 8 h : le reste de la session du vendredi, ou le dimanche à partir de 20 h : le début de la session du lundi.

 
Forester #:

C'est-à-dire de 20 h à 3 h ?

Oui. Je n’ai pas de centre de données prêt à l’emploi avec un serveur de ce type en vue. Il faut chercher quelque part en Nouvelle-Zélande.
 
Stanislav Korotky #:
Oui. Je n'ai pas de centre de données prêt à l'emploi avec un tel serveur en vue. Il faut chercher quelque part en Nouvelle-Zélande.

Voici comment j’ai procédé avec l’éditeur de caractères personnalisés :


 
Forester #:

Voici comment j’ai procédé dans l’éditeur de caractères personnalisés :

J'ai programmé des sessions avec une transition le lendemain pour les options indiquées sur la capture d'écran, c'est-à-dire de 20 h à 8 h.
J'ai modifié la fonction :
      for (int i = 0; i < this.TradeSessions[DayOfWeek]; i++){// Parcourir les sessions de ce jour de la semaine
         if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] )){ //la session a commencé - trouver la fin
            if(Sec < this.TradeTimeTo[i][DayOfWeek]){//Ce n'est pas encore la fin, à retenir
               this.NextTradeStop = (datetime)(day * 86400) + this.TradeTimeTo[i][DayOfWeek]; // Heure de fin de la session en cours ; avant cette heure, il n'est pas nécessaire de vérifier la session suivante = (début de la journée + heure de la session) 
               //Print("new Stop ", this.NextTradeStop);
               return true; 
            }else if (this.TradeTimeTo[i][DayOfWeek] < this.TradeTimeFrom[i][DayOfWeek]){// fin < début, par exemple 20 h 00 - 04 h 00 - passage au lendemain + 1 jour à l'heure
               this.NextTradeStop = (datetime)((day+1) * 86400) + this.TradeTimeTo[i][DayOfWeek]; // Heure de fin de la session en cours ; avant cette heure, il n'est pas nécessaire de vérifier la session suivante = (début de la journée + heure de la session) 
               //Print("new Stop ", this.NextTradeStop);
               return true;
            }
         }
      }

Le code ajouté vérifie que la fin est antérieure au début de la session, puis ajoute simplement un jour à l'heure de fin.

J'ai testé avec les sessions suivantes :

Jour : 1 Séances de trading : 1 : 23 h 55 - 00 h 05
Jour : 2 Séances de trading : 1 : 00 h 15 - 00 h 17


Première session se prolongeant jusqu'au lendemain :

29/06/2020 23:55:03 29/06/2020 23:55:03
29/06/202029/06/2020 23:55:09 29/06/2020 23:55:09
29/06/202029/06/2020 23:56:39 29/06/2020 23:56:39
29/06/202029/06/2020 23:57:01 29/06/2020 23:57:01
29/06/2020 23:59:59 29/06/202029/06/2020 23:59:59
30/06/2020 00:00:00 30/06/2020 00:00:00
30/06/202030 juin 2020 00:00:08 30 juin 2020 00:00:08
3030/06/2020 00:01:52 30/06/2020 00:01:52
30/06/2020 00:02:02 30/06/202030 juin 2020 00:02:02
30 juin 2020 00:02:30 30 juin 2020 00:02:30
2020.30 juin 2020 00 h 03 min 25 s 30 juin 2020 00 h 03 min 25 s
30 juin 202030 juin 2020 00:03:31 30 juin 2020 00:03:31

Deuxième session, comme d’habitude en une seule journée :
30 juin 2020 00:15:29 30 juin 2020 00:15:29
30 juin 2020 00:16:01 2020.30/06/2020 00:16:01
30/06/2020 00:16:09 30/06/2020 00:16:09

Première session dans une semaine :
06/07/2020 23:55:01 06/07/2020 23:55:01
06/06/07/2020 23:55:09 06/07/2020 23:55:09