Hatalar, hatalar, sorular - sayfa 100

 
Urain :

OnTester() işlevinin zorunlu bir sonlandırması var mı?

veya işlem geçmişinin neden özel işlevden önce var olduğu ve sonra sıfır döndürdüğü:

 double OnTester()
  {
   int HTD=- 1 ;
   Custom_func();
   if ( HistorySelect ( 0 , TimeCurrent ()))HTD= HistoryDealsTotal ();   
   return (HTD);
  }

test cihazında hangi işlevler çalışmıyor?

test cihazından (optimizasyon sırasında) bir şeylerin yanlış olduğuna dair bir sinyal nasıl gönderilir (uyarı çıktıları çalışmıyor) ??

Görünüşe göre bu gece herkes uyuyor.
 
Urain :
Görünüşe göre bu gece herkes uyuyor.

Temsilci günlüklerine baktınız mı, belki her şey oradadır?

Bildiğim kadarıyla, baskılar yalnızca optimizasyon sırasında test cihazının ana günlüğünde görüntülenmiyor (normal modda her şey yolunda).

Anladığım kadarıyla OnTester'dan () çıkmaya zorlamak mümkün değil. Ve sonuçta, neden belirli bir test sonucu orada basitçe hesaplanır (ve aslında sadece optimizasyon için kullanılır)?

OnTester :
OnTester () işlevi, belirli bir tarih aralığında bir Expert Advisor'ın geçmiş testinin tamamlanmasının ardından otomatik olarak oluşturulan Tester olayı için bir olay işleyicisidir. İşlev double türüyle tanımlanmalıdır, parametresi yoktur:

çift   OnTester ();

İşlev, OnDeinit() işlevine yapılan çağrıdan hemen önce çağrılır ve çift dönüş tipine sahiptir. OnTester() işlevi, yalnızca Test sırasında Uzman Danışmanlarda kullanılabilir ve öncelikle giriş parametrelerinin genetik optimizasyonu için Özel maksimum ölçüt olarak kullanılan belirli bir değeri hesaplamaya yöneliktir.


not

> veya neden özel işlevden önceki işlemlerin geçmişi var ve bundan sonra sıfır döndürüyor...

Burada muhtemelen geliştiriciler için.

Anladığım kadarıyla, OnTester anlaşma sayısını (varsa) döndürmeli ve kullanıcı işlevi Custom_func()?

 
Urain :

Geliştiricilere özel...

Beyler, daha önce prensipte mümkün olmayan fırsatlar verirseniz en azından uyarmalısınız.

Böyle bir hatayı yakalamak için bir gün hendeğe

Sadece bana bunun gerekli olduğunu öğretmene gerek yok, elbette, tüm bunları biliyorum, ama gerçekten bir günü öldürdüm çünkü buna alışkınım.

derleyici bir hata vermelidir.

Peki, sonunda nasıl doğru? Yani "==" ya da öylesine "="?
 
Urain :

OnTester() işlevinin zorunlu bir sonlandırması var mı?

veya işlem geçmişinin neden özel işlevden önce var olduğu ve sonra sıfır döndürdüğü:

test cihazında hangi işlevler çalışmıyor?

test cihazından (optimizasyon sırasında) bir şeylerin yanlış olduğuna dair bir sinyal nasıl gönderilir (uyarı çıktıları çalışmıyor) ??

Mesaj için teşekkürler. Başvurunuz alındı - inceliyoruz.

 

Yeni bir pozisyon açmak için izin verilen maksimum lot marjı nasıl hesaplanır? MQL4'te şöyle yapıldı:

MaxLot=AccountFreeMargin()/MarketInfo( Symbol (),MODE_MARGINREQUIRED);
 
EvgeTrofi :

Yeni bir pozisyon açmak için izin verilen maksimum lot marjı nasıl hesaplanır? MQL4'te şöyle yapıldı:

Aşağı yukarı şöyle:

 double CalculateMaxVolume( string symbol)
  {
   double price= 0.0 ;
   double margin= 0.0 ;
//--- select lot size
   if (! SymbolInfoDouble (symbol, SYMBOL_ASK ,price))                 return ( 0.0 );
   if (!OrderCalcMargin( ORDER_TYPE_BUY ,symbol, 1.0 ,price,margin)) return ( 0.0 );
   if (margin<= 0.0 )                                            return ( 0.0 );

   double lot= NormalizeDouble ( AccountInfoDouble ( ACCOUNT_FREEMARGIN )/margin, 2 );
//--- normalize and check limits
   double stepvol= SymbolInfoDouble (symbol, SYMBOL_VOLUME_STEP );
   lot=stepvol* NormalizeDouble (lot/stepvol, 0 );

   double minvol= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MIN );
   if (lot<minvol) lot=minvol;

   double maxvol= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MAX );
   if (lot>maxvol) lot=maxvol;
//--- return trading volume
   return (lot);
  }
Bu kod yalnızca maksimum hacmi hesaplamakla kalmaz, aynı zamanda tam olarak sembol ayarlarının sınırlarına da uyar.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
Renat :

Aşağı yukarı şöyle:

Bu kod yalnızca maksimum hacmi hesaplamakla kalmaz, aynı zamanda tam olarak sembol ayarlarının sınırlarına da uyar.
Teşekkür ederim! Yardımda OrderCalcMargin() işlevi yok :)
 
EvgeTrofi :
Teşekkür ederim! Yardımda OrderCalcMargin() işlevi yok :)
Bu özellik uzun süredir eklenmiştir - lütfen belgelere bakın.
 
EvgeTrofi :
Peki, sonunda nasıl doğru? Yani "==" ya da öylesine "="?

Ve falan.

if(a==0){ifade}, a'nın 0'a eşit olması durumunda doğru olduğu anlamına gelir, o zaman {ifade} çalıştırırız.

if(a=0){expression}, if(a){a=0;expression} ile eşdeğerdir, bu nedenle a true ise { a atama 0, ifade}.

 
Interesting :

Temsilci günlüklerine baktınız mı, belki her şey oradadır?

Bildiğim kadarıyla, baskılar yalnızca optimizasyon sırasında test cihazının ana günlüğünde görüntülenmiyor (normal modda her şey yolunda).

Anladığım kadarıyla OnTester'dan () çıkmaya zorlamak mümkün değil. Ve sonuçta, neden belirli bir test sonucu orada basitçe hesaplanır (ve aslında sadece optimizasyon için kullanılır)?

not

> veya neden özel işlevden önceki işlemlerin geçmişi var ve bundan sonra sıfır döndürüyor...

Burada muhtemelen geliştiriciler için.

Anladığım kadarıyla, OnTester anlaşma sayısını (varsa) döndürmeli ve kullanıcı işlevi Custom_func()?

Sorun, optimizasyon sırasında programın diğer durumlarda olduğu gibi çalışmamasıdır (bu yüzden OnTester altından haber göndermeniz gerekir).

Bu amaçlar için, bir analog yazdırdım (parametre olarak işleve iletilen bir dizeyi yazdırmak için dosya oluşturan bir işlev).

 int prints= 0 ;// счётчик вызовов, должен быть обьявлен глобально
//+------------------------------------------------------------------+
//| вывод информации из под тестера                                  |
//+------------------------------------------------------------------+
void WriteFilePrint( string text, string folder= "Print" )
  {
   string subfolder= "Print" ;
   int han= FileOpen (subfolder+ "\\" +folder+( string )prints+ ".csv" , FILE_WRITE | FILE_CSV , ";" );
   if (han!= INVALID_HANDLE )
     {
       FileWrite (han,text);
       FileClose (han);
     }
   else Print ( "File open failed" +subfolder+ "\\" +folder+ ".txt, error" , GetLastError ());
   prints++;
  }

Böylece, OnTester'daki bazı işlevlerin yanlış yürütülmesini yakaladığı ortaya çıktı.

Neden: