Kütüphaneler: Control_Trade_Sessions - sayfa 2

 
Forester #:
Sadece zamana göre bir karşılaştırma yapılıyor.
Bunun yerine, isterseniz herhangi bir değeri belirleyebilirsiniz.

Oturum süreleri brokerdan alınır veya manuel olarak ayarlanabilir.

Ben iç koddan bahsediyordum, çağrıdan ve gelen parametreden değil.

datetime Sec = TimeSec(time); //Günün şu anki saniyesi
...
if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] ) && ( Sec < this.TradeTimeTo[i][DayOfWeek] ))

Burada Sec, günlük aralığa ayarlanmış, ancak from-to sınırı yok. Örneğin, saat 3 sabahı istenmişse ve seans akşam 9'dan sabah 8'e kadar işlem görüyorsa, true değeri dönmesi gerekir, ancak koşul çalışmayacak ve false değeri dönecektir.

 
Stanislav Korotky #:

Ben iç koddan bahsediyordum, çağrıdan ve gelen parametreden değil.

Burada Sec, günlük aralığa ayarlanmış, ancak from-to sınırı yok. Örneğin, saat 3 sabahı istenmişse ve seans akşam 9'dan sabah 8'e kadar işlem görüyorsa, true değerinin dönmesi gerekir, ancak koşul çalışmayacak ve false değeri dönecektir.

Bunu iki seansla ayarlayabilirsiniz:
21-24 ve 0-8

Bu teorik bir soru mu, yoksa işlem merkezinde gerçekten bu tür "from-to" aralıkları mevcut mu?

 
Forester #:

Bu, iki oturumda ayarlanabilir:
21-24 ve 0-8

Bu teorik bir soru mu, yoksa dağıtım merkezinde gerçekten bu tür “from-to” aralıkları mevcut mu?

İki seans olarak ayarlamak ne anlama geliyor? - Bunlar MT5 ayarlarından geliyor, bizim tarafımızdan ayarlanmıyor. MT5'te ise bir seans = bir kayıttır. Bazı DTC'lerde (piyasaya coğrafi uzaklık nedeniyle) böyle bir durum söz konusu olabilir. Bu durumda SymbolInfoSessionTrade, ek günleri de hesaba katarak to zamanını döndürür (en azından eskiden böyleydi — şu anda kontrol etmedim), yani from < to koşulu her zaman korunmuştur.
 
Stanislav Korotky #:
"İki oturum olarak ayarlamak" ne anlama geliyor?

Sunput'larda her gün için ayrı ayrı oturumları kendiniz ayarlama imkânı vardır. Program bu oturumlara göre çalışacaktır.
Bağlantı kurulur
#define LoadSessionFromInputs // Girişlerden oturumları okuma

Stanislav Korotky #:
Bu durumda SymbolInfoSessionTrade, ek günler de hesaba katılarak "to" saatini döndürür (en azından eskiden böyleydi – şu anda kontrol etmedim), yani "from < to " koşuluher zaman korunur.

Yani 20:00 - 32:00 mı?

Eğer test edilebilecek bir işleme örneği (DC'den) gelirse, bu örneğe göre düzenleme yapıp kontrol edilebilir.
Şu anda basit bir çözüm var: oturumu gece yarısını esas alarak kendiniz ikiye bölmek. Ayrıca hangi günde olacağını da belirtebilirsiniz — örneğin cumartesi günü saat 08:00'e kadar olan kısım cuma gününden kalan kısım, ya da pazar günü saat 20:00'dan itibaren olan kısım pazartesi gününün başlangıcı olarak kabul edilebilir.

 
Forester #:

Yani 20:00 - 32:00 mu?

Evet. Bu tür bir sunucuya sahip hazır bir veri merkezi aklıma gelmiyor. Yeni Zelanda'da bir yerlerde aramak lazım.
 
Stanislav Korotky #:
Evet. Böyle bir sunucuya sahip hazır bir veri merkezi aklıma gelmiyor. Yeni Zelanda’da bir yerlerde aramak gerekiyor.

Özel karakter düzenleyicisiyle şöyle yaptım:


 
Forester #:

Özel karakter düzenleyicisinde şu şekilde yaptım:

Ekran görüntüsündeki seçenekler için, yani 20:00-08:00 saatleri arasında, bir sonraki güne geçiş içeren oturumlar programladım.
İşlevi değiştirdim:
      for (int i = 0; i < this.TradeSessions[DayOfWeek]; i++){//Bu haftanın bu günündeki oturumları tarama
         if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] )){ //oturum başladı - sonunu bul
            if(Sec < this.TradeTimeTo[i][DayOfWeek]){//Henüz son gelmedi, unutma
               this.NextTradeStop = (datetime)(day * 86400) + this.TradeTimeTo[i][DayOfWeek]; //mevcut oturumun bitiş saati; bu saate kadar bir sonraki oturumu kontrol etmeye gerek yoktur = (bugünün başlangıcı + oturum süresi) 
               //Print("new Stop ", this.NextTradeStop);
               return true; 
            }else if (this.TradeTimeTo[i][DayOfWeek] < this.TradeTimeFrom[i][DayOfWeek]){// bitiş < başlangıç; örneğin 20:00-04:00 - bir sonraki güne geçiş + saate 1 gün eklenir
               this.NextTradeStop = (datetime)((day+1) * 86400) + this.TradeTimeTo[i][DayOfWeek]; //mevcut oturumun bitiş saati; bu saate kadar bir sonraki oturumu kontrol etmeye gerek yoktur = (bugünün başlangıcı + oturum süresi) 
               //Print("new Stop ", this.NextTradeStop);
               return true;
            }
         }
      }

Eklenen kod, bitiş saatinin oturumun başlangıç saatinden önce olup olmadığını kontrol eder ve ardından bitiş saatine 1 gün ekler.

Aşağıdaki oturumlarla test ettim:

Gün: 1 İşlem seansları: 1: 23:55-00:05
Gün: 2 İşlem seansları: 1: 00:15-00:17


Ertesi güne uzanan ilk seans:

29.06.2020 23:55:03 29.06.2020 23:55:03
29.29 Haziran 2020 23:55:09 29 Haziran 2020 23:55:09
29 Haziran 2020.29 Haziran 2020 23:56:39 29 Haziran 2020 23:56:39
29 Haziran 2020.29 Haziran 2020 23:57:01 29 Haziran 2020 23:57:01
29 Haziran 2020 23:59:59 29 Haziran 202029 Haziran 2020 23:59:59
30 Haziran 2020 00:00:00 30 Haziran 2020 00:00:00
2020.30 Haziran 2020 00:00:08 30 Haziran 2020 00:00:08
30 Haziran 2020.30 Haziran 2020 00:01:52 30 Haziran 2020 00:01:52
30 Haziran 2020 00:02:02 30 Haziran 202030 Haziran 2020 00:02:02
30 Haziran 2020 00:02:30 30 Haziran 2020 00:02:30
2020.30 Haziran 2020 00:03:25 30 Haziran 2020 00:03:25
30 Haziran 2020.30 Haziran 2020 00:03:31 30 Haziran 2020 00:03:31

İkinci oturum, her zamanki gibi tek günde:
30 Haziran 2020 00:15:29 30 Haziran 2020 00:15:29
30 Haziran 2020 00:16:01 2020.30 Haziran 2020 00:16:01
30 Haziran 2020 00:16:09 30 Haziran 2020 00:16:09

İlk oturum bir hafta sonra:
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