MetaTrader 5 Strateji Test Cihazı: Hatalar, Hatalar, İyileştirme Önerileri - sayfa 46

 
traveller00 :
2280 oluşturun, ancak önceki sürümlerdeydi. Hata ayıklama için bir komut dosyası veya bir Uzman Danışman çalıştırırsanız, 1H zaman diliminde Piyasa İzleme'deki ilk sembolün yeni bir penceresi açılır. Ve ilk karakterde veya başka bir TF'de hata ayıklamam gerekirse? Bunu şamanizm olmadan yapmanın, doğru olanın ilk olması için tüm karakterleri kaldırmak gibi bir yolu var mı?
Terminal ayarlarına gidin. Hata ayıklama için bir sembol seçeneği vardır.
 
Artyom Trishkin :
Terminal ayarlarına gidin. Hata ayıklama için bir sembol seçeneği vardır.

Artyom, biraz yanılıyorsun. Bunlar ME ayarlarıdır, terminal ayarları değil.


Daha az çalışma ihtiyacı.

 
Artyom Trishkin :
Terminal ayarlarına gidin. Hata ayıklama için bir sembol seçeneği vardır.

Hepsi bulundu, teşekkürler. Son zamanlarda MT5 ile çalışıyorum, henüz her şeyi bilmiyorum.

 
Alexey Viktorov :

Artyom, biraz yanılıyorsun. Bunlar ME ayarlarıdır, terminal ayarları değil.


Daha az çalışma ihtiyacı.

Evet, bir hata yaptım... Cep telefonundan yazdığınızda oluyor ve bakılacak bir yer yok...
 

2280 oluşturun. Bilgisayarın 4 işlemcisi var. 2 MT5 başlatıldı. İlkinde, uzun bir komut dosyası çalışıyor, sonuç olarak, terminal64.exe %100'de 1 işlemci yiyor ve bu da toplam %25 yük veriyor. İkinci MT5'te genetik optimizasyon başlatıldı. İşlemci sayısına göre standart 4 aracı. İlk görev grubu 127'de herkese gelir. Kalan görevler 2 temsilci tarafından alınır ve tamamlanır ve kalan 2 tanesi askıda kalır ve hatta alınmaz. Devre dışı bırakmaya-etkinleştirmeye zorlanırlarsa, çalışmaya bağlanırlar. Yeni bir optimizasyon başlangıcına kadar. İlk MT5'i çökertirseniz, durum aynı kalacaktır. Bundan sonra ikinci MT5'i yeniden başlatırsanız, sorun olmaz. Çok zor bir yük dengeleyici mi yoksa bir yerde bir hata mı var? İlki ise, o zaman çok başarılı değildir, çünkü sonunda indirme %75'e gider (ilk MT5 + 2 aracıları) ve yine de bu, Windows öncelikleri tarafından yönlendirilmelidir.

PS Mutlaka CPU kullanımı ile ilgili görünmüyor. Yeniden başlatmanın hemen ardından, sadece genetiği başlattım, başka hiçbir şey başlatılmadı, ayrıca 2 ajan filonili, kapatılıp açılana kadar. Sadece 3 aracıyı aktif tutarsanız, 1 tanesi tamamen devre dışı bırakılır, o zaman hala 2 filo, sadece 1 iş vardır.

PPS 6 işlemci varsa, zaten 3 avara vardır.
 

2280 oluşturun. Göstergede hata ayıkladım, hata ayıklayıcıda adım adım gerçekleştirdim. Çizgide

StartTime = iTime (Symbols[ 0 ], _Period , Pos + PosAddon);

hata ayıklama düştü. Kritik hata gibi bir şey, hata ayıklama durdu. günlüğüne yazdı

           crash -->   000000 B7250C38B1 038424 B8000000    add        eax, [rsp+ 0xb8 ]
                       000000 B7250C38B8 89442460           mov        [rsp+ 0x60 ], eax
                       000000 B7250C38BC 448 B4C2460        mov        r9d, [rsp+ 0x60 ]
                       000000 B7250C38C1 49 B8010000000000  mov        r8, 0x1
                                       0000
                       000000 B7250C38CB 488 B542468        mov        rdx, [rsp+ 0x68 ]
                       000000 B7250C38D0 48 B9E8DD4220B700  mov        rcx, 0xb72042dde8
                                       0000
                       000000 B7250C38DA 49 FF96580F0000    call       qword near [r14+ 0xf58 ]  ; # 11037 (terminal64.exe)
        
         00 : 0x000000B7250C38B1

Olur, ancak nadiren. Sebebi nedir, bilinmiyor, özellikle hata ayıklamalar arasında hiçbir şey değişmedi.

 

2280 oluşturun. Borsa, vadeli işlem piyasası. Tüm geçmiş yüklenir, ancak testler çevrimdışı yapılır. iBarShift bir şekilde göstergelerde garip bir şekilde çalışıyor. Ve aynı kod normalde bir komut dosyasında da çalışır. Bir hata mı yoksa bir şeyi mi gözden kaçırıyorum?

#property indicator_separate_window

void OnInit ()
{
   datetime Time[];
   ArraySetAsSeries (Time, true );
   CopyTime ( _Symbol , _Period , 0 , 1 ,Time);

   int Shift= iBarShift ( _Symbol , _Period ,Time[ 0 ]);
   Print (" Symbol ="+ _Symbol +", Shift="+( string )Shift);

   for ( int i= 0 ;i!= SymbolsTotal ( true );++i)
  {
     const string SymbName= SymbolName (i, true );
    Shift= iBarShift (SymbName, _Period ,Time[ 0 ]);
     Print (" Symbol ="+SymbName+", Shift="+( string )Shift);
  }
}

int OnCalculate ( const int rates_total, const int prev_calculated, const datetime & time[], const double & open[], const double & high[],
   const double & low[], const double & close[], const long & tick_volume[], const long & volume[], const int & spread[])
{
   return 0 ;
}

Böyle bir kod var. Aslında market saatindeki tüm sembollerin üzerinden geçer ve iBarShift'i çeker. Bir komut dosyasında tam olarak aynı kod normal olarak yerine getirir. Göstergede, geçerli olan (hangi grafikte başlatıldığı) dışındaki tüm semboller için geçmiş olmadığı hatasıyla -1 döndürür. Ve ikinci seferde, görünüşe göre hikayeyi yüklüyor ve zaten normal şekilde gösteriyor.

 
traveller00 :

aynı kod bir komut dosyasında iyi çalışır. Bir hata mı yoksa bir şeyi mi gözden kaçırıyorum?

Bir komut dosyasının aksine, gösterge eşzamansız olarak çalışır - geçmişin hazır olmasını beklemez.

 
fxsaber :

Bir komut dosyasının aksine, gösterge eşzamansız olarak çalışır - geçmişin hazır olmasını beklemez.

Yani tüm hikaye orada. Dediğim gibi çevrimdışı çalışıyor, tüm geçmiş zaten sunucudan indirilmiş. Yoksa başka bir şeye mi ihtiyacı var?

 
traveller00 :

Yani tüm hikaye orada. Dediğim gibi çevrimdışı çalışıyor, tüm geçmiş zaten sunucudan indirilmiş. Yoksa başka bir şeye mi ihtiyacı var?

Teoride, elbette, her şeyi soğuk bir başlangıçtan almanız gerekir. Uygulamada, göstergelere düşkün değildim, bu yüzden kesin olarak söylemeyi taahhüt etmeyeceğim.