Librerie: Controllo_Trade_Sessioni - pagina 2

 
Forester #:
Si tratta semplicemente di un confronto in termini di tempo.
Al posto di questo, potete impostare qualsiasi valore, tra l’altro.

La durata delle sessioni viene prelevata dal broker oppure può essere impostata manualmente.

Mi riferivo al codice interno, non alla chiamata e al parametro in ingresso.

datetime Sec = TimeSec(time); //secondo corrente del giorno
...
if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] ) && ( Sec < this.TradeTimeTo[i][DayOfWeek] ))

Qui Sec è espresso in un intervallo di 24 ore, mentre non c’è un limite from-to. Ad esempio, se viene richiesto l’orario delle 3 del mattino e la sessione è aperta dalle 21 di sera alle 8 del mattino, dovrebbe essere restituito true, ma la condizione non si verificherà e verrà restituito false.

 
Stanislav Korotky #:

Mi riferivo al codice interno, non alla chiamata e al parametro in ingresso.

Qui Sec è espresso in un intervallo di 24 ore, mentre non è presente l'intervallo from-to. Ad esempio, se viene richiesta l'ora delle 3 del mattino e la sessione è aperta dalle 21 di sera alle 8 del mattino, dovrebbe essere restituito true, ma la condizione non si verifica e verrà restituito false.

È possibile impostarlo con due sessioni:
21-24 e 0-8

È una domanda teorica o i centri di trading dispongono effettivamente di intervalli "from-to" simili?

 
Forester #:

È possibile impostarlo in due sessioni:
21-24 e 0-8

È una domanda teorica o il centro dati dispone effettivamente di intervalli «from-to» simili?

Cosa significa impostare due sessioni? - Dopotutto, queste vengono recuperate dalle impostazioni di MT5 e non vengono impostate da noi. E in MT5 una sessione = una voce. In alcuni broker (a causa della distanza geografica dal mercato) ciò potrebbe verificarsi. In questo caso SymbolInfoSessionTrade restituisce l’ora “to” tenendo conto dei giorni aggiuntivi (almeno così era in passato – non ho verificato proprio ora), ovvero la condizione “from < to” è sempre stata rispettata.
 
Stanislav Korotky #:
Cosa significa impostare due sessioni?

È possibile impostare le sessioni autonomamente per ogni giorno nei sunput. Il programma funzionerà in base a queste.
Si collega
#define LoadSessionFromInputs // Lettura delle sessioni dagli input

Stanislav Korotky #:
In questo caso SymbolInfoSessionTrade restituisce l’ora «to» tenendo conto dei giorni aggiuntivi (almeno così era prima – non ho verificato proprio ora), ovvero la condizione«from < to» è sempre stata soddisfatta.

Cioè dalle 20:00 alle 32:00?

Se ci fosse un esempio funzionante fornito dal centro di trading su cui poterlo testare, sarebbe possibile adattare il codice a tale esempio e verificarlo.
Al momento esiste una soluzione semplice: suddividere autonomamente la sessione in due parti dopo la mezzanotte. È possibile specificare in quale giorno: ad esempio, il sabato fino alle 8:00 (il residuo del venerdì) o la domenica dalle 20:00 (l’inizio del lunedì).

 
Forester #:

Cioè dalle 20:00 alle 32:00?

Sì. Non ho in mente nessun centro dati già pronto con un server del genere. Bisogna cercarlo da qualche parte in Nuova Zelanda.
 
Stanislav Korotky #:
Sì. Non ho in mente nessun DC già pronto con un server del genere. Bisogna cercarne uno da qualche parte in Nuova Zelanda.

Ho proceduto come segue con l’editor dei simboli personalizzati:


 
Forester #:

Ho configurato l'editor dei simboli personalizzati in questo modo:

Ho programmato le sessioni con il passaggio al giorno successivo per le opzioni indicate nello screenshot, ovvero dalle 20:00 alle 08:00.
Ho modificato la funzione:
      for (int i = 0; i < this.TradeSessions[DayOfWeek]; i++){//scorrimento delle sessioni di questo giorno della settimana
         if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] )){ //la sessione è iniziata - trovare la fine
            if(Sec < this.TradeTimeTo[i][DayOfWeek]){//non è ancora finita, da ricordare
               this.NextTradeStop = (datetime)(day * 86400) + this.TradeTimeTo[i][DayOfWeek]; //ora di fine della sessione corrente; fino a quel momento non è necessario verificare la sessione successiva = (inizio della giornata + ora della sessione) 
               //Print("new Stop ", this.NextTradeStop);
               return true; 
            }else if (this.TradeTimeTo[i][DayOfWeek] < this.TradeTimeFrom[i][DayOfWeek]){// fine < inizio, ad esempio 20:00-04:00 - passaggio al giorno successivo + 1 giorno all'ora
               this.NextTradeStop = (datetime)((day+1) * 86400) + this.TradeTimeTo[i][DayOfWeek]; //ora di fine della sessione corrente; fino a quel momento non è necessario verificare la sessione successiva = (inizio della giornata + ora della sessione) 
               //Print("new Stop ", this.NextTradeStop);
               return true;
            }
         }
      }

Il codice aggiunto verifica che la fine sia < l’inizio della sessione e quindi aggiunge semplicemente 1 giorno all’ora di fine.

Ho verificato con le seguenti sessioni :

Giorno: 1 Sessioni di trading: 1: 23:55-00:05
Giorno: 2 Sessioni di trading: 1: 00:15-00:17


Prima sessione con proseguimento il giorno successivo:

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
2020.29/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/06/2020 00:00:08 30/06/2020 00:00:08
30/06/202030/06/2020 00:01:52 30/06/2020 00:01:52
30/06/2020 00:02:02 30/06/202030/06/2020 00:02:02
30/06/2020 00:02:30 30/06/2020 00:02:30
30/06/202030/06/2020 00:03:25 30/06/2020 00:03:25
30/06/202030/06/2020 00:03:31 30/06/2020 00:03:31

Seconda sessione, come di consueto in un solo giorno:
30/06/2020 00:15:29 30/06/2020 00:15:29
30/06/2020 00:16:01 2020.30/06/2020 00:16:01
30/06/2020 00:16:09 30/06/2020 00:16:09

La prima sessione tra una settimana:
6 luglio 2020 23:55:01 6 luglio 2020 23:55:01
6 luglio 202006/07/2020 23:55:09 06/07/2020 23:55:09