Zaman ile ilgili sorunlar() - sayfa 7

 
onewithzachy :

Aletler. Bize araçlardan bahsedin, utanmayın, geçen gün RaptorUK, dabbler ve SDC'nin yorumlarından öğrendim. Yani, lütfen bize söyle.

:D

Sorunuzun cevabı Molanis gibi görünüyor. . . http://www.molanis.com/forum/viewtopic.php?f=2&t=1450
 
RaptorUK :
Sorunuzun cevabı Molanis gibi görünüyor. . . http://www.molanis.com/forum/viewtopic.php?f=2&t=1450

İlginç, olduğu gibi

https://www.mql5.com/en/forum/126224

Ne hakkında konuştuğumuzun arka planını bilmek yardımcı olur!


Bu konudan kaçınıyorum çünkü her tarafta çok fazla kızgınlık var. Sadece çok gereksiz görünüyor.


Belki de OP yeni bir konu başlatmalı, böylece yanıt verenlerin neler olduğunu anlamak için 200 gönderiyi %100 doğrulukla okumasına gerek kalmaz.

Ve belki de herkes insanlara isim takmayı bırakabilir.

 

RaptorUK :

Day(), DayOfWeek() , TimeDay() ve TimeDayOfWeek() hepsi Straegy Tester'da (build 427) doğru çalışıyor gibi görünüyor. . . Kodunuzda gerçekten Day() kullanmak mı istediniz yoksa kod oluşturma şeyiniz mi olmalı? . senin için kodlamak için kullandığın her neyse, DayOfWeek() kullanmalı mıydı? birincisi Day() 0 - 31 arasında bir değer verir, ikincisi DayOfWeek() 0 - 6 arasında bir değer verir Sunday 0

Ah ! Bu kodu gözden geçirdim ve bu sorunu görmedim ve bu tam işlevleri kendi kodumda kullandım. İyi tespit :-)
 
dabbler :

İlginç, olduğu gibi

https://www.mql5.com/en/forum/126224

Ne hakkında konuştuğumuzun arka planını bilmek yardımcı olur!


Bu konudan kaçınıyorum çünkü her tarafta çok fazla kızgınlık var. Sadece çok gereksiz görünüyor.

Bu . . . Yine de bazı insanlara yardım edilmiyor, kafalarında kodlarının iyi ve MT4'ün çöp olduğu konusunda bir saplantı var. . . OP'ye yardım etmeye çalıştım, açıkça Day() ve DayOfWeek()'i karıştırıyor ve ilk gönderisinden bunun kabul etmeyeceği açık olmasına rağmen. . . bazı insanlara yardım edilemez.
 
dabbler :
Ah ! Bu kodu gözden geçirdim ve bu sorunu görmedim ve bu tam işlevleri kendi kodumda kullandım. İyi tespit :-)
onewithzachy : onu da fark ettim . . . ama bu konudaki tüm aktivite ile onun gönderisini kaçırdım.
 

Hepimizin fark etmediği başka bir şey, ben de fark ettim ama bu çılgın iş parçacığının ortasında, kimsenin bundan bahsetmediğini fark etmedim, OP şunu gönderdi:

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

Bunların hepsini bir araya getiremezsiniz || || || || || && && || && &&, onu parçalamak için bazı parantezler kullanmadan bir koşul olarak.

Son kısmına baktığımızda:

|| Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57
Durumun geri kalanından ayırmak için bazı parantezler kullanmadıkça, önceki bölümler yanlış olduğunda koşulun doğru olmasına neden olacağına inanmıyorum.
 
SDC :

Hepimizin fark etmediği başka bir şey, ben de fark ettim ama bu çılgın iş parçacığının ortasında kimsenin bahsetmediğini fark etmedim, OP şunu gönderdi:

Bunların hepsini bir araya getiremezsiniz || || || || || && && || && &&, onu parçalamak için bazı parantezler kullanmadan bir koşul olarak.

İlginç bir şekilde bunu kontrol ettim ve sorun yok gibiydi. MQL4 ve C (ve diğer tüm bilgisayar dilleri), mantıksal bir ifadenin tam bir yorumunu veren bir dizi öncelik kuralına sahiptir. Ancak kullanılan araç, bu tür "karmaşık ifadelerin" belirsiz olduğunu söyledi! (Bunun için doğru bir şekilde uygulanmadığını okumamız gerekir). WHR, ifadelerin parantez içine alınması gerektiğini daha önce yayınlamıştı. Bu açıkça iyi bir uygulamadır, çünkü hangi öncelik kuralının hangi ifadeyi izlediğini bulmak için kitabı kırmak zorunda kalmak, kodun okunamaz olduğu anlamına gelir.
 

Tamam, bunu şimdi kontrol etmem gerekiyordu çünkü asla böyle bir kod yazmadım ve düşündüğüm gibi çalışmasını sağladım, işte test etmek için basit bir komut dosyası.

Okumayı/test etmeyi/hata ayıklamayı kolaylaştırmak için her karşılaştırmayı orijinal durumda karşılık gelen tamsayı karşılaştırmalarıyla değiştirdim. Son ||'dan sonraki kısım dışında hepsi yanlış Şebeke.

 int start()
  {
//----
   int a,b,c,d,e; 
   a= 1 ;
   b= 2 ;
   c= 3 ;
   d= 4 ;
   e= 1 ;
//----
   if ( a==b || b==c || c==d || d==e && a>=b && c>=d || a==e && b>=a && c>=a )
   Alert ( "condition true" );
   else
   Alert ( "condition false" );
//----
   return ( 0 );
  }

Bu bana şunu söyleyen koşul false verir:

|| Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57

OP koduna yerleştirildiği için, Day() yerine DayOfWeek() ile değiştirilse bile koşulu asla gerçek yapmazdı, ancak oraya parantez koyarsak ....

 int start()
  {
//----
   int a,b,c,d,e; 
   a= 1 ;
   b= 2 ;
   c= 3 ;
   d= 4 ;
   e= 1 ;
//----
   if ( (a==b || b==c || c==d || d==e && a>=b && c>=d) || (a==e && b>=a && c>=a) )
   Alert ( "condition true" );
   else
   Alert ( "condition false" );
//----
   return ( 0 );
  }
Şimdi çalışıyor ve koşul gerçek oluyor.
 
SDC :

Tamam, bunu şimdi kontrol etmem gerekiyordu çünkü asla böyle bir kod yazmadım ve düşündüğüm gibi çalışmasını sağladım, işte test etmek için basit bir komut dosyası.

İyi iş. Ayrıca MQL4 öncelik kurallarının ...

https://docs.mql4.com/basis/operations/rules

mantıksal VEYA mantıksal VE'den daha yüksek, K & R (2. baskı) ile çelişiyor

Ama senin gibi, bunları asla büyük ölçüde kullanmam, sadece kendi kodumu anlayabilmem için bazı şeylerin etrafına parantez koyarım veya ayrı satırlar kullanırım!

 
SDC :
Şimdi çalışıyor ve koşul gerçek oluyor.

Ve işte benim katkım (test senaryosu) ...

 int start(){
   string str = "LOGIC" ;
   for ( int N= 0 ; N< 2 ; N++ ){
       bool bN= (N== 1 );
       string strN= "false AND " ;
       if ( bN )
         strN = "true AND " ;
      
       for ( int M= 0 ; M< 2 ; M++ ){
         bool bM= (M== 1 );
         string strM= "false OR " ;
         if ( bM )
            strM = "true OR " ;

         for ( int P= 0 ; P< 2 ; P++ ){
             bool bP = (P== 1 );
             string strP= "false = " ;
             if ( bP )
               strP = "true = " ;
            
            str = str + "\n" + strN + strM + strP;
             if ( bN && bM || bP )
               str = str + "true" ;
             else
               str = str + "false" ;
         }
      }
   }
   
   Comment ( str );

   return ( 0 );
}

Bunu hangi...


Açıkça önce mantıksal VEYA testlerinin yapıldığını (daha yüksek öncelikli) ve ardından mantıksal AND testlerinin yapıldığını açıkça gösteriyor ... tıpkı MQL4 belgelerinde yazdığı gibi aslında :-)