Hatalar, hatalar, sorular - sayfa 1126

 

Hızlandırılmış veri işlemeye öncelik veren MT4'te bir Uzman Danışman için bir Görev Tanımı yazıyorum.

Bana hesaplamanın yürütme sırasının mı yoksa seçici mi (doğru isim nedir - temsilci?) İşi hızlandırmak için önemli olup olmadığını söylemenizi rica ediyorum.

Blok diyagramı gösteren resim şeklinde iki seçenek ekliyorum.

Mümkünse, blokların seçici yürütülmesi gerçekleşirse kodun nasıl görüneceğini yazın - tamamen ilkel bir düzen ve hızda önemli bir artış sağlayacak mı!?

Dosyalar:
Logic_V_01.png  26 kb
Logic_V_02.png  30 kb
 
void OnStart()
{
        uchar max=0;
        for(int t=0;t<LONG_MAX;t++)   {max++;}    //так получаем предупреждение expression is always true, цикл работает
        for(int t=0;t<LONG_MAX+1;t++) {max++;}    //так предупреждение есть, но цикл не работает
        for(int t=0;t<ULONG_MAX;t++)  {max++;}    //так нет предупреждения и цикл не пашет
        Print("Done!");
}
 

Test cihazında bir pozisyonun bu şekilde kapanması nasıl açıklanır? Yayılma genişlemesi?

MetaTrader ticaret platformunun ekran görüntüleri

EURUSD, M20, 2014.04.12

Alfa Forex, MetaTrader 5, Gerçek

temp_file_screenshot_63279.png

EURUSD, M20, 2014.04.12, Alfa-Forex, MetaTrader 5, Gerçek


 

Yayılmada bir genişleme varsa (ve ekrana bakılırsa - 720 puan! Beş basamaklı), o zaman her şey doğrudur.

Satış pozisyonu Satış fiyatından kapatıldı. Bu, eğer ayaklar açıktaysa.

Bu arada, aracınız Alfa-Forex'in haftanın sonunda ve başında çok büyük spreadleri var.

Muhtemelen tekliflerin geçmişine girdiler ve test cihazı, bunlar üzerinde ticaret simüle etti.

Hafta sonu için duraklar bırakmak tehlikelidir - yine de sizi bir boşluktan kurtarmazlar ve yayılma genişlemesi kolayca yakalanabilir.

 
Fleder :
 for ( int t= 0 ;t< LONG_MAX + 1 ;t++) {max++;}     //так предупреждение есть, но цикл не работает

LONG_MAX + 1 < 0 olduğu için burada hata yok

 for ( int t= 0 ;t< LONG_MAX ;t++)   {max++;}     //так получаем предупреждение expression is always true, цикл работает
Burada uyarı haklıdır (t< LONG_MAX , t int ise her zaman doğrudur) sonsuz döngü
 
void OnStart()
{
  uchar max=0;
  for(int t=0;t<ULONG_MAX-1e0;t++)  {max++;}      //так цикл работает, предупреждения нет так как ULONG_MAX-1e0 имеет тип double
  for(int t=0;t<ULONG_MAX-1;t++)    {max++;}      //а так нет и предупреждения тоже нет
  Print("Done!");
}
 
Fleder :
 for ( int t= 0 ;t< ULONG_MAX - 1 ;t++)    {max++;}       //а так нет и предупреждения тоже нет
ULONG_MAX - 1 < 0 olduğundan, yani burada hata yoktur. karşılaştırma işleminde int veya long'a dönüştürülür - daha doğrusu, bit düzeyinde bir karşılaştırma vardır
 
A100 :
Hata yok çünkü ULONG_MAX - 1 < 0 çünkü karşılaştırma işleminde int'ye aktarılıyor

O zaman nasıl açıklanır:

 void OnStart ()
{
   long t= 0 ;
   bool comp=( ULONG_MAX - 1 >t);
   Print ( "comp = " ,comp);   //comp = true
   Print ( ULONG_MAX - 1 );       //18446744073709551614
   Print ( ULONG_MAX );         //18446744073709551615
}
 
A100 :
ULONG_MAX - 1 < 0 olduğundan, yani burada hata yoktur. karşılaştırma işleminde int veya long olarak yayınlayın

Döngüdeki kontrol edilen ifadedeki karşılaştırmayı mı kastediyorsunuz?

Çünkü basit bir karşılaştırmada öyle değilmiş gibi görünüyor.

 
A100 :

Sadece takas et :)

Ve bu permütasyon ne veriyor? t, ULONG_MAX -1'den daha az olduğu için aynı kaldı.

 void OnStart ()
{
   long t= 0 ;
   Print ( (t < ULONG_MAX - 1 ) == ( ULONG_MAX - 1 < t)); //false
}