Başlatmada ChartNavigate - sayfa 2

 
Ihor Herasko :

Ve kene yoksa, hafta sonu? Ardından zamanlayıcının bağlanması gerekecektir.

Ve sonuçta, tek bir soruyu çözmeniz gerekiyor: Başarılı ChartNavigate işleme gerçeği nasıl belirlenir? True döndürmesi sadece "gösteri amaçlıdır", gerçek çalışmaya hiçbir şekilde yardımcı olmaz.

Danışmanda yukarıda yayınladığım kodu kontrol etmeniz gerekiyor ...

 
Vladimir Karputov :

Danışmana yukarıda gönderdiğim kodu kontrol etmeniz gerekiyor ...

Peki ya danışman?

 
Ihor Herasko :

Peki ya danışman?

Kontrol etmek gerekiyor...

 //+------------------------------------------------------------------+
//|                                                  Test EA.mq5.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"
//--- input parameters
input bool redraw= true ;
input ENUM_CHART_POSITION position= CHART_BEGIN ;
//---
long count= 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   count= 0 ;
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   Comment ( "" );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   count++;
//Comment(count);
   if (count== 9 || count== 19 )
     {
       ResetLastError ();
       if (position== CHART_BEGIN )
        {
         if ( ChartNavigate ( ChartID (), CHART_BEGIN , 100 ))
             Print ( "Успешно. redraw " ,redraw, ". position " , EnumToString (position));
         else
             Print ( "Ошибка №" , GetLastError (), ". redraw " ,redraw, ". position " , EnumToString (position));
        }
       if (position== CHART_END )
        {
         if ( ChartNavigate ( ChartID (), CHART_END ,- 100 ))
             Print ( "Успешно. redraw " ,redraw, ". position " , EnumToString (position));
         else
             Print ( "Ошибка №" , GetLastError (), ". redraw " ,redraw, ". position " , EnumToString (position));
        }
       if (redraw)
         ChartRedraw ();
     }
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   long first_bar= ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR , 0 );
//--- добавим символ переноса строки 
   string comm= "\r\n" ;
//--- дополним коментарий 
   comm=comm+ "Первый бар на графике имеет номер " + IntegerToString (first_bar)+ "\r\n" ;
//--- выведем комментарий 
   Comment (comm);
  }
//+------------------------------------------------------------------+
Dosyalar:
Test_EA.mq5  6 kb
 

Vladimir Karputov :

İşte böyle bir gösterge - Özellikle dokuz kene gecikmesi, iki tür grafik hareketi ve zorunlu yeniden çizme bayrağı (açık / kapalı) ayarladım

Yeni başlayan biri değilsin. Neden yanılıyorsun? Renat Fatkhullin'in söylediklerini neden görmezden geliyorsunuz?

Kodunuzda (what is here , what is here ) her tik için yorum oluşturarak her tik üzerindeki grafiğin yeniden çizilmesi zorunlu kılınmıştır.


Diğer bir deyişle, giriş parametrelerindeki bayrağın etkin veya devre dışı olmasına bakılmaksızın.


Bayrağınızı giriş parametrelerine dahil etmek, bu durumda, yalnızca C hartRedraw () aracılığıyla ek bir yeniden çizime neden olur.

Yani faydalı olmak yerine yorum oluşturarak zaten orada olanlara ek bir yük oluşturur.

P./S.:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Renat Fatkhullin , 2017.12.05 02:51

...

MT5'te Yorum işlevi, grafiğin açıkça yeniden çizilmesine neden olur...

Fark sadece bu.


Yorum çağrıldıktan sonra MT4'te ChartRedraw() zorlanırsa, davranış yine MT5'teki gibi olmayacaktır. Metatrader 4'teki ChartRedraw(), yorumun değerini yok sayar ve grafiğin son kareden güncellenip güncellenmeyeceğine kendi başına karar verir. Elbette, grafik verilerinin geçersiz olmasına neden olan saniyede yüzlerce alıntı olmadığında, ChartRedraw "neden değişmemiş bir grafik çizdiğine" karar verir ve çerçeve çizimini atlar.

Metatrader 5 de aynı sisteme sahiptir, ancak koşulsuz işlemeye öncelik verilen daha birçok durum vardır.

Terminaller grafik uygulamalardır, saniyede yüzlerce kare sağlayabilir ve performansı artırmak için ekran tasarrufu modunda çalışır.


Bu nedenle, kıyaslama yapılırken ek sonuçlar:

  • ChartRedraw çağrısı, grafiğin gerçek bir çizimi olarak kabul edilemez.

  • "Çerçevenin neden çizildiğini" ve "piyasanın iç resmini geçersiz kılıyor muyum, böylece terminal çerçeveyi yeniden çizmeye karar veriyor mu" ifadelerini her zaman bilmeniz ve kanıtlamanız gerekir.

  • Kıyaslamalar sırasında birden fazla sonuç çıkaramazsınız MT5'te yorum yapın, her zaman çizimi nasıl etkilediğinizi düşünmeniz gerekir

  • MT5, tablodaki nesneleri değiştirmek için daha doğru bir sisteme sahiptir ve okuma/yazma komutlarını karıştırmanın sonuçlarını net bir şekilde anlamanız gerekir.
    okuma/yazma komutlarının karıştırılmaması, toplu okuma ve toplu yazma komutlarının ayrı yapılması önerilir.

  • kıyaslamalarda grafiklerin sık sık yeniden çizilmesi, sonuçların grafik kartına büyük ölçüde bağımlı olmasına yol açar.
    aslında, bazı testler algoritmaların veya işlevlerin değil grafik kartının test edilmesiyle sonuçlanabilir. bir dizüstü bilgisayarda ve bir masaüstü bilgisayarda yapılan bir test, yalnızca 3-5 kat daha yavaş bir ekran kartı nedeniyle birden çok kez farklı sonuçlar gösterebilir

Bu hatalar hep yapılıyor.


 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Başlatmada ChartNavigate

Vladimir Karputov , 2018.06.25 18:52

Kontrol etmek gerekiyor...

...
void OnTick ()
  {
//---
   count++;
//Comment(count);
   if (count== 9 || count== 19 )
     {
       ResetLastError ();
       if (position== CHART_BEGIN )
        {
         if ( ChartNavigate ( ChartID (), CHART_BEGIN , 100 ))
             Print ( "Успешно. redraw " ,redraw, ". position " , EnumToString (position));
         else
             Print ( "Ошибка №" , GetLastError (), ". redraw " ,redraw, ". position " , EnumToString (position));
        }
       if (position== CHART_END )
        {
         if ( ChartNavigate ( ChartID (), CHART_END ,- 100 ))
             Print ( "Успешно. redraw " ,redraw, ". position " , EnumToString (position));
         else
             Print ( "Ошибка №" , GetLastError (), ". redraw " ,redraw, ". position " , EnumToString (position));
        }
       if (redraw)
         ChartRedraw ();
     }
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   long first_bar= ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR , 0 );
//--- добавим символ переноса строки 
   string comm= "\r\n" ;
//--- дополним коментарий 
   comm=comm+ "Первый бар на графике имеет номер " + IntegerToString (first_bar)+ "\r\n" ;
//--- выведем комментарий 
   Comment (comm);
  }
//+------------------------------------------------------------------+

P./S.: İkinci kodunuza ek olarak: bir metin girişini güncellemeden ve aynı yorumu göndermeden önce, verilerin değişip değişmediğini kontrol edin. Değilse, metnin güncellenmesini ve yayınlanmasını ertelemek daha iyidir.

Yani bu durumda grafikteki ilk çubuğun numarasının değişip değişmediği

 
Vladimir Karputov :

Kontrol etmek gerekiyor...

Mmm. Bunun ne için olduğunu tam olarak anlamıyorum. İyi tamam. Kurulmuş. CHART_BEGIN ve CHART_END modlarında kontrol edildi. Her şey belirtildiği gibi çalışıyor. Yeniden başlattıktan sonra her şey yolunda.

Ya da koltuk değneği kullanma eğilimindesiniz - ChartNavigate'ten sonra grafikteki ilk çubuğun numarasını kontrol edin ve eğer bu değilse ChartNavigate'i yeniden çalıştırmanız gerekir.

Evet, çıktı, elbette, onu da düşündüm. Ancak terminalin bu tür özelliklerini sürekli olarak hatırlamak zaten sıkıcı. Bunun bir bug olması tamamen olasıdır.

 
Dina Paches :

P./S.: İkinci kodunuza ek olarak: bir metin girişini güncellemeden ve aynı yorumu göndermeden önce, verilerin değişip değişmediğini kontrol edin. Değilse, metnin güncellenmesini ve yayınlanmasını ertelemek daha iyidir.

Yani bu durumda grafikteki ilk çubuğun numarasının değişip değişmediği

Elbette bilgi için teşekkürler, ama burada performanstan bahsetmiyoruz. Tartışılan problem biraz farklı bir düzlemdedir, bunlar sadece problemin tezahürünü kontrol etmek için test kodlarıdır))

 
Ihor Herasko :

Elbette bilgi için teşekkürler, ama burada performanstan bahsetmiyoruz. Tartışılan problem biraz farklı bir düzlemdedir, bunlar sadece problemin tezahürünü kontrol etmek için test kodlarıdır))

Rica ederim. Ancak alıntı yaptığınız diğer gönderime bakın, bir dipnot.

P./S.: Lütfen indirim yapmayın. Ne içerdiğini bilerek böyle kodlarım var, artık başlamayacağım. Benim tekniğim devlete ait değil

 
Ihor Herasko :

Mmm. Bunun ne için olduğunu tam olarak anlamıyorum. İyi tamam. Kurulmuş. CHART_BEGIN ve CHART_END modlarında kontrol edildi. Her şey belirtildiği gibi çalışıyor. Yeniden başlattıktan sonra her şey yolunda.

Ya da koltuk değneği kullanma eğilimindesiniz - ChartNavigate'ten sonra grafikteki ilk çubuğun numarasını kontrol edin ve eğer bu değilse ChartNavigate'i yeniden çalıştırmanız gerekir.

Evet, çıktı, elbette, onu da düşündüm. Ancak terminalin bu tür özelliklerini sürekli olarak hatırlamak zaten sıkıcı. Bunun bir bug olması tamamen olasıdır.

Eskiden navigasyon vardı. Şimdi burada özel bir kontrol var.


Eklendi: Yoruma dikkat etmeyin :)

 
Vladimir Karputov :

Eskiden navigasyon vardı. Şimdi burada özel bir kontrol var.


Eklendi: Yoruma dikkat etmeyin :)

Neyden? Saçma sapan şeyler mi yazdım/alıntı yaptım?

Neden: