iClose/iOpen zaman serilerine vb. erişimle çalışırken MQL5 hatası. - sayfa 9

 
Vitaly Muzichenko :

Yani böyle bir tasarımla çok hızlı bir göstergeye sahip olmak mümkün olacak mı?

Aksine, OnCalculate her tikte değil, bir grup tikten sonra çağrılacak.


Eğer öyleyse, o zaman bu harika bir haber!

 
Renat Fatkhullin :

#property tester_everytick_calculate bayrağını içermeyen göstergeler için, her bir onayda değil, bir grup onay almayı temel alan hesaplama modunu etkinleştirmek için bir fikrimiz var.

Bu, bazı göstergeler için her bir işaretin garantili işlenmesi olasılığını korurken, fren göstergeleri sorununu kökten çözecektir.

Başka bir çözüm öneriyorum.

SembolBilgiTick

MqlTick türündeki bir değişkende belirtilen sembol için geçerli fiyatları döndürür.

 bool    SymbolInfoTick ( 
   string     symbol,     // символ 
   MqlTick &  tick         // ссылка на структуру
   bool       IndicatorMode = true ; // индикаторный или реальный (текущий) тик
   );

Seçenekler

semboller

[içinde] Sembol adı.

kene

[out] Tip yapısına referans   Mevcut fiyatları ve son fiyat güncellemesinin zamanını içerecek olan MqlTick .

GöstergeModu

[out] true - in göstergeleri, geçerli NewCalculate'i başlatan onay işaretini, false - geçerli (gerçek zamanlı) sembol işaretini döndürür.

Geri dönüş değeri

Başarı durumunda true, aksi takdirde false döndürür.


O zaman OnCalculate'de sadece böyle bir yapıyı reçete etmek yeterli olacaktır.

 // Возвращает true, если текущий и индикаторный тики совпадают
bool IsRealTick( void )
{
   MqlTick Tick1, Tick2;
  
   return ( SymbolInfoTick ( _Symbol , Tick1) && SymbolInfoTick ( _Symbol , Tick2, false ) && (Tick1.time_msc == Time2.time_msc));
}

int OnCalculate ( ... )
{
   if (prev_calculated && !IsRealTick())
     return (prev_calculated); // Если тик устарел, идем к следующему
    
   // Body
  
   return (rates_total);
}

Bu çözüm, kullanım ve uygulama açısından daha esnek ve kullanışlı görünmektedir.


Tehdit Daha da iyisi, mevcut ve gösterge tik sayısını alma yeteneği ile kenelerin numaralandırılması olacaktır. Ancak bu seçenek geliştiriciler için daha zordur. Bu yüzden muhtemelen buna değmez.

 
fxsaber :

Başka bir çözüm öneriyorum.

Bununla birlikte, geliştiriciler adına hiçbir şey yapılmazsa (bu arada, bu çok iyi bir seçenektir), o zaman şimdi tüm frenleri bu şekilde atlayabilirsiniz.

 int OnCalculate ( ... )
{
   static ulong MinTimeMsc = 0
   const ulong StartTime = GetMicrosecondCount ();
  
   MqlTick Tick;
   const bool Res = prev_calculated && SymbolInfoTick ( _Symbol , Tick);
  
   if (Res && (Tick.timeMsc < MinTimeMsc))
     return (prev_calculated); // Если тик устарел, идем к следующему
    
   // Body
  
   if (Res)
    MinTimeMsc = Tick.time_msc + ( GetMicrosecondCount - StartTime) / 2000 ;
  
   return (rates_total);
}
 
fxsaber :

Bununla birlikte, geliştiriciler adına hiçbir şey yapılmazsa (bu arada, bu çok iyi bir seçenektir), o zaman şimdi tüm frenleri bu şekilde atlayabilirsiniz.

Barın ortasında kenelere ihtiyacımız yok, yine de zorla atlanıyorlar. mql'den uygulamayı bekleyelim.

 
Unicornis :

Barın ortasındaki kenelere gerek yok, yine de zorla atlanıyorlar. mql'den uygulamayı bekleyelim.

Dürüst olmak gerekirse, acı çekenleri sorunlarının çözümünü kendileri yazmaktan alıkoyan şeyin ne olduğunu anlamıyorum?

Ve geliştiriciler neden burada bir şeyi değiştirsin?


Yukarıdaki çözüm bir mqh dosyası olarak biçimlendirilebilir ve örneğin Init_Sync'te yapıldığı gibi herhangi bir göstergeye tek satırda bağlanabilir. Ama en azından gerçekten kodun düzgün bir şekilde yazılması gerekiyordu ve bariz değildi. Ve işte sadece birkaç satır.

Init_Sync
Init_Sync
  • www.mql5.com
Если в MT изменить таймфрейм или имя символа чарта, то все индикаторы на чарте выгрузятся с чарта и загрузятся на него снова. При этом, в отличие от MT4, в MT5 последовательность выгрузиться/загрузиться не определена из-за особенности внутренней архитектуры. Данное обстоятельство иногда вызывает не сразу очевидные проблемы, связанные с тем, что...
 
Renat Fatkhullin :

Yeniden bağlandıktan sonra başkasının görünmez zaman diliminin güncellemesinin dondurulmasıyla, bağlantılar çözülmüş ve düzeltilmiştir. Nedeni, yeniden bağlantıdan sonra yanlış önbellek durumlarındaydı.

Beta sürümü 1946, Yardım -> Masaüstü Güncellemelerini Kontrol Et -> En Son Beta Sürümü aracılığıyla kullanılabilir.

Rinat, 3 günlük testte sorun yok, teşekkürler!

 
fxsaber :

Dürüst olmak gerekirse, acı çekenleri sorunlarının çözümünü kendileri yazmaktan alıkoyan şeyin ne olduğunu anlamıyorum?

Ve geliştiriciler neden burada bir şeyi değiştirsin?

Acı çekenler, göstergede gelen tik sayısını hiçbir şekilde değiştiremezler, yeni bir çubuk olana kadar göstergede atlarlar, gösterge uzun süre sayılırsa, keneler hala atlanır. Bir şekilde gerçeğe uyum sağlamanız gerekiyor.

Bir sembol için tepe değeri dakikada ~800 tik ise, o zaman birkaç sembolden oluşan bir sentetik için zaten dakikada 2300 tik olur. Ondan bir sentetik ve bir sembol açtıktan sonra - dakikada ~ 3000 kenelik bir zirve. Aynı sentetik ve aynı sembolün başka bir zaman çerçevesini ekleyelim ve şunu elde ederiz... Üç Elder ekranı vardı, dakikada ~9000 tıklama veya saniyede 150 tıklama zirveye ulaştık. Rinat performans sorunları hakkında zaten yazmıştı. Tüm sembol tf'leri için dakikada 1 onay işaretine ihtiyacınız varsa, neden çok sembollü bir mtf göstergesi aracılığıyla saniyede 150 tıklamayı boşta geçirin? Benzer şekilde, barındırma mql'nin avantajları, ana bilgisayar sisteminden genel gider maliyetlerinin olmadığını gösterir, terminal yalnızca göstergeler ve uzmanlar için aynı ana bilgisayardır. Göstergenin hesaplanması RSI(3) + EMA(5)+ EMA(7) 'dan oluşuyorsa, elbette önümüzdeki 10 yıl içinde herhangi bir sorun öngörülmemektedir.

Sentetikte (aslında terminalden çok karakterli bir gösterge) Geliştiriciler bir şekilde birkaç karakteri birbirine yapıştırma fikrini buldular, neden bu sistemin öğelerini çoğaltın (diyelim ki ideal bile değil) göstergede programcının mastürbasyon? Sistem basitleştirilebilirse, neden olmasın. Dünya hala üç filin üzerinde durduğunda, bir nedenden dolayı 5 saniyelik bir TF icat edildi.

güncel TF'yi 5 saniye boyunca geçmiş olmadan girebilir ve sırasıyla her 5 saniyede bir kez işaretleyebilir ve ayrıca her türlü çözümü test edebilirsiniz (yalnızca 5S'de çalışmak için bir tür önek içeren bir gösterge derlemek, diğer göstergeler başlamaz it) - Mevcut terminal ideolojisine dokunulmadığı için çözümleri değiştirmek ve değiştirmek mümkün olacak ve test sırasında en iyi / optimal çözüm oluşturulacaktır.

(Geliştirme kitaplıklarınız için SOL'ler, sentetikler, müstakil pencereler vb. Geliştiriciler).

 
Unicornis :

Evet, dakikada en az bir milyon tıklama, bu çözümün çalışmamasına neden olmaz.

 
fxsaber :

Evet, dakikada en az bir milyon tıklama, bu çözümün çalışmamasına neden olmaz.

Soru, çözümün uygulanabilirliği ile ilgili değil. Daha önce bilinmeyen sayıda onay işaretinin atlandığı, kendisine ulaşan her onay işareti üzerindeki göstergeyi çağırmanın uygunluğu, ayrıca, işaretin bir miktar eskimesi olarak kabul edilir ??? Bir şey atlandığından (artan yük ile) ve gelen onay işaretinin alaka düzeyi bilinmediğinden, bu durum zamana bağlı analitik sorunu çözmez - değilse, neden onunla uğraşırsınız. Genel olarak, göstergelere kene akışını yasaklayın, her 5 saniyede bir platformdan göstergeye keneler bırakın - dakikada 12 kene, bu yeterlidir.

 
Unicornis :

Soru, çözümün uygulanabilirliği ile ilgili değil. Daha önce bilinmeyen sayıda onay işaretinin atlandığı, kendisine ulaşan her onay işareti üzerindeki göstergeyi çağırmanın uygunluğu, ayrıca, işaretin bir miktar eskimesi olarak kabul edilir ??? Bir şey atlandığından (artan yük ile) ve gelen onay işaretinin alaka düzeyi bilinmediğinden, bu durum zamana bağlı analitik sorunu çözmez - değilse, neden onunla uğraşırsınız. Genel olarak, göstergelere kene akışını yasaklayın, her 5 saniyede bir platformdan göstergeye keneler bırakın - dakikada 12 kene, bu yeterlidir.

aptallık.

Neden: