MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 989

 

Merhaba. Lütfen bana hatanın nerede olduğunu gösterin.

 void OnStart ()
  {
datetime current_time= TimeCurrent ();
//datetime current_time=D'2019.10.18 19:55:00';
datetime our_time=(current_time- 60 )- MathMod ((current_time- 60 ), 60 );
datetime t1=our_time;
datetime t2=our_time+ 60 ;
PrintFormat ( "current_time=%s" , TimeToString (current_time, TIME_DATE | TIME_MINUTES | TIME_SECONDS ));
PrintFormat ( "our_time=%s" , TimeToString (our_time, TIME_DATE | TIME_MINUTES | TIME_SECONDS ));
string stock= "MSFT" ;
MqlTick tick_array[]; // массив для приема тиков
int received= CopyTicksRange (stock, tick_array, COPY_TICKS_TRADE , t1* 1000 , t2* 1000 );
Print (stock, " Всего тиков " ,received);
Print (tick_array[ 0 ].time, ": Last = " ,tick_array[ 0 ].last, "  Volume = " ,tick_array[ 0 ].volume );
ulong total=tick_array[ 0 ].volume; ulong buy=tick_array[ 0 ].volume; ulong sell= 0 ; bool flag= 'b' ;
int ticks= ArraySize (tick_array); double pprice=tick_array[ 0 ].last; int i= 1 ;
while (i<ticks)
      { 
        total=total+tick_array[i].volume; //{считаем общий объем}
         if (pprice<tick_array[i].last)  flag= 'b' ; //{если пред.тик меньше зн.'b'}
         if (pprice<=tick_array[i].last)
             if (flag= 'b' )
                buy=buy+tick_array[i].volume; //{считаем,что сделка по BID} 
         if (pprice>tick_array[i].last)  flag= 's' ; //{если пред.тик больше зн.'s'} 
         if (pprice>=tick_array[i].last)
             if (flag= 's' )
               sell=sell+tick_array[i].volume; //{считаем,что сделка по ASK}
        pprice=tick_array[i].last; //{ставим счетчик на последн. тик}
        i=i+ 1 ; 
      }               
Print (total, " " ,buy, " " ,sell);       
  }
 
werter :

Merhaba. Lütfen bana hatanın nerede olduğunu gösterin.

kodun içinde bir yerde

 
Vladimir Pastushak :

kodun içinde bir yerde

Komik.

Bu BuySellVolume. Toplam hacim, Al ve Sat toplamına eşit değil, sadece biraz daha fazladır.

 

Bir MLQ5 göstergesinde "inf" ne anlama gelebilir?

Bununla ilk kez karşılaştım, ancak belgelerde hiçbir şey bulamadım.

 
Alexandr Sokolov :

Bir MLQ5 göstergesinde "inf" ne anlama gelebilir?

Bununla ilk kez karşılaştım, ancak belgelerde hiçbir şey bulamadım.

Kötü arandı: INF araması birden çok sonuç döndürüyor.

Örneğin MathLog'a bakın

Geri dönüş değeri

Başarılı olursa değerin doğal logaritması. val negatifse, işlev NaN (tanımsız değer) döndürür. Değer 0 ise, işlev INF (sonsuz) değerini döndürür .


Bu sonuç şu anlama gelir: kod, değerleri hesaplama algoritmasında bir hata içeriyor (örneğin, değişkenleri başlatmayı unutuyoruz - bir şans umuyoruz, bölme işlemlerinde düşünmüyoruz ...).

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
Vladimir Karputov :

Kötü arandı: INF araması birden çok sonuç döndürüyor.

Örneğin MathLog'a bakın

Geri dönüş değeri

Başarılı olursa değerin doğal logaritması. val negatifse, işlev NaN (tanımsız değer) döndürür. Değer 0 ise, işlev INF (sonsuz) değerini döndürür .


Bu sonuç şu anlama gelir: kod, değerleri hesaplama algoritmasında bir hata içeriyor (örneğin, değişkenleri başlatmayı unutuyoruz - bir şans umuyoruz, bölme işlemlerinde düşünmüyoruz ...).

Arama >>> belgelerinde gördüklerimin hepsi bu (ama her birinin açıklamasını okumadım, her zaman başlığına göre buluyorum - bu bir alışkanlık)


Değişkenlerin başlatılmasına gelince (sizi yanlış anladım ya da ilk kez duydum), örneğin:

 double a = 0 , b;

...yeterli değil mi? Genellikle değişkenleri bildirir ve kullanırım

 
Alexandr Sokolov :

Arama >>> belgelerinde gördüğüm bu kadar (ama her birinin açıklamasını okumadım, her zaman başlığına göre buluyorum - bu bir alışkanlık )

***

Kötü alışkanlık .


Alexandr Sokolov :


...yeterli değil mi? Genellikle değişkenleri bildirir ve kullanırım

Ve işte "kara kuğu" - b değişkeni başlatılmamış, herhangi bir çöp içerebilir.

 
Alexandr Sokolov :

Bir MLQ5 göstergesinde "inf" ne anlama gelebilir?

Bununla ilk kez karşılaştım, ancak belgelerde hiçbir şey bulamadım.

Sorunun ne olduğunu anladım!

Tamponları EMPTY_VALUE olarak başlattıysanız

 ArrayInitialize (Bufer, EMPTY_VALUE );

... daha sonra diğer hesaplamalarda yetersiz sayıda zaman serisini kopyaladınız veya hesapladınız ve ardından arabellekteki herhangi bir değeri EMPTY_VALUE ile çarpın - inf elde edersiniz


Burada az önce uyardım ve yalnızca EMPTY_VALUE ile çarpıldığında inf elde ederiz.


 
Vladimir Karputov :

teşekkürler

 
Alexandr Sokolov :

Sorunun ne olduğunu anladım!

Tamponları EMPTY_VALUE olarak başlattıysanız

... daha sonra diğer hesaplamalarda yetersiz sayıda zaman serisini kopyaladınız veya hesapladınız ve ardından arabellekteki herhangi bir değeri EMPTY_VALUE ile çarpın - inf elde edersiniz


Burada az önce uyardım ve yalnızca EMPTY_VALUE ile çarpıldığında inf elde ederiz.


Görünüşe göre sebebini bulmuşsun. Bu, aritmetik işlemler sırasında arabelleği EMPTY_VALUE değeriyle başlatırken, önce "EMPTY_VALUE değil, şimdi bu dizindeki arabellekte tesadüfen mi?" seçeneğini işaretlemeniz gerektiği anlamına gelir.