Hatalar, hatalar, sorular - sayfa 307

 
Jager :

usdjpy üzerinde test etmeye çalıştığımda aşağıdaki mesajı alıyorum:

ve sonsuz gibi görünüyor, 3000'e gelince kapandı. Testler 2010.10.01 - 2010.10.10 aralığına sadece açılış fiyatlarını dahil etmeye çalıştı.

401 inşa

Ayrıca başka bir uzak aracı başlatmak mümkün değildir, işte günlük:

Ben de dün benzer bir resim izledim ... tüm tarih aşırı yüklenmiş ve görünüşe göre bazı sorunlar varmış.

İşlemin bitmesini bekledim veya terminali yeniden başlattım.

Dün ilginç bir şey buldum. EA'yı yeniden derledikten sonra, siz terminali yeniden başlatana kadar değişiklikler test cihazında çalışmaz - ne karışıklık!!!

 
Im_hungry :
Tamamen destekliyorum - belki hizmet masasında? (Yüz kere kapatıyorum)
peki anlamı? hepsi biliyor...
 

Dünden itibaren uzmanlar dijital hayatlarını yaşamaya başladılar.

Test ederken rastgele bir odak verir... Ya sihirli bir şekilde OnInit() işlevini atlar ya da DeInit() işlevinde bir dizi aralık dışı hatası verir.


İşin püf noktası, aynı parametrelerle tüm testi başlatıp çalıştırabilmesi veya çökebilmesidir.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Im_hungry :

İşte görev: gösterge parametresini dinamik hale getirmek, bir pozisyonu kapatırken gösterge parametrelerinden birini değiştiriyoruz, tüm görev bu.

Şimdi benim çözümüm:

Bu kodun işe yaradığını söyleyebilirim. test farklı bir sonuç gösteriyor, ancak neden t.s. her seferinde, günlüğe baktım - 1 hafta boyunca her şey olması gerektiği gibi çalışıyor, sonra döngüler ve aynı değerleri tampona veriyor, bu imkansız olsa da (test günlüğünde 2 hafta aynı değerler) , eğer döngüye girmezse, sadece bir hata yazar:

Uyarı yoluyla mesaj

Anlayabildiğim kadarıyla, yeni bir çubuk göründüğünde, EA bazı göstergelerin bir tanıtıcısını oluşturur ve aynı zamanda bu göstergenin arabelleklerinin kopyalanmasını gerektirir. Ancak aynı zamanda, gösterge arabelleklerini hesaplamanın biraz zaman alabileceği durum çözülmedi. Başka bir deyişle, gösterge tanıtıcısı başarıyla oluşturulabilir, ancak gösterge arabellekleri henüz hesaplanmamıştır.
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
Yedelkin :
Anlayabildiğim kadarıyla, yeni bir çubuk göründüğünde, EA bazı göstergelerin bir tanıtıcısını oluşturur ve aynı zamanda bu göstergenin arabelleklerinin kopyalanmasını gerektirir. Ancak aynı zamanda, gösterge arabelleklerini hesaplamanın biraz zaman alabileceği durum çözülmedi. Başka bir deyişle, gösterge tanıtıcısı başarıyla oluşturulabilir, ancak gösterge arabellekleri henüz hesaplanmamıştır.

Evet, katılıyorum - bu yüzden bu tasarımı denedim:

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{ 
   if (isNewBar()== true && proverkaHANDLA()== true )
     {
       if (! PositionSelect (Symbol1) && ! PositionSelect (Symbol2))
         {
          BSOpen();
         }
     }    
}
//+==================================================================+
bool proverkaHANDLA()
{
   ArraySetAsSeries (Sp1Buffer, true );
   ArraySetAsSeries (Sp2Buffer, true );
//----------------------
  vhandle= iCustom ( NULL , 0 , "МТ5" ,Symbol1, 100 ,Lots, 1 ,Close());
   if (vhandle< 0 )
    {
     Alert ( "Ошибка при создании индиката: " , GetLastError ());
     return ( 0 );
    }
   if ( CopyBuffer (vhandle, 0 , 0 , 50 ,Sp1Buffer)< 0 || CopyBuffer (vhandle, 1 , 0 , 50 ,Sp2Buffer)< 0 )
    {
     Alert ( "Ошибка копирования буферов индикатора номер ошибки:" , GetLastError ());
     return ( 0 );
    }
   return ( true );
}

İşe yaradığını göster! Yardımın için teşekkürler

 

Ama zaman zaman aynı şeyi veriyor:

 Alert : Ошибка копирования буферов индикатора номер ошибки: 4806
 
Im_hungry :

Evet, katılıyorum - bu yüzden bu tasarımı denedim:

İşe yaradığını göster! Yardımın için teşekkürler

Bu yapı, "tutamacın yaratıldığı, ancak gösterge arabelleklerinin henüz hesaplanmadığı" durumları atlar. Yapının kendisi dönem başına bir kez çağrıldığından, yine de CopyBuffer() işlevlerine birden çok çağrıyı deneyebilirsiniz. Onlar. CopyBuffer()<0 ise, seçilen süre izin verdiği sürece (seçilen süre içinde) işlev çağrılarını tekrarlayın.
 
Im_hungry :

Ama zaman zaman aynı şeyi veriyor:

Bu doğru. ProverkaHANDLA() işleviniz, CopyBuffer()'ı kendi içinde bir kez çağıran bağımsız bir bloktur. Buna göre, arabellekler hesaplanmazsa, her zaman bir uyarı açılır. Şimdiye kadar, proverkaHANDLA() işleviniz "tutamaç oluşturuldu, ancak gösterge arabellekleri henüz hesaplanmadı" durumunu işlemez, ancak yok sayar.

 
Yedelkin :
Bu yapı, "tutamacın oluşturulduğu, ancak gösterge arabelleklerinin henüz hesaplanmadığı" durumları atlar. Yapının kendisi dönem başına bir kez çağrıldığından, yine de CopyBuffer() işlevlerine birden çok çağrıyı deneyebilirsiniz. Onlar. CopyBuffer()<0 ise, seçilen süre izin verdiği sürece (seçilen süre içinde) işlev çağrılarını tekrarlayın.

yani CopyBuffer>0 iken onu hesaplıyoruz ve yeni parametre (Close())

bir pozisyon kapatıldığında görünür. Yani, while üzerinden döngü yapmanız gerekir. Bu böyle çıkıyor.

 if (! PositionSelect (Symbol1) && ! PositionSelect (Symbol2))
  {
   While (vhandle> 0 )
    {
     if ( CopyBuffer (vhandle, 0 , 0 , 50 ,Sp1Buffer)< 0 || CopyBuffer (vhandle, 1 , 0 , 50 ,Sp2Buffer)< 0 )
      {
       Alert ( "Ошибка копирования буферов индикатора номер ошибки:" , GetLastError ());
       return ( 0 );
      }
    }
  }
 
Yardımda Hesaplanan Barlar hakkında okumaya çalışın, bu arada gerekli örnek hemen orada verilmiştir.