Başlatmada ChartNavigate - sayfa 6

 
Alexey Viktorov :

Bu gönderide: https://www.mql5.com/ru/forum/260815/page4#comment_7890492 , sorunun hangi koşullarda yeniden oluşturulabileceği ayrıntılı olarak anlatılmıştır. Bu, iddialarınıza göre yeniden üretilebildi. Buraya ne yazdın?

Yani, koşulların hafif bir şekilde değiştirilmesi, sorunun istikrarlı bir şekilde yeniden üretilmesine yol açtı.

Nedense fark etmemişsin.

 
Alexey Viktorov :

P./S.: Kodunuzda Yorum yerine Yazdır sadece daha bağışlayıcı olmaz. OnInit() içindeki yazdırma sonuçlarını karşılaştırmak, kopyalamak ve buraya yapıştırmak daha kolaydır

 
Alexey Viktorov :

Güncellemeyi her şeyin yerine oturacağı umuduyla değil, aynı yapılara sahip olmak için önerdim.

Igor, göstergenin tam sürümünde mi yoksa deneysel sürümde mi deneyler yapıyorsun?

Burada ve orada. Ama yine de, sorunun ne olduğunu kesin olarak söyleyemem: bu bir hata mı, değil mi? Yeterince tekrarlanabilir koşullar bulmak gereklidir.

 
Alexey Viktorov :

Nasıl yapılır?

Konunun ilk mesajındaki açıklamaya göre, bu açık bir grafiğe asılan bir göstergedir, yani geçmiş zaten yüklenmiştir. Böyle? Göstergeyi asarız, terminali kapatırız, terminali başlatırız , --- geçmiş nereye gidebilir? O zaten orada olsaydı...

İkinci olarak EURMXN sembolünü açtım. Terminale bakmadan ne olduğunu söyleyebilir misiniz? )))

Basitçe yapılır:

  1. Gösterge şablonu default.tpl adıyla kaydedilir.
  2. Daha önce hiç açılmamış olan grafik sembolü açılır.
Sonuç olarak, önce gösterge başlar ve ardından veri pompalama başlar. Ve bir şişede bir sürü olay var.

 
Ihor Herasko :

Burada ve orada. Ama yine de, sorunun ne olduğunu kesin olarak söyleyemem: bu bir hata mı, değil mi? Yeterince tekrarlanabilir koşullar bulmak gereklidir.

Biraz kötü bir ifaden var. Verdiklerim tekrarlanabilir koşullardan.

Başka bir şey de, evet, muhtemelen I ve II bloklarında açıklanmıştır, bu bir hata değil , terminal yeniden başlatıldığında veri yüklemenin özellikleridir.

Ayrıca, 1870 yapısında, oynatmada 1861'de elde edilenden farklılıklar vardı.

Mesaj kombinasyonları (başarılar ve hatalar 4111) de biraz değişti. Örneğin, daha önce böyle istikrarlı bir şekilde yeniden üretilebilir olsaydı:

test 2018 06 26 (GBPUSD,M5)     Alert : Успешно
test 2018 06 26 (GBPUSD,H1)     Alert : Ошибка № 4111

Şimdi, aynı kodla daha belirgin hata mesajları gibi görünüyor:

test 2018 06 26 (EURNZD,M5)     Alert : Ошибка № 4111
test 2018 06 26 (EURNZD,H1)     Alert : Ошибка № 4111

test 2018 06 26 (EURNZD,M5)     Alert : Ошибка № 4111
test 2018 06 26 (EURNZD,H1)     Alert : Ошибка № 4111

test 2018 06 26 (EURNZD,M5)     Alert : Ошибка № 4111
test 2018 06 26 (EURNZD,H1)     Alert : Ошибка № 4111

test 2018 06 26 (EURNZD,M5)     Alert : Успешно
test 2018 06 26 (EURNZD,H1)     Alert : Ошибка № 4111


Ve bu gönderideki III . blok artık 1870'de yeniden üretilmiyor.

1870'de burada anlatılanları çoğaltmak mümkün değildi: https://www.mql5.com/ru/forum/260815/page5#comment_7901728 Son şey - belki bir şekilde işletim sistemine bağlıdır (varsayım olarak). Yani, bu Vladimir'in kodu benim için sorunsuz çalışıyor

 
Ihor Herasko :

ChartNavigate işleviyle ilgili bir sorunla karşılaştım. Yanlış bir şey yapıyorum veya işlevde gerçekten bir sorun var. Yeterince sık kullananların aboneliğinden çıkın.

Bu nedenle, sorunun özü: OnInit() içindeki işlevi çağırırsanız , uçbirim başladığında ChartNavigate grafiği kaydırmaz. Belgeleri birkaç kez okudum. Hiçbir yerde başlatma sırasında bir işlevin çağrılamayacağını söylemez.

Oynatma için gösterge kodu:

Oynamak için adımlar:

  1. Grafik otomatik kaydırmayı devre dışı bırakın.
  2. Göstergeyi tabloya ekleyin. ChartNavigate, grafiği doğru konuma taşıyarak çalışacaktır.
  3. Terminali boşaltın.
  4. Terminali indirin. ChartNavigate, grafiği ofset olmadan görüntüleyerek çalışmayacaktır.
Peki, işlev bir hata ürettiyse. Ama o değil. Tüm çağrılar başarılıdır, ancak tam olarak terminal yeniden başlatıldığında grafik kaymaz.

Ve göstergenin üç çeşidini deneyin, her birinin sonucunu görün

1. ChartNavigate, diğer grafik komutlarının sonunda

 //+------------------------------------------------------------------+
//|                              TryToSetChartSettings_Indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {


//--- отключим автопрокрутку
   ChartSetInteger ( 0 , CHART_AUTOSCROLL , false );
//--- установим отступ правого края графика
   ChartSetInteger ( 0 , CHART_SHIFT , true );
//--- отобразим в виде свечей
   ChartSetInteger ( 0 , CHART_MODE , CHART_CANDLES );
//--- установить режим отображения тиковых объемов
   ChartSetInteger ( 0 , CHART_SHOW_VOLUMES , CHART_VOLUME_TICK ); 
//--- Прокрутим от правого края графика на 1000 баров влево
   ChartNavigate ( 0 , CHART_END ,- 1000 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

2. Tek başına ChartNavigate - başka grafik komutu yok

 //+------------------------------------------------------------------+
//|                              TryToSetChartSettings_Indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
/*
//--- отключим автопрокрутку
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графика
   ChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечей
   ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемов
   ChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK); 
*/
//--- Прокрутим от правого края графика на 1000 баров влево
   ChartNavigate ( 0 , CHART_END ,- 1000 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+


3. Diğer grafik komutlarından önce ChartNavigate

 //+------------------------------------------------------------------+
//|                              TryToSetChartSettings_Indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {

//--- Прокрутим от правого края графика на 1000 баров влево
   ChartNavigate ( 0 , CHART_END ,- 1000 );
//--- отключим автопрокрутку
   ChartSetInteger ( 0 , CHART_AUTOSCROLL , false );
//--- установим отступ правого края графика
   ChartSetInteger ( 0 , CHART_SHIFT , true );
//--- отобразим в виде свечей
   ChartSetInteger ( 0 , CHART_MODE , CHART_CANDLES );
//--- установить режим отображения тиковых объемов
   ChartSetInteger ( 0 , CHART_SHOW_VOLUMES , CHART_VOLUME_TICK ); 

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Rashid Umarov :

Ve göstergenin üç çeşidini deneyin, her birinin sonucunu görün

1. ChartNavigate, diğer grafik komutlarının sonunda

  1. Otomatik kaydırma etkinleştirilmiş olarak M1 grafiğine eklenir. Otomatik kaydırma kapatıldı, grafik 1000 çubuk sola taşındı.
  2. Göstergeyi tablodan ayırmadan terminali yeniden başlattı. Grafik mevcut mumu gösterdi, sola 1000 çubuk geçiş yok. Otomatik kaydırma devre dışı.
  3. Arka arkaya 2 7 kez tekrarlanan nokta Bunlardan, 1000 mum sola geçiş 3 kez, 4 kez tamamlandı - geçiş tamamlanmadı.
Geçişin tamamlanmadığı durumlarda ise "Güncelleme bekleniyor" mesajının çıktığını fark ettim. Sonuç, geçmişi yüklerken, terminalin grafiği zorla en son alıntılara kaydırdığını öne sürüyor gibi görünüyor. Bu, OnInit() yürütüldükten sonra gerçekleştiği için beklenmedik bir sonuç alıyoruz.

2. Yalnızca ChartNavigate - başka grafik komutu yok

  1. Bu sürümde otomatik kaydırma otomatik olarak devre dışı bırakılmadığı için manuel olarak kapattım ve göstergeyi bağladım. Grafik 1000 çubuk sola kaydırdı.
  2. Göstergeyi tablodan ayırmadan terminali yeniden başlattı.
  3. 7 vakanın 2'sinde kaydırma yapılır. Ayrıca, iki durumdan birinde, üç aşamada gerçekleşti: beklenen geçmişi görüntüleme, mevcut mumu görüntüleme, beklenen geçmişi görüntüleme. Görünüşe göre OnInit() iki kez yürütüldü: bir kez geçmişi yüklemeden önce ve ikinci kez sonra.

3. Diğer grafik komutlarından önce ChartNavigate

  1. Otomatik kaydırmayı açtı ve göstergeyi bağladı. Grafik sarsıldı ve mevcut muma geri döndü. 1000 çubuğu taşıma komutundan sonra otomatik kaydırma devre dışı bırakıldığından bekleniyor.
  2. Göstergeyi tablodan ayırmadan terminali yeniden başlattı (tablo mevcut mumu gösteriyor).
  3. 7 vakanın hepsinde, grafik mevcut mumu gösterdi, kaydırma titreşmedi bile.
Otomatik kaydırma kapalıyken ve geçmişin derinliklerinde bir yerde görüntülendiğinde , grafikte herhangi bir gösterge olmadan terminali yeniden başlatırsanız, her yükleme yaptığınızda, terminalin kapatıldığı yerin bir görüntüsünü alırsınız. Navigasyon komutlarının yürütülmesi sırasında bir yerde mevcut mumda bir hareket olduğu ortaya çıktı.
 
Ihor Herasko :

  1. Otomatik kaydırma etkinleştirilmiş olarak M1 grafiğine eklenir. Otomatik kaydırma kapatıldı, grafik 1000 çubuk sola taşındı.
  2. Göstergeyi tablodan ayırmadan terminali yeniden başlattı. Grafik mevcut mumu gösterdi, sola 1000 çubuk geçiş yok. Otomatik kaydırma devre dışı.
  3. Arka arkaya 2 7 kez tekrarlanan nokta Bunlardan, 1000 mum sola geçiş 3 kez, 4 kez tamamlandı - geçiş tamamlanmadı.
Geçişin tamamlanmadığı durumlarda ise "Güncelleme bekleniyor" mesajının çıktığını fark ettim. Sonuç, geçmişi yüklerken, terminalin grafiği zorla en son alıntılara kaydırdığını öne sürüyor gibi görünüyor. Bu, OnInit() yürütüldükten sonra gerçekleştiği için beklenmedik bir sonuç alıyoruz.

Mesajınızın/teklifinizin geriye doğru okunacağını hep unutuyorum. Eski şaka gibi:

1917, Ekim. Bir bayan, bir torunu, Nevsky'de kendi evinde oturuyor.
Decembrist. Sokakta gürültü duyan kapıcıdan orada ne olduğunu bulmasını ister.
olay.
- Bayan, devrim orada! Kapıcı döner.
- Ah, ne kadar harika! - bayan sevinir - büyükbabam bir devrim hayal etti!
Ve git canım ve devrimcilerin ne istediğini öğren?!
- Hanımefendi, zenginlerin olmamasını istiyorlar - diyor hademe döndüğünde.
- Garip - hanımefendi düşünceli bir şekilde diyor - ve büyükbabam orada fakir olmamasını istedi!

Terminali yeniden başlatmadan önce grafiğin özelliklerini değiştireceğinizi düşündüm.
 
Rashid Umarov :

Mesajınızın/teklifinizin tersten okunacağını hep unutuyorum.

Ne anlamda? Üç göstergenin çalışmasını kontrol etmeniz gerektiğini yazdınız. Konu, ChartNavigate'in daha sonra kullanılmasıyla terminalin yeniden başlatılmasıyla ilgili olduğundan, bunlar yapılan testler.

Terminali yeniden başlatmadan önce grafiğin özelliklerini değiştireceğinizi düşündüm.

Neden, eğer sorun ChartNavigate'in terminal başladığında her zaman çalışmamasıysa? Mesele tam da bu.

 
Ihor Herasko :

sorun şu ki ChartNavigate terminal başladığında her zaman çalışmıyor? Mesele tam da bu.

Ayrıca Profili değiştirirken. Ek olarak, ChartNavigate( chart_id, CHART_BEGIN, shift ) sonrasında örneğin CHART_FIRST_VISIBLE_BAR alırsanız , sonuç ChartNavigate çalışmış gibi olacaktır. Ve Expert Advisor'ı silerseniz, bu grafikte Expert Advisor'ı (bu veya başka bir) bir sonraki başlatışınızda, CHART_FIRST_VISIBLE_BAR alındığında, sonuç ChartNavigate çalışmamış gibi olacaktır.

Alt satır: ChartNavigate, CHART_FIRST_VISIBLE_BAR ile zaten birleştirilmiş son derece tartışmalı çalışma

Neden: