Hatalar, hatalar, sorular - sayfa 1234

 
Tapochun :
Sonra böyle bir soru. Gösterge M15 üzerinde çalışıyorsa. Yeni bir mum oluştu. M15 ve M30 için veri talep edilirken, aynı anda mevcut olmaları gerekir mi?

Evet.

Gösterge oluşturulduktan (normal işleme döngüsüne dahil edilir) ve normal onay (ontic) işleme döngüsüne girdikten sonra, veriler büyük olasılıkla kullanılabilir olacaktır. Ancak diğer karakterler için tarihin olası bir şekilde yeniden başlamasından dolayı bir garanti olmadığını unutmayın.

Yani her zaman bu göstergeleri sorgulamanın sonuçlarını kontrol edin. Ontik'te veri talep ederseniz ve mevcut değilse, bir sonraki onay işaretini kontrol etmek için hemen çıkın.

Tipik bir hata yapmayın "her şey her zaman hazır, teknik teslimat ve veri hesaplama süreçleri hakkında düşünmüyorum, bu beni ilgilendirmemeli, her zaman şanslıyım." Daima tembel başlatma mantığını ve veri kontrolünü uygulayın.

Programlarınızı boş bir tablo bazında test ettiğinizden emin olun. Genellikle, geçmiş tabanı manuel olarak silinerek terminali yeniden başlatmak, yanlış bir dizin veya sıfıra bölme nedeniyle çeşitli erişim hataları almak için yeterlidir.

Bir sembolde m15 bar alıyorsanız, aynı sembolde kesinlikle bir m30 bar vardır.

 
Renat :

Evet.

Bir soru daha. BarsCalculated() işlevi, bir EA'dan ve bir göstergeden çağrıldığında aynı şekilde mi davranır?
 
Tapochun :
Bir soru daha. BarsCalculated() işlevi, bir EA'dan ve bir göstergeden çağrıldığında aynı şekilde mi davranır?
Ve yanlış olan ne?
 
Renat :
Ve yanlış olan ne?

Sadece deneysel olarak farklı bilgiler edindim. Anladığım kadarıyla, aynı şekilde çalışmalılar. Ama değil. Bugün Pazar olduğu için mevcut saati kontrol etmek mümkün olmayacaktır. Ancak test cihazında da farklı şekilde çalışırlar. İşte iki kod örneği. Konu şu. Yedi TF'den veri almaya çalışıyoruz. En eski TF'den değil (hem danışman hem de gösterge) başlatıyoruz. Örneğin, M15 ile. Mevcut tik üzerinde yeni bir mum oluşumunun senkronizasyonu ve bu mum üzerindeki verilerin BarsCalculated() aracılığıyla alınması varsa, BarsCalculated() kullanarak hesaplanan çubukların sayısını ve mevcut mumun oluşum zamanını kaydederiz. Detaylar kodda.

Gösterge.

İlk tik.

Her TF için yeni bir mum oluşturulur. Ancak, TF M1, M5, M15 - BarsCalculated() üzerinde 0 döndürür. Ancak, TF M30, H1, H4, D1 - -1 döndürür. Bu, işlevin neden farklı çalıştığı sorusunu hemen gündeme getiriyor? Buna göre, TF M30 üzerinde çalıştırırsak - TF M1, M5, M15, M30 - BarsCalculated() için 0 döndürür. Ve buna göre, TF H1, H4, D1 için - -1 döndürür. Bundan, daha eski TF'ler için verilere başlangıçta erişilemez olduğu sonucuna varabiliriz.

İkinci tik.

Kodun mantığına göre senkronizasyon gerçekleşir, yani. kayıt parametreleri (tümü örneklerin günlüklerine göre);

Üçüncü ve sonraki tikler.

TF M30, H1, H4, D1 göstergesine göre yeni bir çubuk alıyoruz. Yine de, veriler zaten alınmış gibi. Ve şimdiki zaman diliminden daha büyük olan zaman dilimlerinin sayısının 1'den fazla olduğu ortaya çıktı. Çok garip davranış. Gelecekte (mevcut örneği kullanarak), senkronizasyon alamayacağız.

Danışman.

İlk tik.

Senkronizasyon hemen gerçekleşir. BarsCalculated() ile yeni bir değer almak, yeni bir mum oluşumuyla eşzamanlı olarak gerçekleşir.

İkinci ve sonraki keneler.

Fonksiyonun mantıksal davranışı. Her şey senkronize.

Her iki örneği de test cihazında kenelerle çalıştırın, her şeyi kendiniz anlayacaksınız. İşlevin mevcut davranışı, Uzman Danışmanlar ve göstergeler için farklıdır. Ayrıca, daha yüksek zaman dilimleri için göstergelerden veri almak gecikiyor. Dolayısıyla M15 ve M30 için veri talep ederken aynı anda mevcut olmayacaklarını düşünüyorum. Gerçek veriler - kesinlikle hayır!

Hala yanılıyorsam, eski TF'den gösterge verilerini nasıl doğru bir şekilde alacağımı söyleyin? Teşekkür ederim.

 
//+------------------------------------------------------------------+
//| Search position of an element in a sorted list                   |
//+------------------------------------------------------------------+
CObject *CList::QuickSearch(CObject *element)
  {
   int       i,j,m;
   CObject *t_node= NULL ;
//--- check
   if (m_data_total== 0 )
       return ( NULL );
//--- check the pointer is not needed
   i= 0 ;
   j=m_data_total;
   while (j>=i)
     {
       //--- ">>1" is quick division by 2
      m=(j+i)>> 1 ;
       if (m< 0 || m>=m_data_total)
         break ;
      t_node=GetNodeAtIndex(m);
       if (t_node. Compare(element,m_sort_mode) == 0 )
         break ;
       if (t_node. Compare(element,m_sort_mode) > 0 )
         j=m- 1 ;
       else
         i=m+ 1 ;
      t_node= NULL ;
     }
//--- result
   return (t_node);
  }
CList Standart Kitaplığı
İki kez Karşılaştırmaya neden olmak için ne ??? Bu pahalı bir işlem olabilir (eğer bazı alanlardaki eşdeğerliği değil de büyük nesnelerin eşitliğini kontrol etmek istiyorsanız).
Sonuçta, ilk karşılaştırmadan sonra sonucu kaydedebilirsiniz.
 
Renat :
Senden bir cevap beklemeli miyim? Yoksa bir hizmet masası vermek daha mı iyi?
 

Grafiğin altındaki bu simgeler nereden geliyor?

Grafikte gösterge yoktur ve simgeler her seferinde görünür. Onları kaldırmak için cazip oldum. Bu saçmalık nasıl devre dışı bırakılır? Terminal ayarlarında bununla ilgili bir şey bulamadım.

 
meat :

Grafiğin altındaki bu simgeler nereden geliyor?

Grafikte gösterge yoktur ve simgeler her seferinde görünür. Onları kaldırmak için cazip oldum. Bu saçmalık nasıl devre dışı bırakılır? Terminal ayarlarında bununla ilgili bir şey bulamadım.

Bunlar, Takvim sekmesindeki etkinliklerdir. Silmek için: "Takvim" sekmesine sağ tıklayın -> "Grafiklerde göster" -> "Tüm etkinlikleri sil.

PS Ve "Otomatik güncelleme" kutusunun işaretini kaldırın. Artık yeni Takvim etkinlikleri grafikte görüntülenmeyecek.

 
crOss :
Herhangi bir Uzman Danışmanı alın (MetaQuotes örneklerinden), belirli bir süre ve parametrelerle build 975 altında çalıştırın,
işin sonuçlarını almak, yani. verim eğrisi grafiği ve işlem tablosu.


Şimdi aynı Expert Advisor'ı build 1010 altında aynı periyotta çalıştırın ve aynı parametrelerle tamamen farklı sonuçlar alacaksınız...

PS Meta Test Cihazı 32-bit

Sonuçlardan hangileri doğrudur? Yapı 975'te mi yoksa 1010'da mı?
 

Herkese merhaba) Lütfen zamanlayıcıyı başlatmaya yardım edin:

int OnInit()

{

bool setTimer=EventSetTimer(60);

Print(" Zamanlayıcının ayarlanması ");

}

geçersiz OnTimer()

{

Print("Zaman Geçiyor");

}

Soru: neden çalışmıyor? Bütün beyin çıkardı ... (((