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
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.
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:
Gösterge şablonu default.tpl adıyla kaydedilir.
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.
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 20180626 (GBPUSD,M5) Alert : Успешно
test 20180626 (GBPUSD,H1) Alert : Ошибка № 4111
Şimdi, aynı kodla daha belirgin hata mesajları gibi görünüyor:
test 20180626 (EURNZD,M5) Alert : Ошибка № 4111
test 20180626 (EURNZD,H1) Alert : Ошибка № 4111
test 20180626 (EURNZD,M5) Alert : Ошибка № 4111
test 20180626 (EURNZD,H1) Alert : Ошибка № 4111
test 20180626 (EURNZD,M5) Alert : Ошибка № 4111
test 20180626 (EURNZD,H1) Alert : Ошибка № 4111
test 20180626 (EURNZD,M5) Alert : Успешно
test 20180626 (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
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:
Grafik otomatik kaydırmayı devre dışı bırakın.
Göstergeyi tabloya ekleyin. ChartNavigate, grafiği doğru konuma taşıyarak çalışacaktır.
Terminali boşaltın.
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 |//+------------------------------------------------------------------+intOnInit ()
{
//--- отключим автопрокрутку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 |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn (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 |//+------------------------------------------------------------------+intOnInit ()
{
/*
//--- отключим автопрокрутку
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 |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn (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 |//+------------------------------------------------------------------+intOnInit ()
{
//--- Прокрутим от правого края графика на 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 |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn (rates_total);
}
//+------------------------------------------------------------------+
Ve göstergenin üç çeşidini deneyin, her birinin sonucunu görün
1. ChartNavigate, diğer grafik komutlarının sonunda
Otomatik kaydırma etkinleştirilmiş olarak M1 grafiğine eklenir. Otomatik kaydırma kapatıldı, grafik 1000 çubuk sola taşındı.
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ışı.
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
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ı.
Göstergeyi tablodan ayırmadan terminali yeniden başlattı.
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
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.
Göstergeyi tablodan ayırmadan terminali yeniden başlattı (tablo mevcut mumu gösteriyor).
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ı.
Otomatik kaydırma etkinleştirilmiş olarak M1 grafiğine eklenir. Otomatik kaydırma kapatıldı, grafik 1000 çubuk sola taşındı.
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ışı.
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!
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.
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
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.
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
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.
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:
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ı:
Şimdi, aynı kodla daha belirgin hata mesajları gibi görünüyor:
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
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:
Ve göstergenin üç çeşidini deneyin, her birinin sonucunu görün
1. ChartNavigate, diğer grafik komutlarının sonunda
2. Tek başına ChartNavigate - başka grafik komutu yok
3. Diğer grafik komutlarından önce ChartNavigate
Ve göstergenin üç çeşidini deneyin, her birinin sonucunu görün
1. ChartNavigate, diğer grafik komutlarının sonunda
2. Yalnızca ChartNavigate - başka grafik komutu yok
3. Diğer grafik komutlarından önce ChartNavigate
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!
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.
Neden, eğer sorun ChartNavigate'in terminal başladığında her zaman çalışmamasıysa? Mesele tam da bu.
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